ЗОВНІШНЄ З’ЄДНАННЯ (ВІДСТУП ВІД ОСНОВНОЇ ТЕМИ)

У цьому розділі робиться деякий відступ від основної теми глави в цілях обговорення часто використовуваної операції зовнішнього зєднання [193], [194], [197], [1914], [1915] Зовнішнє зєднання-це розширена форма звичайного абовнутрішнього зєднання Зовнішнє зєднання відрізняється від внутрішнього тим, що кортежі одного з

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

( S JOIN SP ) UNION

( EXTEND ( ( S { S# } MINUS SP { S# } )

JOIN S ) j ADD { NULL AS P#, NULL AS QTY )

)

Результат буде містити кортежі і для постачальників, які не виконали жодної поставки У цих кортежах міститимуться невизначені значення (NULL) в позиціях атрибутів P # і QTY

Досліджуємо даний приклад більш докладно Розглянемо рис 193 На ньому вгорі показані значення даних у вихідних змінних відносини S і SP, в середній частині показаний результат звичайного внутрішнього сполучення, а в нижній частині – результат відповідного зовнішнього зєднання Як випливає з цього малюнка, у внутрішньому сполученні (висловлюючись дуже неформально) Губиться інформація про постачальників, не виконали жодної поставки деталей (в даному прикладі це постачальник з номером S5), в той час як зовнішнє зєднання зберігає її Дійсно, наявне розходження і є причиною використання зовнішнього зєднання

Таким чином, зовнішнє зєднання призначено для вирішення досить важливою проблеми, що полягає у втраті інформації при внутрішньому сполученні Деякі автори висловлюють думку, що система повинна забезпечувати пряму і явну підтримку зовнішніх зєднань, замість того щоб вимагати від користувача при формуванні запиту вдаватися до різних хитрощів для досягнення бажаного результату Зокрема, в [62] наведено думку про те, що зовнішні зєднання повинні бути невідємною частиною реляційної моделі Тим не менш, у цій книзі автор не підтримує цю позицію, зокрема, за наведеними нижче причин

■ Насамперед, безумовно, операція зовнішнього зєднання використовує неопреде лені значення (NULL), а автор цієї книги завжди виступає проти цього з цілого ряду описаних раніше грунтовних причин

■ Крім того, зверніть увагу на те, що існує кілька різновидів операції зовнішнього зєднання – ліве, праве і повне зовнішнє в-зєднання, а також ліве, праве і повне зовнішнє природне зєднання (Ліве соедине ня зберігає в результуючому відношенні інформацію з лівого операнда, праве – з правого операнда, а повне – з обох операндів) На рис 193 поки зан приклад лівого зєднання, точніше, лівого зовнішнього природного соедине ня Більше того, зверніть увагу на те, що не існує достатньо простого способу формування зовнішнього природного зєднання на основі зовнішнього в-зєднання [197] У результаті не ясно, який саме оператор зовнішнього зі єднання повинна явно підтримувати система

■ Далі, питання про зовнішній зєднанні ні в якому разі не можна вважати настільки ж тривіальним, як можна вважати на підставі простого прикладу, який наведено на рис 193 На практиці, як показано в [197], операції зовнішнього зєднання притаманний ряд неприємних властивостей, які у своїй сукупності не дозволяють ефективно реалізувати її підтримку в існуючих мовах, зокрема в мові SQL Вжиті в деяких комерційних СУБД спроби вирішити цю проблему виявилися невдалими, тобто в них так і не вдалося впоратися з неприємними властивостями (Див [197], де даний питання описаний детальніше)

Рис 193 Порівняння внутрішнього і зовнішнього сполук (приклад)

■ Нарешті, вже було висловлено думку про те, що атрибути зі значеннями у вигляді відносин являють собою альтернативний підхід, що дозволяє радикально усунути всі ці проблеми Такий підхід виключає необхідність використання невизначених значень (NULL) І операцій зовнішнього зєднання і в цілому, на думку автора, являє собою більш витончене рішення (не кажучи вже про те, що це – реляційне рішення, яке не призводить до порушення реляційної моделі) Наприклад, для показаних на рис 193 даних наведене нижче вираз дозволяє отримати результат, представлений на рис 194

WITH ( S RENAME S# AS X ) AS Y :

( EXTEND Y ADD ( SP WHERE S# = X ) AS PQ ) RENAME X AS S#

Зокрема, порожній безліч деталей, що поставляються постачальником з номером S5, на рис 194 представлено саме у вигляді порожнього безлічі, а не у вигляді якихось дивних невизначених значень (NULL), як це було у випадку, показаному на рис 193 Подання порожнього безлічі у вигляді порожнього безлічі, схоже, є вдалою ідеєю Дійсно, за належної підтримки атрибутів, значеннями яких можуть бути відносини, операція зовнішнього зєднання може виявитися абсолютно зайвою

При більш уважному вивченні цього питання можна помітити, що має місце проблема інтерпретації невизначених значень (NULL), які зявляються в результуючому відношенні операції зовнішнього зєднання Наприклад, що представляють собою невизначені значення, показані на рис 193 Безсумнівно, вони не означають, що значення не відомо або значення не застосовується. Насправді, єдина логічно обгрунтована інтерпретація їх сенсу полягає в наступному: Значним є порожній безліч . Більш докладно ця проблема також обговорюється в [197]

Рис 194 Збереження інформації про постачальника з номером S5 (кращий спосіб)

На закінчення розділу відзначимо, що існує можливість визначити зовнішні версії інших операторів реляційної алгебри, зокрема операторів обєднання, перетину і різниці [147] Наприклад, в [62] щонайменше один з них {Зовнішнє обєднання) розглядається як невідємна частина реляційної моделі Подібні версії операторів дозволяють виконувати обєднання двох відносин та інші операції, навіть якщо дані відносини не сумісні за типом Основний принцип роботи таких операторів полягає в розширенні кожного з операндів за рахунок додавання атрибутів, властивих іншому операнду, з приміщенням невизначених значень (NULL) у кожний такий атрибут кожного кортежу (після чого операнди стають сумісними за типом) Потім виконується звичайна операція обєднання, перетину або разності8 Тим не менш, ми не будемо докладно обговорювати ці операції за наведеними нижче причин

■ Зовнішнє перетин гарантовано повертає порожнє відношення, за винятком ням окремого випадку, коли вихідні відносини відразу сумісні за типом Але в такій ситуації зовнішнє перетин вироджується до звичайного пересечгнія

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

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

8 Дане пояснення відноситься до початкових визначень цих операцій в [146] в роботі [62] ці визначення трохи змінилися

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*