Проблема дублирования информации
В некоторых случаях замена ИФ его полной декомпозицией позволяет избежать дублирования информации.
Рассмотрим пример. Пусть в исходном файле (как и в примере в подразд. 6.1) хранятся данные о сотрудниках, дежуривших в составе оперативной группы управления предприятием («ДАТА» — дата дежурства; «ТЕЛЕФОН» — рабочий телефон сотрудника).
Рассмотрим две проекции файла:
Данные проекции образуют полную декомпозицию исходного файла. В ПФ2 номер рабочего телефона каждого сотрудника упоминается однократно, тогда как в ИФ — столько раз, сколько этот сотрудник заступал на дежурство. Очевидно, что для нашего примера разбиение ИФ на проекции позволяет избежать дублирования информации.
Устранение дублирования информации важно по двум причинам:
· устранив дублирование, можно добиться существенной экономии памяти;
· если некоторое значение поля повторяется несколько раз, то при корректировке данных необходимо менять содержимое всех этих полей, в противном случае нарушится целостность данных.
Для того чтобы найти критерий, позволяющий объективно судить о целесообразности использования полной декомпозиции файла с точки зрения исключения дублирования информации, воспользуемся понятием первичного ключа. Напомним, что первичным ключом называют минимальный набор полей файла, по значениям которых можно однозначно идентифицировать запись. Если значение первичного ключа не определено, то запись не может быть помещена в файл БД.
Можно показать, что для нашего примера проекции
образуют полную декомпозицию ИФ, однако они не исключают дублирования информации.
Причина этого заключается в том, что обе приведенные проекции содержат первичный ключ исходного файла (таковым в рассмотренном примере является поле «ДАТА», если, конечно, сотрудник не может одновременно находиться в двух и более оперативных группах).
Можно доказать, что дублирование информации неизбежно, если проекции, порождающие полную декомпозицию, содержат общий первичный ключ исходного файла.
Рассмотрим ИФ:
и две его проекции:
Для того чтобы вторая запись ИФ отличалась от первой (в противном случае имели бы в файле БД две одинаковые записи, что недопустимо), она формально должна быть представлена одним из семи вариантов:
(x, у, z); (х, у', z); (х, у, z'); (х', у', z); (x, у', z'); (x', у', z'); (х', у, z').
Пусть FY— первичный ключ. Для того чтобы дублирования информации не было, вторая запись ИФ должна быть или (х', у, z), или (х, у, z'), но это противоречит тому, что FY — первичный ключ. Следовательно, для того, чтобы дублирования информации не было, необходимо исключить наличие первичного ключа ИФ в проекциях, образующих его полную декомпозицию.
Другими словами, если существует такая полная композиция файла, которая образована проекциями, не имеющими первичного ключа ИФ, то замена ИФ этой декомпозицией исключает дублирование информации. Если же полная декомпозиция файла содержит проекции, имеющие общий первичный ключ ИФ, то замена его полной декомпозицией не исключает дублирования информации.