- •6.1. Мета нормалізації Нормалізація - метод створення набору відносин із заданими властивостями на основі вимог до даних, встановленим у деякій організації.
- •6.2. Надмірність даних і аномалії відновлення
- •6.2.1. Аномалії вставки
- •6.2.2. Аномалій видалення
- •6.2.3. Аномалії відновлення
- •Властивості з'єднання без втрат і збереження залежності
- •6.3. Функціональні залежності Функціональна залежність (functional dependency) описує зв'язок між атрибутами і є одним з основних понять нормалізації.
- •6.3.1. Визначення функціональної залежності
- •Детермінант. Детермінантом функціональної залежності називається чи атрибут група атрибутів, розташована на діаграмі функціональної залежності ліворуч від символу стрілки.
- •Приклад 6.1. Функціональні залежності
- •Приклад 6.2. Функціональні залежності відносини Staff_Branch
- •6.4. Процес нормалізації
- •6.5. Перша нормальна форма (1 нф)
- •Приклад 6.3. Перша нормальна форма (1нф)
- •6.6. Друга нормальна форма (2нф)
- •6.6.2. Визначення другої нормальної форми
- •Приклад 6.4. Друга нормальна форма (2нф)
- •6.7. Третя нормальна форма (знф)
- •6.7.1. Транзитивна залежність
- •Приклад 6.5. Третя нормальна форма (3нф)
- •6.8. Нормальна форма Бойса - Кодда (нфбк)
- •6.8.1. Визначення нормальної форми Бойса - Кодда
- •Нормальна форма Бойса – Кодда (нфбк) Відношення знаходиться в нфбк тоді і тільки тоді, коли кожен його детермінант є потенційним ключем.
- •Приклад 6.6. Нормальна форма Бойса-Кодда (нфбк)
- •6.9. Огляд процесу нормалізації (від 1 нф до нфбк)
- •Перша нормальна форма (1 нф)
- •Друга нормальна форма (2нф)
- •Третя нормальна форма (знф)
- •Нормальна форма Бойса - Кодда (нфбк)
- •6.10. Четверта нормальна форма (4нф)
- •6.10.1. Багатозначна залежність
- •6.10.2. Визначення четвертої нормальної форми Четверта нормальна форма (4нф) Відношення в нормальній формі Бойса-Кодда, що не містить нетривіальних багатозначних залежностей.
- •6.11. П'ята нормальна форма (5нф)
- •6.11.2. Визначення п'ятої нормальної форми (5нф) п'ята нормальна форма (5нф) Відношення без залежностей з'єднання.
- •Питання
Приклад 6.1. Функціональні залежності
Розглянемо атрибути Staff_Nо і Position відносини Staff, представленого в табл. 6.1. Знаючи значення атрибута Staff_No (наприклад, 'SL21'), можна визначити посада, займану цим співробітником ('Manager'). Інакше кажучи, атрибут Position функціонально залежить від атрибута Staff_No, як показано на рис, 6.2а. Однак, з мал. 6.2б видно, що зворотне твердження невірне, оскільки атрибут Staff_No функціонально не залежить від атрибута Position. Іншими словами, кожен співробітник може займати тільки, одну посаду, однак може бути не скільки співробітників з однаковими посадами.
З в'язок між атрибутами Staff_No і Position відноситься до типу 1:1, оскільки для кожного номера співробітника мається тільки одна посада. А зв'язок між атрибутами Position і Staff_Nо має тип 1:М, тому що існує відразу кілька номерів співробітників які займають ту саму посаду. У даному прикладі атрибут Staff_No є детермінантом функціональної залежності Staff_No-->Position.
Приклад 6.2. Функціональні залежності відносини Staff_Branch
Розглянемо функціональні залежності відносини Staff_Branch, представленого в табл. 6.3.
Staff_No --> SName
Staff_No --> SAddress
Staff_No--> Position
Staff_No --> Salary
Staff_No --> Branch_No
Staff_No --> BAddress
Staff_No --> Tel_No
Branch_No -->BAddress
Branch_No-->Tel_No
BAddress-->Branch_No
BAddress-->Tel_No
Tel_No-->BranchNo
Tel_No-->BAddress
У відношенні Staff_Branch існує 13 функціональних залежностей, у яких атрибути Staff_No, Branch_No, BAddress і Tel_No відіграють роль детермінантів. (У даному випадку передбачається, що кожне відділення компанії володіє тільки одним телефоном). Нижче показаний альтернативний формат представлення цих же функціональних залежностей.
Staff_No -> SName, SAddress, Position,.Salary, Branch_No, BAddress, Tel_No
Branch_No -> BAddress, Tel_No
Baddress -> Branch_No, Tel_No
Tel_No -> Branch_No, BAddress
Для виявлення потенційних ключів відносини Staff_Branch необхідно знайти атрибут (чи групу атрибутів), що унікальним образом ідентифікує кожен рядок цього відношення. Якщо відношення володіє декількома потенційними ключами, то потрібно вибрати серед них; той, котрий стане первинним ключем відносини (див. роздягнув 3.2.5). Всі атрибути, що не є частиною первинного ключа, повинні функціонально залежати від нього. Єдиним потенційним ключем відносини Staff_Branch, а виходить, і його первинним ключем, є атрибут Staff_Nо, тому що всі інші атрибути цього відношення функціонально залежать від Staff_No. Хоча атрибути Branch_No, BAddress і Tel_No є детермінантами цього відношення, вони не є його потенційними ключами. Концепція функціональної залежності є центральним поняттям процесу нормалізації, що розглядається в наступних розділах.
6.4. Процес нормалізації
Нормалізація - це формальний метод аналізу відносин на основі їхнього первинного ключа (чи потенційних ключів, як у випадку НФБК) і існуючих функціональних залежностей. Він включає ряд правил, що можуть використовуватися для перевірки окремих відносин таким чином, щоб уся база даних могла бути нормалізована до бажаного ступеня нормалізації. Якщо деяка вимога не задовольняється, то відношення, що порушує дану вимогу, повинне бути декомпозовано на відносини, кожне з який (окремо) задовольняє усім вимогам нормалізації.
Найчастіше нормалізація здійснюється в трохи що послідовно виконуються етапів, кожний з який відповідає деякій нормальній формі, що володіє відомими властивостями. У ході нормалізації формат відносин стає усе більш строгим і менш уразливим стосовно аномалій відновлення. При роботі з реляційною моделлю даних важливо розуміти, що тільки задоволення вимог першої нормальної форми (1НФ) обов'язково для створення відносин прийнятної якості. Всі інші форми можуть використовуватися за бажанням проектувальників. Однак, для того щоб уникнути аномалій відновлення, описаних у розділі 6.2, нормалізацію рекомендується виконувати як мінімум до ЗНФ.
Н а мал. 6.3 показана схема процесу нормалізації і продемонстрований взаємозв'язок між різними нормальними формами. Видно, що одні 1НФ - відношення можуть знаходитися в 2НФ, інші 2НФ – відношення - в ЗНФ і т.д.
У наступних розділах процес нормалізації показаний на прикладі перетворення даних, що у вихідному стані мали вид форми табличного формату з рядками і стовпцями. Важливо відзначити, що в главі 7 "Методологія концептуального проектування баз даних", представлена методика концептуального проектування бази даних, відповідно до якої рекомендується, у першу чергу розібратися зі зв'язками між даними подібної форми за допомогою технології ER-моделювання, описаної в главі 5, "Модель "сутність-зв'язок"". Однак у цій главі технологія ER-моделювання не використовується, а досягнення розуміння змісту даних в обговорюваній формі відбувається безпосередньо в процесі нормалізації.