Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
praktychna_2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
279 Кб
Скачать
☆
  1. Видалення рекурсивних зв'язків "багато до багатьох" (*:*)

Рекурсивний зв'язок є особливим типом зв'язку, в якому певний тип сутності сполучений зв'язком сам з собою (див. розділ 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, г.

  1. Видалення складних зв'язків

Складною називається зв'язок, в якому беруть участь три або більше типи сутностей (див. розділ 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 для усунення рекурсивного зв'язку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]