Повна версія

Головна arrow Інформатика arrow Бази даних: проектування

  • Увеличить шрифт
  • Уменьшить шрифт


<<   ЗМІСТ   >>

Друга нормальна форма (211Ф)

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

image113

Мал. 2.73. Поділ відносини за правилом переходу до 2НФ


Тепер зазначені вище аномалії оновлення дозволені і зазначені проблеми не виникатимуть.

Аномалія додавання. Тепер відомості про товар "А6" від постачальника "П2" можна додати в відношення "Товари", не вимагаючи обов'язкового зазначення цього товару в замовленні. Таким чином, товар буде розміщений в базі даних, але нс буде вказано в замовленнях.

Аномалія зміни. Зміна постачальника у товару вимагає внесення даних тільки в один екземпляр відносини "Товари", а зв'язка відносин "Товари замовлення" і "Товари" через атрибут "Товар" дає можливість автоматично врахувати цю зміну в усіх замовленнях, що дозволяє вирішити розглянуту раніше аномалію.

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

 
Мал.  2.74.  Функціональні залежності після переходу до 2НФ

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

Таблиця 2.24

Това ри замовлення Замовлення Товар Кількість товару 31 А1 10 31 А2 25 31 АЗ 2 32 А1 5 32 А4 1 33 А4 5

Товари Товар Постачальник Ціновий сегмент А1 П1 Економ А2 П1 АЗ П2 Люкс А4 ПЗ Економ А6 П5 Люкс

Приклад даних відносини "Товари замовлення" в 2Н


Відносно "Товари" з'явився товар "А6", якого раніше не було. Однак в замовленнях цей товар не присутній. Таке стало можливим через виділення в окреме відношення набору атрибутів, які призначені за правилом виключення залежностей, які не є непріводімимі, приводячи вихідне відношення до 2НФ, полегшуючи, тим самим, роботу з базою даних і роблячи се більш ефективною.

Відношення знаходиться в другій нормальній формі тоді і тільки тоді, коли воно знаходиться в першій нормальній формі і кожен неключових атрибут неприводимого залежить від його первинного ключа [1] .

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

Правило переходу 1НФ - "2НФ

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

Обидва отриманих відносини знаходяться в 2НФ, оскільки всі знаходяться в них функціональні залежності пов'язані з єдиним первинним ключем відношення: щодо "Товари замовлення" все атрибути функціонально залежать від зчепленого ключа "Замовлення" - "Товар", в відношенні "Товари" всі атрибути функціонально залежать від єдиного первинного ключа "Товар".

Однак ставлення "Товари" містить деякі проблеми, які полягають в тому, що ні ключові атрибути все ще не є взаємно незалежними, а саме атрибут "Ціновий діапазон" є функціонально залежним від атрибута "Постачальник". Це призводить до певних аномалій оновлення, які необхідно вирішувати.

Аномалія додавання. Відносно "Товари" атрибути "Постачальник" і "Ціновий сегмент" мають функціональну залежність, яка призводить до ситуації, що неможливо утримувати в базі даних відомості про ціновому сегменті постачальника, поки цей постачальник нс з'явиться в відношенні.

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

Оскільки смислове навантаження атрибутів повинна бути незмінною з моменту виявлення атрибута до його використання в базі даних, то однією з істотних проблем в розробці є їх правильне іменування, що відбиває однозначний сенс даних, які подаються відповідним атрибутом. У розглянутому прикладі доцільно, з метою однозначності розуміння, атрибут "Ціновий сегмент", в зв'язку з тим, що він розміщений разом з атрибутами, які також можуть мати аналогічної характеристикою, варто називати "Ціновий сегмент постачальника". Таке іменування виключає двозначність використання атрибута, і тоді аномалія зміни щодо "Товари" явно виявляється.

Аномалія видалення. Якщо по відношенню до "Товари" існує тільки один екземпляр по певного постачальника, то видалення цього примірника призведе до втрати відомостей про самого постачальника і його ціновому сегменті.

Знову щодо виявляється проблема функціональних залежностей, які пов'язані з наявними первинним ключем "Товар". Розуміючи, що атрибут "Ціновий сегмент" є характеристикою "Постачальника", дане відношення необхідно нормалізувати, перевівши його в третю нормальну форму.

  • [1] Дейт К. Дж. Введення в системи баз даних.
 
<<   ЗМІСТ   >>