1. Нормалізація бази даних

Нормальна форма — властивість відношення в реляційній моделі даних, що характеризує його з погляду надмірності, що потенційно призводить до логічно помилкових результатів вибірки або зміни даних. Нормальна форма окреслюється сукупністю вимог, яким має задовольняти відношення (таблиць у базі даних).

Процес перетворення відношень бази даних до виду, що відповідає нормальним формам, називається нормалізацією. Нормалізація призначена для приведення структури БД до виду, що забезпечує мінімальну логічну надмірність, і не має на меті зменшення або збільшення продуктивності роботи або зменшення чи збільшення фізичного обсягу бази даних.

Кінцевою метою нормалізації є зменшення потенційної суперечливості, що зберігається в базі даних інформації. Загальне призначення процесу нормалізації полягає в наступному:

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

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

Включно з фактом, що ідеї нормалізації дуже корисні для проєктування баз даних, вони аж ніяк не є універсальним чи вичерпним засобом підвищення якості проєкту БД. Це пов'язано з тим, що існує дуже велика різноманітність можливих помилок та недоліків у структурі БД, які нормалізацією не усуваються.

Незважаючи на ці міркування, теорія нормалізації є дуже цінним досягненням реляційної теорії та практики, оскільки вона дає науково суворі та обґрунтовані критерії якості проекту БД та формальні методи для вдосконалення цієї якості. Цим теорія нормалізації різко виділяється на тлі суто емпіричних підходів до проєктування, які пропонуються в інших моделях даних. Більше того, можна стверджувати, що у всій сфері інформаційних технологій практично відсутні методи оцінки та покращення проєктних рішень, які можна порівняти з теорією нормалізації реляційних баз даних за рівнем формальної суворості.

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

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

2.Перша нормальна форма

Перша нормальна форма (1НФ) — базова нормальна форма відношення у реляційній моделі даних.

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

У реляційній моделі відношення завжди знаходиться в першій нормальній формі за визначенням поняття відношення.

Що ж стосується різних таблиць, то вони можуть не бути правильними уявленнями відношень і, відповідно, можуть не перебувати в 1НФ. Відповідно до визначення Крістофера Дейта, для такого випадку таблиця нормалізована (еквівалентно — знаходиться в першій нормальній формі) тоді і тільки тоді, коли вона є прямим і вірним представленням якогось відношення. Конкретніше, таблиця, що розглядається, має задовольняти наступним п'яти умовам:

  • Немає упорядкування рядків зверху донизу (іншими словами, порядок рядків не несе в собі жодної інформації).
  • Немає впорядкування стовпців зліва направо (іншими словами, порядок стовпців не несе в собі жодної інформації).
  • Немає рядків, що повторюються.
  • Кожен перетин рядка та стовпця містить рівно одне значення з відповідного домену (і більше нічого).
  • Всі стовпці є «звичайними».

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

Початкова ненормалізована (тобто не є правильним представленням деякого відношення) таблиця:

Співробітник Номер телефону
Іванов І. І.

283-56-82

390-57-34

Петров П. П. 708-62-34
Сідоров С.С.

Таблиця, приведена до 1НФ, є правильним представленням певного відношення:

Співробітник Номер телефону
Іванов І. І. 283-56-82
Іванов І. І. 390-57-34
Петров П. П. 708 -62-34

3. Друга нормальна форма

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

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

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

Приклад приведення ставлення до другої нормальної форми

Нехай у наступному відношенні первинний ключ утворює пару атрибутів {Філія компанії, Посада}:

R
Філія компанії Посада Зарплата Наявність комп'ютера
Філія в Черкасах Прибиральник 20000 Ні
Філія в Києві Програміст 40000 Є
Філія в Черкасах Програміст 25000 Є

Припустимо, що зарплата залежить від філії та посади, а наявність комп'ютера залежить тільки від посади.

Існує функціональна залежність Посада -> Наявність комп'ютера, де ліва частина (детермінант) є лише частиною первинного ключа, що порушує умова другої нормальної форми.

Для приведення до 2NF вихідне відношення слід декомпозувати на два відношення:

R1
Філія компанії Посада Зарплата
Філія в Черкасах Прибиральник 20000
Філія в Києві Програміст 40000
Філія в Черкасах Програміст 25000
R2
Посада Наявність комп'ютера
Прибиральник Ні
Програміст Є
Програміст Є

4. Третя нормальна форма (3НФ, 3NF)

Змінна відношення R знаходиться в 3NF тоді і тільки тоді, коли виконуються такі умови:

  • R знаходиться у другій нормальній формі.
  • жоден неключовий атрибут R не знаходиться в транзитивній функціональній залежності від потенційного ключа R.

Пояснення до визначення:

Неключовий атрибут відношення R — це атрибут, який не належить жодному з потенційних ключів R.

Функціональна залежність множини атрибутів Z від безлічі атрибутів X (записується X → Z, вимовляється «ікс визначає зет») є транзитивною, якщо існує така безліч атрибутів Y, що X → Y і Y → Z. Водночас жодна з множин X, Y і Z не є підмножиною іншого, тобто функціональні залежності X → Z, X → Y та Y → Z не є тривіальними, а також відсутня функціональна залежність Y → X.

Визначення 3NF, еквівалентне визначенню Кодда, але по-іншому сформульоване, дав Карло Заніоло у 1982 році. Згідно з ним, змінна відношення знаходиться в 3NF тоді і тільки тоді, коли для кожної з її функціональних залежностей X → A виконується хоча б одна з наступних умов:

  • Х містить А (тобто X → A — тривіальна функціональна залежність)
  • Х — суперключ
  • А — ключовий атрибут (тобто А входить до складу потенційного ключа).

Визначення Заніоло чітко визначає різницю між 3NF і більш строгою нормальною формою Бойса-Кодда (НФБК): НФБК виключає третю умову («А - ключовий атрибут»).

Запам'ятовуване і, за традицією, наочне резюме визначення 3NF Кодда було дано Біллом Кентом: кожен неключовий атрибут «має надавати інформацію про ключ, повний ключ і ні про що, крім ключа».

Умова залежності від «повного ключа» неключових атрибутів забезпечує те, що відношення знаходиться у другій нормальній формі; а умова залежності їх від «нічого, крім ключа» — те, що вони перебувають у третій нормальній формі.

Кріс Дейт говорить про резюме Кента як про «інтуїтивно привабливу характеристику» 3NF, і зауважує, що з невеликою зміною вона може служити і як визначення більш строгої нормальної форми Бойса-Кодда: «кожен атрибут повинен надавати інформацію про ключі, повному ключі і ні про що, крім ключа».

Варіант визначення 3NF Кента є менш суворим, ніж варіант нормальної форми Бойса-Кодда у формулюванні Дейта, оскільки перша стверджує лише те, що неключові атрибути залежать від ключів.

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

Розглянемо як приклад змінну відношення R1:

R1
Співробітник Відділ Телефон
Гришин Бухгалтерія 11-22-33
Васильєв Бухгалтерія 11-22-33
Петров Постачання 44-55-66

Кожен співробітник належить виключно до одного відділу; кожен відділ має єдиний телефон. Атрибут Співробітник є первинним ключем. Особистих телефонів співробітників немає, і телефон співробітника залежить виключно від відділу.

У прикладі є такі функціональні залежності: Співробітник → Відділ, Відділ → Телефон, Співробітник → Телефон.

Змінні відносини R1 перебувають у другій нормальній формі, оскільки кожен атрибут має не наведену функціональну залежність від потенційного ключа Співробітник.

Залежність Співробітник → Телефон є транзитивною, отже, відношення не знаходиться в третій нормальній формі.

В результаті поділу R1 виходять два змінні відносини, що знаходяться в 3NF:

R2
Відділ Телефон
Бухгалтерія 11-22-33
Постачання 44-55-66

R3
Співробітник Відділ
Гришин Бухгалтерія
Васильєв Бухгалтерія
Петров Постачання

Вихідне відношення R1 в разі необхідності легко виходить в результаті операції з'єднання відносин R2 і R3.