3.3 Побудова схеми реляційної бази даних у третій нормальній формі
База даних (таблиця 3.1), що буде реалізована, представлена в 1 НФ, так як вона:
-
не має однакових кортежів;
-
кортежі не впорядковані;
-
атрибути не впорядковані та відрізняються по найменуванню;
-
всі визначення атрибутів атомарні.
Таблиця 3.1 - База даних у 1НФ
Назва підприємства |
Адреса підприємства |
Телефон підприємства |
№ відділу |
Назва відділу |
Табельний № службовця * |
ПІБ службовця |
Стать |
Дата народження |
Адреса |
№ посади |
Назва посади |
Оклад |
№ лікарні |
Дата початку лікарняного * |
Дата закінчення лікарняного |
Діагноз хвороби |
Первинний ключ: «Табельний № службовця» та «Дата початку лікарняного».
Відношення знаходиться в 2НФ тоді і тільки тоді, коли воно знаходиться в 1 НФ та кожен не ключовий атрибут повністю функціонально залежить від первинного ключа.
Для приведення відношення до 2НФ необхідно замінити T(K1,K2,F1,F2), первинний ключ (K1,K2), функціональна залежність K1->F1 на T1(K1,F1) – табл. 3.2, первинний ключ K1 та T2(K1,K2,F2) – табл. 3.3, первинний ключ (K1,K2).
В даному відношенні поля «Назва підприємства», «Адреса підприємства», «Телефон підприємства», «№ відділу», «Назва відділу», «ПІБ службовця», «Стать», «Дата народження», «Адреса», «№ посади», «Назва посади», «Оклад» залежать від частини первинного ключа (від поля «Табельний № службовця») тому виносяться в окрему таблицю (табл. 3.2).
Відношення у 2НФ представляють табл. 3.2 та табл. 3.3.
Таблиця 3.2 – Підприємства-Відділи-Службовці-Посади
Назва підприємства |
Адреса підприємства |
Телефон підприємства |
№ відділу |
Назва відділу |
Табельний № службовця * |
ПІБ службовця |
Стать |
Дата народження |
Адреса |
№ посади |
Назва посади |
Оклад |
Таблиця 3.3 – Лікарняні аркуші
Табельний № службовця * |
№ лікарні |
Дата початку лікарняного * |
Дата закінчення лікарняного |
Діагноз хвороби |
Відношення знаходиться в 3НФ тільки в тому випадку, якщо воно знаходиться в 2НФ та кожен не ключовий атрибут не транзитивно залежить від первинного ключа.
Для приведення відношення до 3НФ необхідно замінити T(K, F1, F2) первинний ключ K, транзитивна функціональна залежність F1->F2 на T1(F1, F2) первинний ключ F1, та T2(K, F2) первинний ключ К.
У табл. 3.2 від первинного ключа «Табельний № службовця» транзитивно через поле «№ відділу» залежать «Назва відділу», «Назва підприємства», «Адреса підприємства», «Телефон підприємства», через поле «№ посади» транзитивно залежать поля «Назва посади» та «Оклад». Тому відношення розбивається на табл. 3.4, табл. 3.5 та табл. 3.6.
Таблиця 3.4 – Посади
№ посади * |
Назва посади |
Оклад |
Таблиця 3.5 – Відділи-Підприємства
Назва підприємства |
Адреса підприємства |
Телефон підприємства |
№ відділу * |
Назва відділу |
Таблиця 3.6 – Співробітники
Табельний № службовця * |
ПІБ |
Стать |
Дата народження |
Адреса |
№ відділу |
№ посади |
У табл. 3.5 залишився транзитивний зв’язок між ключовим полем «№ відділу» та полями «Адреса підприємства» і «Телефон підприємства» через поле «Назва підприємства», тому повторюємо попередню операцію. Як результат – табл. 3.5 розбивається на табл. 3.7 та табл. 3.8.
Таблиця 3.7 – Підприємства
Назва підприємства * |
Адреса підприємства |
Телефон підприємства |
Таблиця 3.8 – Відділи
№ відділу * |
Назва відділу |
Назва підприємства |
Відношення, що знаходиться в 3НФ представлено сукупністю таблиць – «Співробітники» (Таблиця 3.6), «Лікарняні аркуші» (Таблиця 3.3), «Підприємства» (Таблиця 3.7), «Відділи» (Таблиця 3.8) та «Посади» (Таблиця 3.4).
Схема бази даних, що реалізована в СУБД MS Access, представлена на рис. 3.7.
Рисунок 3.7 – Схема бази даних