- •1. Мета роботи
- •2. Короткі теоретичнi вiдомостi
- •Створення і перевірка локальної логічної моделі даних для окремих призначених для користувача представлень
- •1.1 Виключення особливостей, несумісних з реляційною моделлю (необов'язковий етап)
- •Видалення двосторонніх зв'язків "багато до багатьох" (*:*)
- •Видалення рекурсивних зв'язків "багато до багатьох" (*:*)
- •Видалення складних зв'язків
- •1. Сильні типи сутності.
- •4. Видалення багатозначних атрибутів
- •1.2. Визначення набору відношень виходячи із структури локальної логічної моделі даних
- •2. Слабкі типи сутностей.
- •3. Двосторонні зв'язки типа "один до багатьох" (1 :*)
- •4. Двосторонні зв'язки типу "один до одного" (1:1)
- •5. Обов'язкова участь однієї сторони в зв'язку типу 1:1
- •6. Рекурсивні зв'язки "один до одного" (1:1)
- •7. Зв'язки типу суперклас/підклас
- •8. Двосторонні зв'язки "багато до багатьох" (*:*)
- •9. Багатозначні атрибути
- •1.3. Перевірка відношень за допомогою правил нормалізації
- •1.4 Перевірка відповідності стосунків вимогам призначених для користувача транзакцій
- •Контрольні запитання
- •4. Практичне завдання
- •6. Список літератури
Видалення рекурсивних зв'язків "багато до багатьох" (*:*)
Рекурсивний зв'язок є особливим типом зв'язку, в якому певний тип сутності сполучений зв'язком сам з собою (див. розділ 11.2.2). Нижче перераховано три типи рекурсивних зв'язків.
Рекурсивний зв'язок "один до одного" (1:1).
Рекурсивний зв'язок "один до багатьом" (1:*).
Рекурсивний зв'язок "багато до багатьом" (*:*)
П
ерші
два зв'язки можуть бути перетворені в
одне відношення реляційної моделі без
якої-небудь структуризації, але якщо
рекурсивний зв'язок 1:* допускає
необов'язкову участь з боку зв'язку
"багато", то для зменшення кількості
порожніх значень, що зберігаються в
базі даних, доцільніше створити друге
відношення. Способи перетворення
рекурсивних зв'язків 1:1 і 1:* розглядаються
на етапі 2,2. А якщо в концептуальній
моделі даних присутній рекурсивний
зв'язок *:*, то слід виконати декомпозицію
цього зв'язку для виявлення проміжної
сутності. У учбовому проекті Dreamhome
рекурсивні зв'язки *:* відсутні, але є
рекурсивний зв'язок Staff
Supervises Staff (Співробітник
компанії керує співробітниками компанії)
типа 1:*.
Рис. 15.2. Приклад перетворення зв'язку: а) зв'язок Client Views Propertyforrent типу *:*; б) декомпозиція цього зв'язку на два зв'язки 1:* (Takes і Requests) і створення нової (слабкої) сутності Viewing.
Тому для демонстрації способу перетворення зв'язків *:* для забезпечення сумісності з реляційною моделлю передбачимо, що в цьому учбовому проекті є рекурсивний зв'язок *:*, що відображає ситуацію, що співробітниками компанії керують декілька інспекторів (рис, 15.3, а).
Рекурсивний характер зв'язку вимагає особливого підходу для забезпечення можливості її перетворення в прийнятну структуру і на етапі логічного проектування бази даних, і в процесі фізичної реалізації бази даних. Для спрощення рекурсивного зв'язку *:* застосовується спосіб, багато в чому аналогічний способу перетворення зв'язку *:* між двома різними сутностями. Інтуїція підказує, що для вирішення цієї проблеми спочатку слід перетворити сутність Staff в дві сутності і створити звичайний двосторонній зв'язок *:* (рис. 15.3, б). Потім, як і раніше, для перетворення отриманого зв'язку *:* вводиться проміжна (слабка) сутність Supervision (Керівництво) (рис. 15.3, в). Після цього дві частини розділеної сутності Staff об'єднуються з урахуванням того, що мають бути збережені всі зв'язки; в результаті формується остаточна модель, показана на рис. 15.3, г.
Видалення складних зв'язків
Складною називається зв'язок, в якому беруть участь три або більше типи сутностей (див. розділ 11.2.1). Якщо в концептуальній моделі даних присутній складний зв'язок, можна виконати її декомпозицію для виявлення проміжної сутності. А складний зв'язок заміняється необхідною кількістю (двосторонніх) зв'язків 1:* зі знову виявленою сутністю.
Наприклад, тристоронній зв'язок Registers (Реєструє) у представленні Branch відповідає тій ситуації, коли співробітник компанії реєструє нового клієнта у відділенні (рис. 15.4, а). Цей зв'язок можна спростити, ввівши нову сутність і визначивши (двосторонні) зв'язки між кожною з первісних сутностей і новою сутністю. У цьому прикладі в результаті декомпозиції зв'язку Registers виявлена нова (слабка) сутність Registration (Реєстрація). Нова сутність зв'язується з первісними сутностями за допомогою трьох нових двосторонніх зв'язків: Branch, Registers Registration (У відділенні проводиться реєстрація), Staff Processes Registration (Співробітник компанії проводить реєстрацію) і Client Agrees Registration (Клієнт погоджується на реєстрацію), як показано на рис. 15.4, б.
Рис. 15.3. Приклад перетворення зв'язку; а) рекурсивний зв'язок Supervises типу "багато до багатьох" (*:*); б) перетворення рекурсивного зв'язку Supervises типу *:* у звичайний двосторонній зв'язок; в) усунення зв'язку типу *:* шляхом введення нової (слабкої) сутності Supervision і додаткового зв'язку SupervisedBy; г) об'єднання двох сутностей Stаff для усунення рекурсивного зв'язку.
