Программирование >>  Хронологические базы данных 

1 ... 132 133 134 [ 135 ] 136 137 138 ... 348


но, процедуру нормализации иначе можно неформально охарактеризовать как процедуру разбиения логически несвязанной информации на отдельные переменные-отношения.

Операция UPDATE. Название города для каждого поставшика повторяется в переменной-отношении FIRST несколько раз, и эта избыточность приводит к возникновению проблем при обновлении. Например, если поставшик с номером S1 переместится из Лондона в Амстердам, то необходимо будет отыскать в переменной-отношении FIRST все кортежи, в которых значения S1 и London связаны между собой (для внесения соответствуюших изменений), иначе база данных окажется в противоречивом состоянии (в одних кортежах городом поставщика с номером S1 будет Лондон, а в других - Амстердам).

Для решения всех этих проблем, как предлагалось выше, необходимо заменить переменную-отношение FIRST двумя следующими переменными-отношениями.

SECOND { St, STATUS, CITY } SP { St, Pt, QTY }

Диаграммы функциональных зависимостей для этих двух переменных-отношений показаны на рис. 11.7, а наборы данных- на рис. 11.8. Обратите внимание, что теперь в них имеется и информация о поставщике с номером S5 (в переменной-отношении SECOND, но не в переменной-отношении SP), а содержимое переменной-отношения SP теперь в точности совпадает с содержимым нашей обычной переменной-отношения поставок.

CITY

STATUS

Puc. 11.7. Функциональные зависимости в переменных-отношениях SECOND и SP

Легко убедиться, что измененная подобным образом структура данных позволяет преодолеть все перечисленные выше проблемы, связанные с выполнением операций обновления.

Операция INSERT. Теперь информацию о том, что поставщик с номером S5 находится в Афинах, можно поместить в базу данных, вставив соответствующий кортеж в переменную-отношение SECOND, причем даже в том случае, если он в настоящее время не поставляет никаких деталей.

Операция DELETE. Теперь уже можно исключить информацию о поставке, в которой соединены сведения о поставщике с номером S3 и о детали с номером Р2. Достаточно удалить соответствующий кортеж из переменной-отношения SP, причем информация о том, что поставщик с номером S3 находится в Париже, не утрачивается.



SECOND

STATUS

CITY

London

Paris

Paris

London

Athens

Puc. 11.8. Пример данных в переменных-отношениях SECOND и SP

Ш Операция UPDATE. В переработанной структуре название города для каждого поставщика указывается всего один раз, поскольку существует только один кортеж для данного поставщика в переменной-отнощении SECOND (атрибут SI является первичным ключом этой переменной-отнощения). Иначе говоря, избыточность данных St-CITY устранена. Благодаря этому теперь можно изменить название города Лондон для поставщика с номером S1 на Амстердам, не рискуя привести базу данных в несогласованное состояние, поскольку достаточно изменить название города в единственном кортеже переменной-отнощения SECOND.

Сравнивая рис. 11.7 и 11.5, можно заметить, что суть разбиения переменной-отнощения FIRST на переменные-отнощения SECOND и SP состояла в исключении зависимостей, которые не являлись неприводимыми. Именно благодаря этому в новом варианте удается избежать упомянуть[х ранее трудностей. Интуитивно понятно, что в переменной-отнощении FIRST атрибут CITY описывал не сущность, которая идентифицируется первичным ключом (поставка), а поставщика, выполнявщего эту поставку (аналогичное утверждение можно сделать и об атрибуте STATUS). Смещивание этих двух типов информации в одной переменной-отнощении и стало причиной возникновения описанных выще проблем.

Теперь прищло время дать определение второй нормальной формы.

Вторая нормальная форма (в определении предполагается наличие только одного потенциального ключа, который и является первичным ключом отношения). Переменная-отнощение находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от ее первичного ключа.

Обе переменные-отнощения (и SECOND, и SP) находятся во второй нормальной форме (их первичные ключи- {SI} и {Sl, Р} соответственно), тогда как переменная-отнощение FIRST не находится в этой форме. Всякую переменную-отношение, которая находится в пер-

Строго говоря, 2НФ .может быть определена только по отношению к заданному .множеству зависимостей, но в неформальном контексте эта особенность обычно игнорируется. Аналогичные замечания приложилш также ко всем нормальным формам (кроме, конечно же, первой нормальной формы).



вой нормальной форме, но не находится во второй, всегда можно свести к эквивалентному множеству переменных-отношений, находящихся в 2НФ. Этот процесс заключается в замене переменной-отношения в IНФ подходящим набором проекций, эквивалентных исходной переменной-отношению в том смысле, что ее при необходимости можно будет восстановить с помощью обратной операции соединения данных проекций. В нашем примере переменные-отношения SECOND и SP - это проекции переменной-отношения FIRST, которая является соединением переменных-отношений SECOND и SP по атрибуту Sf.

Таким образом, первый этап процедуры нормализации состоит в создании проекций, которые позволяют исключить функциональные зависимости, не являющиеся неприводимыми. Пусть дана переменная-отношение R, имеющая следующий вид.

R { А, В, С, D }

PRIMARY KEY { А, В }

/* Предполагается наличие функциональной зависимости А -> D */

Процедура нормализации предусматривает замену этой переменной-отношения следующими двумя проекциями R1 и R2.

R1 { А, D } PRIMARY KEY { А }

R2 { А, В, С }

PRIMARY KEY { А, В }

FOREIGN KEY { А } REFERENCES Rl

Переменная-отношение R всегда может быть восстановлена посредством соединения переменных-отношений R1 и R2 по внешнему и соответствующему ему первичному ключам этих переменных-отношений.

Вернемся к нашему примеру. Следует отметить, что выбранная структура переменных-отношений SECOND и SP все еще может вызвать некоторые проблемы. Структура переменной-отношения SP вполне удовлетворительна, поскольку она фактически находится в ЗНФ. Поэтому мы больше не будем уделять ей внимание до конца данного раздела. Однако в переменной-отношении SECOND неключевые атрибуты все еще не являются взаимно независимыми. Диаграмма функциональных зависимостей для нее по-прежнему имеет вид более сложный, чем это требуется для диафаммы ФЗ переменной-отношения, находящейся в ЗНФ. В частности, зависимость атрибута STATUS от атрибута SI хотя и является функциональной и действительно неприводимой, одновременно является транзитивной (через атрибут CITY). Это означает, что каждое значение атрибута St определяет значение атрибута CITY, а значение атрибута CITY, в свою очередь, определяет значение атрибута STATUS. В общем случае, как уже объяснялось в главе 10, если имеют место две функциональные зависимости А -> В и В -> С, то имеет место и транзитивная функциональная зависимость А -> С. Однако наличие транзитивных зависимостей мо-

За исключением того факта, что переменная-отношение SECOND может содержать дополнительные кортежи (например, кортеж для поставщика с номером S5), которые не будут иметь аналога в переменной-отношении FIRST (см. рис 11.8). Иначе говоря, новая структура может содержать информацию, которую невозможно будет представить в исходной структуре. В этом смысле новую структуру можно рассматривать как более корректное представление реального мира.



1 ... 132 133 134 [ 135 ] 136 137 138 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика