Полная функциональная зависимость

Атрибут (или набор атрибутов) В из отношения R называется полностью зависимым от другого набора атрибутов А отношения R, если В функционально зависит от всего множества А, но не зависит от ни от какого подмножества А.

И, другими словами: неключевой атрибут функционально полно зависит от составного ключа, если он функционально зависит от ключа, но не находится в функциональной зависимости ни от какой отдельной части составного ключа.

Рассмотрим пример 1 отношение R2.

Атрибуты ФИО, ОКЛАД, КОМНАТА, ТЕЛЕФОН не находятся в полной функциональной зависимости от ключа отношения, поскольку они функционально зависят от части ключа – ТАБЕЛЬНОГО НОМЕРА. Имеет место дублирование информации, поскольку у сотрудника может быть много детей и для каждого из них будут храниться сведения об окладе родителя, в какой комнате он работает и телефоне.

При изменении оклада, комнаты и телефона понадобится корректировать не одну, а несколько записей. Также проблема возникает с сотрудниками, у которых нет детей и база данных не может содержать сведения о таких сотрудниках.

Рассмотрим пример 3.

Атрибут КОЛИЧЕСТВО РАБОЧИХ ЧАСОВ является полностью зависимым от составного ключа (НОМЕРПРОГРАММИСТА, НОМЕРПРОГРАММЫ), т.к. он задает количество рабочего времени, затраченного данным программистом на конкретную программу. При этом ни один из атрибутов НОМЕР ПРОГРАММИСТА или НОМЕР ПРОГРАММЫ в отдельности не определяет значение атрибута КОЛИЧЕСТВО РАБОЧИХ ЧАСОВ (единственного в данном случае атрибута, который полностью зависит от составного ключа). Атрибут ИМЯ ПРОГРАММИСТА полностью зависит от одного атрибута НОМЕР ПРОГРАММИСТА; атрибут ИМЯ ПРОГРАММЫ полностью зависит от атрибута НОМЕР ПРОГРАММЫ.

Мы подошли к определению второй нормальной формы: отношение R задано во второй нормальной форме, если оно является отношением в первой нормальной форме, и каждый атрибут, не являющийся основным атрибутом в этом отношении, полностью зависит от любого возможного ключа этого отношения R.

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

Рассмотрим пример 1 отношение R2. Это отношение находится в первой нормальной форме, но не находится во второй .

Чтобы отношение привести ко второй нормальной форме, необходимо:

1) построить его проекцию, исключив атрибуты, которые не находятся в полной функциональной зависимости от составного ключа;

2) построить дополнительно одну или несколько проекций на часть составного ключа и атрибуты, функционально зависящие от этой части ключа.

Отношение R2 преобразуем в два отношения R3 и R4, каждое из которых находится во второй нормальной форме.

 

R3

Табельный номер Имя ребенка Возраст
Саша
Женя
Вася
Вова
Женя
Вова

 

R4

Табельный номер ФИО Оклад комната Телефон
Иванов Л.А.  
Темкин М.т.  
Кошкин в.к.  

 

Рассмотрим пример 2. Если все возможные ключи отношения содержат по одному атрибуту, то это отношение задано во второй нормальной форме, т.к. в этом случае все атрибуты, не являющиеся основными, полностью зависят от возможных ключей.

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

Рассмотрим пример 3. Отношение в этом примере задано во второй нормальной форме, потому что атрибут КОЛИЧЕСТВО РАБОЧИХ ЧАСОВ – единственный атрибут, не являющийся основным, полностью зависит от каждого возможного ключа.

Следующее отношение не является отношением во второй нормальной форме:

 

Источник снабжения

 

Номер поставщика Номер партии товара Имя поставщика Сведения о поставщике Цена

 

У этого отношения только один возможный ключ. ИМЯ ПОСТАВЩИКА не входит в ключ, т.к. одной и той же фирме в разных районах может быть присвоены различные номера поставщика. Таким образом, атрибут НОМЕР ПОСТАВЩИКА не определяется значением атрибута ИМЯ ПОСТАВЩИКА.

Функциональные зависимости:

 

НОМЕРПОСТАВЩИКА *

НОМЕРПАРТИИТОВАРА *

ИМЯ ПОСТАВЩИКА

 

СВЕДЕНИЯ О ПОСТАВЩИКЕ

 

ЦЕНА

 

Атрибуты ИМЯ ПОСТАВЩИКА и СВЕДЕНИЯ О ПОСТАВЩИКЕ, не будучи основными, функционально зависят от атрибута НОМЕР ПОСТАВЩИКА, который является подмножеством составного ключа.

Нарушение условий второй нормальной формы приводит к ряду неудобств:

1) графа СВЕДЕНИЯ О ПОСТАВЩИКЕ не может быть заполнена до фактической поставки конкретной партии данным поставщиком, либо необходимо задать какой-нибудь фиктивный номер партии;

2) если поставщик временно задержал поставку некоторой партии, то удаление записи, соответствующей данному значению атрибута НОМЕР ПОСТАВЩИКА, вызовет удаление сведений о нем. Как правило, такие сведения желательно сохранять.

3) если требуется изменить значение атрибута СВЕДЕНИЯ О ПОСТАВЩИКЕ, то придется внести одни и те же изменения сразу в несколько записей, число таких записей может меняться во времени.

Подобные трудности можно устранить, расщепив исходное отношение на два отношения, заданные во второй нормальной форме.

 

НОМЕРПОСТАВЩИКА *

 

ИМЯ ПОСТАВЩИКА

 

СВЕДЕНИЯ О ПОСТАВЩИКЕ

 

НОМЕРПОСТАВЩИКА *

 

НОМЕРПАРТИИТОВАРА *

 

ЦЕНА

 

Только атрибут ЦЕНА полностью зависит от составного ключа, а все остальные атрибуты выделяются в отдельное отношение, имеющие отдельный ключ – НОМЕР ПОСТАВЩИКА.

В общем случае каждый атрибут должен полностью зависеть от всего ключа; в противном случае его следует выделить в отдельное отношение.

 

1.4.3. Третья нормальная форма

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