Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.92 Mб
Скачать

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

Розглянемо ще раз відношення СПІВРОБІТНИКИ-ВІДДІЛИ, що знаходиться в 2NF. Зауважимо, що функціональна залежність СПІВРОБІТНИК_НОМЕР (r) СПІВРОБІТНИК_ЗАРПЛАТНЯ є транзитивним; воно є наслідком функціональних залежностей СПІВРОБІТНИК_НОМЕР (r) ВІДДІЛ_НОМЕР і ВІДДІЛ_НОМЕР (r) СПІВРОБІТНИК_ЗАРПЛАТНЯ. Іншими словами, заробітна плата співробітника насправді є характеристикою не співробітника, а відділу, в якому він працює (це не дуже природне припущення, але достатнє для прикладу).

В результаті ми не зможемо занести в базу даних інформацію, що характеризує заробітну плату відділу, до тих пір, поки в цьому відділі не з'явиться хоча б один співробітник (первинний ключ не може містити невизначене значення). При видаленні кортежу, що описує останнього співробітника даного відділу, ми втратимо інформацію про заробітну плату відділу. Щоб узгодженим чином змінити заробітну плату відділу, ми будемо змушені попередньо знайти всі кортежі, що описують співробітників цього відділу. Тобто у відношенні СПІВРОБІТНИКИ-ВІДДІЛИ як і раніше існують аномалії. Їх можна усунути шляхом подальшої нормалізації.

Визначення 7. Третя нормальна форма. (Знову визначення дається в припущенні існування єдиного ключа). Відношення R знаходиться в третій нормальній формі (3NF) в тому і тільки в тому випадку, якщо перебуває в 2NF і кожен з неключових атрибутів нетранзитивно залежить від первинного ключа.

Можна провести декомпозицію відношення СПІВРОБІТНИКИ-ВІДДІЛИ в два відношення СПІВРОБІТНИКИ і ВІДДІЛИ:

СПІВРОБІТНИКИ (СПІВРОБІТНИК_НОМЕР, ВІДДІЛ_НОМЕР)

Первинний ключ:  СПІВРОБІТНИК_НОМЕР

Функціональні залежності:  СПІВРОБІТНИК_НОМЕР (r) ВІДДІЛ_НОМЕР

ВІДДІЛИ (ВІДДІЛ_НОМЕР, СПІВРОБІТНИК_ЗАРПЛАТНЯ)

Первинний ключ:  ВІДДІЛ_НОМЕР

Функціональні залежності:  ВІДДІЛ_НОМЕР (r) СПІВРОБІТНИК_ЗАРПЛАТНЯ

Кожне з цих двох відношень знаходиться в 3NF і вільно від зазначених аномалій.

Якщо відмовитися від того обмеження, що відношення має єдиний ключ, то визначення 3NF прийме наступну форму:

Визначення 7~. Відношення R знаходиться в третій нормальній формі (3NF) в тому і тільки в тому випадку, якщо перебуває в 2NF, і кожен з неключових атрибутів не є транзитивно залежним від будь-якого ключа R.

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

Нормальна форма Бойса-Кодда

Розглянемо наступний приклад схеми відношення: СПІВРОБІТНИКИ-ПРОЕКТИ (СПІВРОБІТНИК_НОМЕР, СПІВРОБІТНИК_ПІБ, ПРОЕКТ_НОМЕР, СПІВРОБІТНИК_ЗАВДАННЯ)

Можливі ключі:  СПІВРОБІТНИК_НОМЕР, ПРОЕКТ_НОМЕР  СПІВРОБІТНИК_ПІБ, ПРОЕКТ_НОМЕР

Функціональні залежності:  СПІВРОБІТНИК_НОМЕР (r) CПІВРОБІТНИК_ПІБ  СПІВРОБІТНИК_НОМЕР (r) ПРОЕКТ_НОМЕР  СПІВРОБІТНИК_ПІБ (r) СПІВРОБІТНИК_НОМЕР  СПІВРОБІТНИК_ПІБ (r) ПРОЕКТ_НОМЕР  СПІВРОБІТНИК_НОМЕР, ПРОЕКТ_НОМЕР (r) CПІВРОБІТНИК_ЗАВДАННЯ  СПІВРОБІТНИК_ПІБ, ПРОЕКТ_НОМЕР (r) CПІВРОБІТНИК_ЗАВДАННЯ

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

Відповідно до визначення 7~ відношення СПІВРОБІТНИКИ-ПРОЕКТИ знаходиться в 3NF. Однак той факт, що є функціональні залежності атрибутів відношення від атрибута, який є частиною первинного ключа, призводить до аномалій. Наприклад, для того, щоб змінити ПІБ співробітника з даним номером узгодженим чином, нам потрібно модифікувати всі кортежі, що включають його номер.

Визначення 8. Детермінант - будь-який атрибут, від якого повністю функціонально залежить деякий інший атрибут.

Визначення 9. Нормальна форма Бойса-Кодда. Відношення R знаходиться в нормальній формі Бойса-Кодда (BCNF) в тому і тільки в тому випадку, якщо кожен детермінант є можливим ключем.

Очевидно, що ця вимога не виконана для відношення СПІВРОБІТНИКИ-ПРОЕКТИ. Можна провести його декомпозицію на два відношення СПІВРОБІТНИКИ і СПІВРОБІТНИКИ-ПРОЕКТИ:

СПІВРОБІТНИКИ (СПІВРОБІТНИК_НОМЕР, СПІВРОБІТНИК_ПІБ)

Можливі ключі:  СПІВРОБІТНИК_НОМЕР  СПІВРОБІТНИК_ПІБ

Функціональні залежності:  СПІВРОБІТНИК_НОМЕР (r) CПІВРОБІТНИК_ПІБ  СПІВРОБІТНИК_ПІБ (r) СПІВРОБІТНИК_НОМЕР

СПІВРОБІТНИКИ-ПРОЕКТИ (СПІВРОБІТНИК_НОМЕР, ПРОЕКТ_НОМЕР, СПІВРОБІТНИК_ЗАВДАННЯ)

Можливий ключ:  СПІВРОБІТНИК_НОМЕР, ПРОЕКТ_НОМЕР

Функціональні залежності:  СПІВРОБІТНИК_НОМЕР, ПРОЕКТ_НОМЕР (r) CПІВРОБІТНИК_ЗАВДАННЯ

Можлива альтернативна декомпозиція, якщо вибрати за основу СПІВРОБІТНИК_ПІБ. В обох випадках одержані відношення СПІВРОБІТНИКИ і СПІВРОБІТНИКИ-ПРОЕКТИ знаходяться в BCNF, і їм не властиві відмічені аномалії.