Операції з відношеннями
Основними операціями з відношеннями у реляційній базі даних є такі:
- традиційні операції над множинами: об'єднання; перетин; віднімання (різниця); декартовий добуток; ділення;
- спеціальні реляційні операції: проекція; з'єднання; вибір (селекція).
Традиційні операції виконують над двома відношеннями.
Результатом операції об'єднання є нове відношення, що вміщує всі записи першого відношення і ті записи другого, які були відсутні у першому.
Операція декартового добутку передбачає, що степінь кінцевого відношення дорівнює сумі степенів первинних відношень, а потужність – добутку їх потужностей. Результат містить всі можливі комбінації з записів первинних відношень (див. табл. 3.3 – 3.5).
При проектуванні бази даних потрібно зробити так, щоб структура моделі даних не суперечила семантиці (сенсу) предметної області. Модель повинна бути ефективною, тобто мати мінімальне дублювання даних. Це буде зручним при їх обробці і оновленні. Мінімальне дублювання здійснюють за допомогою методу нормалізації відношень.
Нормалізація відношень- покроковий процес розділення (декомпозиції) початкових відношень БД на простіші. Кроки цього процесу переводять схему відношення БД в послідовні нормальні форми. Кожна наступна форма володіє кращими властивостями ніж попередня.
У теорії реляційних баз даних прийнято виділяти таку послідовність нормальних форм:
- перша нормальна форма, 1NF (First Normal Form);
- друга нормальна форма, 2NF (Second Normal Form);
- третя нормальна форма, ЗNF (Third Normal Form);
- нормальна форма Бойса – Кодда, ВСNF (Brice – Codd Normal Form);
- четверта нормальна форма, 4NF (Fourth Normal Form);
- п'ята нормальна форма, 5NF (Fifth Normal Form).
Кожній нормальній формі відповідає певний набір обмежень. При переведенні структури відношення у форми вищого порядку досягають видалення з таблиць надмірної описової інформації.
Процес нормалізації заснований на понятті функціональної залежності атрибутів.
Атрибут В функціонально залежитьвід атрибуту А (позначають А → В), якщо у будь-який момент часу кожному значенню атрибуту А відповідає не більше одного значення атрибуту В.
Якщо описовий атрибут залежить від усього складеного ключа і не залежить від його частин, то мова йде про повну функціональну залежність атрибуту від складеного ключа.
Якщо атрибут А залежить від атрибуту В, а В залежить від атрибуту С, але зворотна залежність відсутня, то кажуть, що атрибут А залежить від С транзитивно. Наприклад, відношення має два описові атрибути, причому один залежить від ключа, а другий – від першого описового атрибуту.
Перша нормальна форма. Відношення відповідає 1NF тоді, коли на перетині кожного стовпця і кожного рядка знаходяться тільки елементарні (неподільні) значення атрибутів і не містяться групи, що повторюються.
Розглянемо відношення ТЕЛЕФОННА КНИГА (див табл.3.13).
Текстове поле Адреса містить не елементарну інформацію. Його потрібно розбити на декілька окремих неподільних полів. Такими полями будуть Вулиця (текстове), Будинок (числове) і Квартира (числове).
Крім того, на перетині першого рядка і третього стовпця таблиці знаходиться цілий набір елементарних значень номерів телефонів – телефони різних типів – робочий, домашній та мобільний.
Для виключення групи, що повторюється у полі Телефон, у таблицю потрібно додати ще поле для зберігання інформації про тип телефону (див. табл. 3.14).
Друга нормальна форма.Відношення знаходиться в 2NF, якщо виконуються обмеження 1NF і кожен описовий атрибут функціонально повно залежить від первинного ключа (у тому числі і складеного).
Якщо первинний ключ таблиці складається з одного атрибуту, ця умова виконується автоматично. Якщо первинний ключ складається з декількох полів, то жоден з описових атрибутів не повинен функціонально залежати тільки від частини складеного первинного ключа.
Розглянемо відношення СЕСІЯ, яке моделює результати сесії (див.табл. 3.15).
Оскільки кожен студент здає у ході сесії декілька дисциплін, то первинним ключем відношення може бути складений: Спеціальність, Номер групи, Номер у списку (цей набір атрибутів формує код залікової книжки) та Дисципліна. Він однозначно визначає кожен рядок відношення. З іншого боку, атрибут Прізвище, ініціали залежить тільки від частини первинного ключа - від значень атрибутів Спеціальність, Номер групи, Номер у списку.
Отже, у даному відношенні є неповні функціональні залежності. Для приведення відношення СЕСІЯ до другої нормальної форми потрібно розділити його на два зв'язані відношення (дві таблиці).
До першої таблиці (табл.3.16) увійдуть Спеціальність, Номер групи, Номер у списку і описовий атрибут Прізвище, ініціали, який функціонально залежний від ключа у цілому. В другій таблиці (табл.3.17) залишаться Спеціальність, Номер групи, Номер у списку як частина первинного ключа з одного боку, а з іншого боку – як зовнішній ключ для зв'язку першої таблиці з другою. Окрім них там залишаться Дисципліна та Оцінка. У табл. 3.17 первинним ключем є складений ключ, той, що був у початковій таблиці. Атрибут Оцінка є описовим, який функціонально залежний від ключа у цілому
Цей набір відношень (таблиць) не містить неповних функціональних залежностей, тому можна сказати, що кожне відношення знаходиться в другій нормальній формі.
Третя нормальна форма.Відношення знаходиться у ЗNF, якщо виконуються обмеження 2NF і всі описові атрибути відношення взаємно незалежні і повністю залежать від первинного ключа, тобто кожний описовий атрибут не транзитивно залежить від ключа.
У більшості випадків третя нормальна форма є компромісом між повною нормалізацією і функціональністю в сукупності з легкістю реалізації. Існують нормальні форми вище ЗNF, але на практиці вони ускладнюють розробку структур даних і знижують їх функціональність.
Наведемо складніший приклад нормалізації відношень, для чого розглянемо предметну область ЛІТЕРАТУРНІ ДЖЕРЕЛА З БАЗ ДАНИХ.
Один автор може написати декілька книг, що вийшли в різних видавництвах. Кожна книга, що вийшла у видавництві, має певного автора.
У БД повинні бути наступні дані: прізвище та ініціали автора книги, назва книги, шифр УДК, видавництво, що опублікувало книгу, рік видання і кількість сторінок.
У табл. 3.18 та 3.19 наведено дані для створення БД у початковому виді, коли до розгляду запропоновано інформаційні об’єкти АВТОР і ВИДАВНИЦТВО.
Як видно з таблиць, подання даних у них не задовольняє вимог навіть першої нормальній форми. Приведемо їх до (табл.3.20, 3.21).
Для створення первинних ключів цих відношень уведемо атрибути Код автора і Код видавництва, наприклад, типу Лічильник.
Оскільки в обох відношеннях первинний ключ не складений, то від 1NF переходимо відразу до 3NF.
У відношенні АВТОР від первинного ключа функціонально залежить тільки атрибут Прізвище, ініціали. Запишемо 3NF для АВТОР (табл.3.22).
З першого і другого відношень залишилися не використаними наступні атрибути, що характеризують літературне джерело: Назва книги; Рік видання; Кількість сторінок; Шифр УДК. Для того, щоб врахувати ці атрибути, створимо додатково інформаційний об’єкт КНИГА, за первинний ключ для нього уведемо атрибут Код книги. Для зв'язку КНИГА з відношеннями АВТОР і ВИДАВНИЦТВО уведемо в нього зовнішні ключі Код автора і Код видавництва. Одержане відношення у 3NF має вигляд (табл.3.24):
Розглянутий приклад показує, як може змінитися попередня уява про структуру БД при застосуванні процедури нормалізації. Тепер зрозуміло, що нормалізація відношень - не марне витрачання часу. Багаторазове дублювання інформації в базі даних, крім різних аномалій редагування (аномалія вставки, аномалія редагування, аномалія видалення) призводить до зниження продуктивності СКБД. Кожен елемент даних повинен зберігатися в базі в одному і лише одному екземплярі, що і досягається нормалізацією.