в 2NF, і в них усунені відмічені вище аномалії (легко перевірити, що всі вказані операції виконуються без проблем).
Якщо допустити наявність декількох ключів, то визначення 6 прийме наступний вигляд:
Визначення 6~
Відношення R знаходиться у другій нормальній формі (2NF) в тому і тільки в тому випадку, коли воно знаходиться в 1NF, і кожний неключовий атрибут повністю залежить від кожного ключа R.
Тут і далі ми не будемо приводити приклади для відносин з декількома ключами. Вони дуже громіздкі і відносяться до ситуацій, що рідко зустрічається на практиці.
6.1.2. Третя нормальна форма
Розглянемо ще раз відношення СПІВРОБІТНИКИ-ВІДДІЛИ, що знаходиться в 2NF. Помітимо, що функціональна залежність СПІВР_НОМЕР -> СПІВР_ЗАРП є транзитивною; вона є наслідком функціональної залежності СПІВР_НОМЕР -> ВІД_НОМЕР і ВІД_НОМЕР -> СПІВР_ЗАРП. Іншими словами, заробітна плата співробітника насправді є характеристикою не співробітника, а відділу, в якому він працює (це не дуже природне припущення, але достатнє для прикладу).
У результаті ми не зможемо занести в базу даних інформацію, що характеризує заробітну плату відділу, доти, поки в цьому відділі не з'явиться хоч би один співробітник (первинний ключ не може містити невизначене значення). При видаленні кортежу, що описує останнього співробітника даного відділу, ми позбавимося інформації про заробітну плату відділу. Щоб узгоджено змінити заробітну плату відділу, ми будемо вимушені заздалегідь знайти всі кортежі, що описують співробітників цього відділу. Тобто у відношенні СПІВРОБІТНИКИ-ВІДДІЛИ як і раніше існують аномалії. Їх можна усунути шляхом подальшої нормалізації.
Визначення 7. Третя нормальна форма. (Знов визначення дається в припущенні існування єдиного ключа.)
Відношення R знаходиться в третій нормальній формі (3NF) в тому і тільки в тому випадку, якщо знаходиться в 2NF і кожний неключовий атрибут нетранзитивно залежить від первинного ключа.
Можна зробити декомпозицію відношення СПІВРОБІТНИКИ-ВІДДІЛИ в два відношення СПІВРОБІТНИКИ і ВІДДІЛИ:
СПІВРОБІТНИКИ (СПІВР_НОМЕР, ВІД_НОМЕР)
Первинний ключ:
СПІВР_НОМЕР
Функціональна залежність:
СПІВР_НОМЕР -> ВІД_НОМЕР
ВІДДІЛИ (ВІД_НОМЕР, СПІВР_ЗАРП)
Первинний ключ:
ВІД_НОМЕР
Функціональна залежність:
ВІД_НОМЕР -> СПІВР_ЗАРП
Кожне з цих двох відносин знаходиться в 3NF і вільно від відмічених аномалій.
Якщо відмовитися від того обмеження, що відношення володіє єдиним ключем, то визначення 3NF прийме наступну форму:
Визначення 7~
Відношення R знаходиться в третій нормальній формі (3NF) в тому і тільки в тому випадку, якщо знаходиться в 1NF, і кожний неключовий атрибут не є транзитивно залежним від якого-небудь ключа R.
На практиці третя нормальна форма схем відносин достатня в більшості випадків, і приведенням до третьої нормальної форми процес проектування реляційної бази даних звичайно закінчується. Однак іноді корисно продовжити процес нормалізації.
6.1.3. Нормальна форма Бойса-Кодда
Розглянемо наступний приклад схеми відношення:
СПІВРОБІТНИКИ-ПРОЕКТИ (СПІВР_НОМЕР, СПІВР_ІМ’Я, ПРО_НОМЕР, СПІВР_ЗАВДАН)
Можливі ключі:
СПІВР_НОМЕР, ПРО_НОМЕР
СПІВР_ІМ’Я, ПРО_НОМЕР
Функціональна залежність:
СПІВР_НОМЕР -> СПІВР_ІМ’Я
СПІВР_НОМЕР -> ПРО_НОМЕР
СПІВР_ІМ’Я -> CПІВР_НОМЕР
СПІВР_ІМ’Я -> ПРО_НОМЕР
СПІВР_НОМЕР, ПРО_НОМЕР -> CПІВР_ЗАВДАН
СПІВР_ІМ’Я, ПРО_НОМЕР -> CПІВР_ЗАВДАН
У цьому прикладі ми передбачаємо, що особистість співробітника повністю визначається як його номером, так і ім'ям (це знов не дуже життєве припущення, але достатнє для прикладу).
Відповідно до визначення 7~ відношення СПІВРОБІТНИКИ-ПРОЕКТИ знаходиться в 3NF. Однак той факт, що є функціональна залежність атрибутів відношення від атрибута, що є частиною первинного ключа, приводить до аномалій. Наприклад, для того, щоб змінити ім'я співробітника з даним номером узгодженим образом, нам зажадається модифікувати всі кортежі, що включають його номер.
Визначення 8. Детермінант
Детермінант - будь-який атрибут, від якого повністю функціонально залежить деякий інший атрибут.
Визначення 9. Нормальна форма Бойса-Кодда
Відношення R знаходиться в нормальній формі Бойса-Кодда (BCNF) в тому і тільки в тому випадку, якщо кожний детермінант є можливим ключем.
Очевидно, що ця вимога не виконана для відношення СПІВРОБІТНИКИ-ПРОЕКТИ. Можна зробити його декомпозицію до відносин СПІВРОБІТНИКИ і СПІВРОБІТНИКИ-ПРОЕКТИ:
СПІВРОБІТНИКИ (СПІВР_НОМЕР, СПІВР_ІМ’Я)
Можливі ключі:
СПІВР_НОМЕР
СПІВР_ІМ’Я
Функціональна залежність:
СПІВР_НОМЕР -> СПІВР_ІМ’Я
СПІВР_ІМ’Я -> СПІВР_НОМЕР
СПІВРОБІТНИКИ-ПРОЕКТИ (СПІВР_НОМЕР, ПРО_НОМЕР, СПІВР_ЗАВДАН)
Можливий ключ:
СПІВР_НОМЕР, ПРО_НОМЕР
Функціональна залежність:
СПІВР_НОМЕР, ПРО_НОМЕР -> CПІВР_ЗАВДАН
Можлива альтернативна декомпозиція, якщо вибрати за основу СПІВР_ІМ’Я. У обох випадках відносини, що отримуються СПІВРОБІТНИКИ і СПІВРОБІТНИКИ-ПРОЕКТИ знаходяться в BCNF, і ним не властиві відмічені аномалії.
6.1.4. Четверта нормальна форма
Розглянемо приклад наступної схеми відношення:
ПРОЕКТИ (ПРО_НОМЕР, ПРО_СПІВР, ПРО_ЗАВДАН)
Відношення ПРОЕКТИ містить номери проектів, для кожного проекту список співробітників, які можуть виконувати проект, і список завдань, що передбачаються проектом. Співробітники можуть брати участь в декількох проектах, і різні проекти можуть включати однакові завдання.
Кожний кортеж відношення зв'язує деякий проект з співробітником, що бере участь в цьому проекті, і завданням, який співробітник виконує в рамках даного проекту (ми передбачаємо, що будь-який співробітник, що бере участь в проекті, виконує всі завдання, передбачені цим проектом). Внаслідок сформульованих вище умов єдиним можливим ключем відношення є складовою атрибут ПРО_НОМЕР, ПРО_СПІВР, ПРО_ЗАВДАН, і немає ніяких інших детермінантів. Отже, відношення ПРОЕКТИ знаходиться в BCNF. Але при цьому воно володіє недоліками: якщо, наприклад, деякий співробітник приєднується до даного проекту, необхідно вставити у відношення ПРОЕКТИ стільки кортежів, скільки завдань в ньому передбачено.
Визначення 10. Багатозначна залежність
У відношенні R (А, В, С) існує багатозначна залежність R.A -> -> R.B в тому і тільки в тому випадку, якщо безліч значень В, відповідне парі значень А і С, залежить тільки від А і не залежить від С.
У відношенні ПРОЕКТИ існують наступні дві багатозначна залежність:
ПРО_НОМЕР -> -> ПРО_СПІВР
ПРО_НОМЕР -> -> ПРО_ЗАВДАН
Легко показати, що в загальному випадку у відношенні R (А, В, С) існує багатозначна залежність R.A -> -> R.B в тому і тільки в тому випадку, коли існує багатозначна залежність R.A -> -> R.С.
Подальша нормалізація відносин, подібних відношенню ПРОЕКТИ, засновується на наступній теоремі:
Теорема Фейджіна
Відношення R (А, В, С) можна відобразити без втрат у відносини R1 (А, В) і R2