Різновиди ключів. Первинні і зовнішні ключі



Ключ – довільний набір атрибутів, за значеннями яких можна однозначно знайти необхідний екземпляр сутності, тобто визначити всі інші атрибути даного екземпляру сутності. Роль та тлумачення ключа базуються на концепції визначальності (determination). У контексті концепції БД вираз “А визначає Б” означає, що. знаючи значення атрибута А, можна знайти значення атрибута Б.

Розрізняють кілька різновидів ключів. Так, суперключем називають довільний атрибут чи набір атрибутів, який однозначно ідентифікує даний екземпляр сутності. Мінімальний суперключ називають потенційним ключем. Потенційний ключ (candidate key) – це суперключ, який не містить підмножини атрибутів, які самі по собі є суперключем. Наприклад, для сутності СТУДЕНТ (СтудІм'я, СтудПрізв, СтудНомерЗаліковки, СтудІдентКод, СтудАдреса, …) суперключами будуть (СтудІм'я, СтудПрізв, СтудНомерЗаліковки), (СтудНомерЗаліковки, СтудІдентКод), (СтудІм'я, СтудПрізв, СтудНомерЗаліковки, СтудІдентКод, СтудАдреса), а потенційними ключами - СтудНомерЗаліковки та СтудІдентКод. Серед потенційних ключів обирають первинний.

Первинний ключ (primary key) – це потенційний ключ, обраний для унікальної ідентифікації значень всіх інших атрибутів даного екземпляру сутності. Він не може мати нульових значень. Це один з мінімальних наборів атрибутів, за значеннями яких можна однозначно знайти необхідний екземпляр сутності. Мінімальність означає, що виключення з набору будь-якого атрибута не дозволяє ідентифікувати сутність по атрибутах, що залишилися. В одній сутності можуть виявитися кілька атрибутів чи наборів атрибутів, що претендують на роль первинного ключа, тобто кілька потенційних ключів. Ключі, як потенційні, так і первинні, можуть бути складеними, тобто такими, що містять кілька атрибутів. Для сутності Розклад ключем є атрибут Номер_ рейса чи набір: Пункт_відправлення, Час_вильоту і Пункт_призначення (за умови, що з пункту в пункт вилітає в кожний момент часу один літак).

Для того щоб стати первинним, потенційний ключ повинний задовольняти ряду вимог:

1) унікальність. Два екземпляри не повинні мати однакових значень можливого ключа;

2) непорожність. Первинний ключ не може приймати значень null (бути порожнім)

3) компактність. Складний можливий ключ не повинний містити жодного атрибута, видалення якого не призводило б до втрати унікальності.

Всі елементи первинного ключа унікальні і жодна частина первинного ключа не може бути порожньою (null)

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

Не допускається, щоб первинний ключ стрижневої сутності (будь-який атрибут, що бере участь у первинному ключі) приймав невизначене значення. Інакше виникне суперечлива ситуація: з'явиться екземпляр стрижневої сутності, який не посідає індивідуальністі, і, отже не існує. З тих же міркувань необхідно забезпечити унікальність первинного ключа.

Деколи застосовують ще вторинні ключі (secondary key), тобто атрибути чи комбінації атрибутів, які застосовують виключно для пошуку даних (наприклад, прізвище студента).

Зовнішній ключ (foreign key) – це атрибут чи комбінація атрибутів однієї сутності, значення якого (яких), мають збігатися зі значеннями первинного ключа іншої, так називаної цільової сутності чи бути порожніми (null). Зовнішні ключі притаманні сутностям-асоціаціям, сутностям-характеристикам і сутностям-позначенням, і відповідають первинним ключам пов'язуваних сутностей, сутності яку характеризують або яку позначають.

· Якщо сутність С зв'язує сутності А и В, то вона повинна містити зовнішні ключі, що відповідають первинним ключам сутностей А и В.

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

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

При розгляді проблеми вибору способу представлення асоціацій і позначень у базі даних основне питання, на яке слід отримати відповідь: "Які існуватимуть зовнішні ключі?". Далі, для кожного зовнішнього ключа необхідно вирішити три питання:

1. Чи може даний зовнішній ключ приймати невизначені значення (NULL-значення)? Інакше кажучи, чи може існувати деякий екземпляр сутності даного типу, для якого невідома цільова сутність, що вказується зовнішнім ключем? У випадку поставок це, імовірно, неможливо – поставка, здійснювана невідомим постачальником, чи постачання невідомого продукту не мають сенсу. Але у випадку зі співробітниками (Асоціація СпівробітникиВідділ) така ситуація однак могла б мати сенс – цілком можливо, що який-небудь співробітник у даний момент не зарахований узагалі ні в який відділ. Помітимо, що відповідь на дане питання не залежить від примхи проектувальника бази даних, а визначається фактичним образом дій, діловим регламентом, прийнятим у тій частині реального світу, що повинна бути представлена в розглянутій базі даних.

2. Що має статися при спробі ВИДАЛЕННЯ цільової сутності, на яку посилається зовнішній ключ? Наприклад, при видаленні постачальника, що здійснив принаймні одне постачання. Існує три можливості:

КАСКАДУЄТЬСЯ Операція видалення "каскадується" для того, щоб видалити також поставки цього постачальника.
ОБМЕЖУЄТЬСЯ Видаляються лише ті постачальники, що ще не здійснювали поставок. Інакше операція видалення відхиляється.
ВСТАНОВЛЮЄТЬСЯ Для всіх поставок постачальника, що видаляється, зовнішній ключ встановлюється в невизначене значення (NULL-значення), а потім цей постачальник видаляється. Така можливість, звичайно, незастосовна, якщо даний зовнішній ключ не повинен містити NULL-значень.

3. Що повинно відбуватися при спробі ОНОВЛЕННЯ первинного ключа цільової сутності, на яку посилається деякий зовнішній ключ? Наприклад, може бути зроблена спроба обновити номер такого постачальника, для якого є принаймні одна відповідна постачавка. Цей випадок розглянемо докладніше. Є ті ж три можливості, що і при видаленні:

КАСКАДУЄТЬСЯ Операція оновлення "каскадується" для того, щоб обновити також і зовнішній ключ в поставках цього постачальника.
ОБМЕЖУЄТЬСЯ Оновлються первинні ключі лише тих постачальників, які ще не здійснювали поставок. Інакше операція оновлення відхиляється.
ВСТАНОВЛЮЄТЬСЯ Для всіх поставок такого постачальника зовнішній ключ встановлюється в невизначене значення (NULL-значення), а потім оновлюється первинний ключ постачальника. Така можливість, звичайно, незастосовна, якщо даний зовнішній ключ не повинний містити NULL-значень.

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

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

NULL-значення не припустимі

ВИДАЛЕННЯ З (стрижневої сутності) КАСКАДУЄТЬСЯ

ОНОВЛЕННЯ (первинний ключ стрижневої сутності) КАСКАДУЄТЬСЯ

Зазначені специфікації представляють залежність по існуванню характеристичних сутностей.

4. Розвинуті елементи моделі “сутність-зв'язок”

До числа більш складних елементів ER-моделі відносяться підтипи і супертипи сутностей.

Виділення супертипу і підтипів в межах певної сутності має сенс тоді, коли набір екземплярів сутності може бути розбитий на кілька груп так, що екземпляри всіх груп мають частину атрибутів спільну для всіх груп, а частину – оригінальну для кожної групи. Тоді сутність може бути розщеплена на два чи більш підтипи, що взаємно виключають один одного, кожний з яких має спільні та власні оригінальні атрибути і/чи зв'язки. Сутність, на основі якої визначаються підтипи, називається супертипом. Спільні атрибути і/чи зв'язки явно визначаються один раз на більш високому рівні – на рівні супертипу. На рівні підтипів визначаються атрибути і/чи зв'язки, які не є спільними для всіх підтипів даного супертипу. Підтипи повинні утворювати повну множину, тобто будь-який екземпляр супертипу повинен відноситися до деякого підтипу. Аналогічно мовам об'єктно-орієнтованого програмування вводиться можливість успадковування типу сутності, виходячи з одного чи декількох супертипів.

До розвинутих елементів ER-моделі також відносять уточнені степені зв'язку. Іноді буває корисно визначити можливу кількість екземплярів сутності, що беруть участь у даному зв'язку (наприклад, службовцю дозволяється брати участь не більш, ніж у трьох проектах одночасно).

До розвинутих елементів ER-моделі також відносять обмеження на дії з екземплярами залежних сутностей, спрямовані на підтримку цілісності бази даних.

 


Дата добавления: 2016-01-03; просмотров: 184; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!