Проектування баз даних
34


Якщо відношення має неповні функціональні залежності, то виконують його декомпозицію на два чи більше відношень, які не мають неповних функціональних залежностей і об'єднання яких дасть початкове відношення.

Виконавши декомпозицію відношення R, отримаємо замість одного два відношення, які будуть перебувати в ЗНФ:

Отже, відношення перебувають у 2НФ, якщо вони перебувають у 1 НФ і кожний неключовий ат­рибут функціонально повно залежить від складово­го ключа.

Розглянемо конкретний приклад: дано відно­шення НОРМА (підкреслено ключові атрибути)

НОРМА (код деталі, код матеріалу, назва матеріалу, ціна матеріалу, норма витрат матеріалу на деталь).

Побудуємо діаграму функціональних залежностей:

З діаграми видно, що атрибут «назва матеріалу» залежить не від всього ключа, а лише від його частини, а атрибут «Норма витрат матеріалу на де­таль» залежить від всього ключа, тобто перебуває в повній функціональній залежності.

Отже, початкове відношення НОРМА розбивається на два відношення:

МАТЕРІАЛ (код матеріалу, назва матеріалу, ціна матеріалу) НОРМА_ВИТРАТ (код деталі, код матеріалу, норма витрат матеріалу на деталь).

У базі даних замість одного відношення НОРМА необхідно зберігати два відношення МАТЕРІАЛ і НОРМА_ВИТРАТ, які перебувають у 2НФ.

Переваги 2їіФ: зручність внесення змін у БД. Трудомісткість внесення змін у БД, яка перебуває в 2НФ, значно менша, ніж у ненормалізовану БД. Так, при зміні ціни якогось матеріалу необхідно знайти лише відповідний матеріал у відношенні МАТЕРІАЛ і замінити лише один атрибут «Ціна матеріалу»; якщо ж БД ненормалізована, потрібно знайти всі деталі, на які витрачається данин матеріал, і виконати відповідні в усіх знайдених запи­сах зміни. При цьому якщо буде пропущено хоча б одну деталь, то це приз­веде до протиріччя в даних.

2НФ повністю виключає можливість виникнення протиріччя даних, а також економить пам'ять при зберіганні відношень у пам'яті ЕОМ. Напри­клад, у випадку зберігання в базі даних ненормалізованого відношення НОРМА інформація про один і той самий матеріал буде дублюватись у БД стільки разів, на скільки різних деталей він витрачається. Отже, буде значне надмірне дублювання даних і великі перевитрати пам'яті.

Третій крок нормалізації — вилучення транзитивних залежностей. Відношення в 2НФ потрібно аналізувати на присутність транзитивних за­лежностей. Транзитивна залежність — це залежність між неключовимн ат­рибутами. Нехай є відношення R(A*, C, D), у якому атрибут D безпосеред­ньо не залежить від ключового атрибута А, а залежить від неключового атрибута C, який залежить від А. Тоді атрибут D транзитивне залежить від А.

Транзитивні залежності також вилучають за допомогою декомпозиції відношення на два чи більше інших відношень, які не містять транзитивних залежностей і об'єднання яких дасть початкове відношення.

Відношення перебуває в З НФ, якщо воно перебуває в 2НФ і кожний неключовий атрибут нетранзитивно залежить від первинного ключа.

Наприклад, відношення ВИКЛАДАЧ (табельний N, прізвище, посада, оклад, кафедра, телефон) перебуває в 2НФ, але вміщує транзитивну залежність:

В результаті зведення до ЗНФ отримуємо два відношення: ВИКЛАДАЧ (табельний N, прізвище, посада, оклад, кафедра) і КАФЕДРА (код кафед­ри, телефон кафедри).

Переваги ЗНФ: вилучається надлишкове дублювання інформації про телефон для викладачів однієї кафедри, спрощується процес внесення змін, оскільки в разі зміни телефону будь-якої кафедри потрібно внести зміни лише в один відповідний запис, а не в кілька (по всіх викладачах кафедри): крім того, якщо викладач працюватиме на іншій кафедрі, необхідно міняти лише код кафедри і не потрібно міняти номера телефо­ну, що довелося б робити, якби відношення зберігалось у ненормалізованому вигляді. Тому можна зробити ще такий висновок: відношення