Відносини без атрибутів

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

Для того щоб перейти до більш докладного вивчення поняття відносини без атрибутів, спочатку необхідно розглянути питання про те, чи може ставлення без атрибутів містити будь кортежі Відповідь на це питання (що також може здатися дивним) є позитивним Точніше, подібне ставлення може містити, щонайбільше, один кортеж, а саме, нуль-арний кортеж (тобто кортеж без компонентів), причому воно не може містити більше одного такого кортежу, оскільки всі нульарна кортежі є дублікатами по відношенню один до одного Таким чином, існують два і тільки два відносини нульової ступеня – містять лише один кортеж і не містять взагалі жодного кортежу Ці два відносини є настільки важливими, що, слідуючи Дарвені (Darwen) [65], автор передбачив для них псевдоніми Перше ставлення буде іменуватися TABLE_DEE, а друге – TABLE_DUM або скорочено DEE і DUM (DEE – це відношення з одним кортежем, aDUM – пусте)

Примітка Для цих відносин нелегко зобразити таблицю Прийнятий спосіб трактування відносин як звичайних таблиць починає трохи буксувати в разі відносин DEE І DUM

Чому відношенні DEE і DUM ЯВЛЯЮТЬСЯ такими важливими На це питання є кілька відповідей, більш-менш повязаних між собою Одним з цих відповідей є те, що ці відносини в реляційної алгебри відіграють таку роль (див розділ 7), яка трохи нагадує роль, що належить порожній множині в теорії множин або нулю у звичайній арифметиці Інша відповідь стосується того, що взагалі мається на увазі під відносинами (см [65]) по суті DEE означає TRUE, або так, a DUM означає FALSE, чи ні Іншими словами, ці відносини мають найбільш фундаментальний зміст порівняно з усіма іншими відносинами (Зручний спосіб запамятати, яке з цих відносин що означає, полягає в тому, що стосовно DEE є літери е, як і в слові yes – так)

У мові Tutorial D вираження TABLE_DEE і TABLE_DUM можуть використовуватися як скорочень, відповідно, для наступних викликів селектора відносин

RELATION { } { TUPLE { } }

І

RELATION { } { }

Поки ми не маємо можливості більш детально заглибитися в цю тему досить сказати, що в наступному викладі відносини DEE і DUM зустрінуться ще багато разів Додаткову інформацію можна знайти в [65]

Операції з відносинами

У розділі 63 коротко розглядалися реляційні операції застосування селектора, присвоювання і порівняння на рівність Поза всяким сумнівом, оператори порівняння на нерівність <" і ">” не можуть застосовуватися до відносин, але відносини, безумовно, можуть стати предметом порівнянь іншого роду на додаток до простого порівняння на рівність, як буде показано в цьому розділі

Реляційні операції порівняння

Почнемо з визначення логічного виразу нового типу, з оператором порівняння відносин &ltrelation comp&gt, яке має наступний синтаксис

Відносини, позначені двома параметрами &ltrelation exp&gt  (Реляційне вираз), повинні належати до одного і того ж типу, а оператором порівняння відносин повинен бути один з наступних операторів

■ = Так само

■&nbsp&nbsp&nbsp&nbsp ≠  Не дорівнює

■ ⊆ Підмножина

■ ⊂ Суворе підмножина

■ ⊇ надбезліччю

■ ⊃ Суворе надмножество

Після цього можна дозволити використовувати операцію &ltrelation comp&gt в будь-якому місці, де допускається застосування логічного виразу ехр>, наприклад, в конструкції WHERE Нижче наведено ряд прикладів

1 S {CITY} = Р {CITY}

Це вираз має такий зміст: Чи є проекція відносини постачальників по атрибуту CITY рівний проекції відносини деталей по атрибуту CITY”

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp S   {  S#   }  ⊃ SP   {  S#   }

Це вираз має такий зміст (представлений в ньому питання трохи перефразувавши): Чи є такі постачальники, які взагалі не поставляють деталі”

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

IS_EMPTY   (   &ltrelation   exp&gt   )

Це вираз повертає істинне значення TRUE, якщо відношення, позначене як реляционное вираз &ltrelation exp&gt є порожнім, а в іншому випадку повертає помилкове значення FALSE

Інші оператори

Ще одним широко поширеним вимогою є забезпечення можливості перевірити, чи присутній вказаний кортеж t в зазначеному відношенні r

t Є  r

Це вираз повертає TRUE, якщо t присутній в r, а в іншому випадку повертає FALSE (Є є оператором перевірки належності до безлічі вираз t Є r можна читати як t належить до r , або t є елементом r , або, простіше за все, t [мається] в r )

Необхідно також мати можливість витягти один кортеж з відносини з кардинальними один, таким чином

TUPLE   FROM  r

Це вираз активізує виняток, якщо r не містить точно один кортеж в іншому випадку воно повертає лише цей один кортеж

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

Посилання на тип ставлення

Точно так само, як схема іменування типу кортежу, описана в розділі 62, спрощує завдання визначення типу результату вирази, в якому використовується довільний кортеж, так і схема іменування типу відносини, описана в розділі 63, спрощує завдання визначення типу результату довільного реляційного вираження Більш докладні відомості з цієї теми наведені в главі 7, а в цьому розділі зупинимося на одному простому прикладі Якщо дана змінна відносини постачальників S, то вираз

S   {   S#,    CITY   }

призводить до отримання результату (відносини), який має наступний вигляд

RELATION  {   S#   S#,    CITY   CHAR  }

Аналогічні зауваження відносяться до всіх можливих реляційним виразами

Оператор ORDER BY

Для зручного представлення результатів дуже бажано підтримувати оператор ORDER BY, як і в мові SQL (див главу 3) Докладне визначення цього оператора тут не наведено, оскільки його семантика, безумовно, повинна бути очевидною Але слід звернути увагу на перераховані нижче особливості цього оператора

■ Оператор ORDER BY діє (по суті), сортуючи кортежі в деякій зазначеній послідовності, незважаючи на те, що для кортежів не визначені оператори <" і ">” (Саме так)

■ Оператор ORDER BY не є реляційним оператором, оскільки возвра щаемий їм результат не являє собою відношення

■ Оператор ORDER BY не є також функцією, оскільки загалом з його допомогою на щью може бути отримано багато різних наборів вихідних даних для одного і того ж вхідного набору

Як приклад наслідки з останнього зауваження розглянемо результат застосування операції ORDER BY CITY до відношення постачальників, показаному на рис 61 Безумовно, ця операція здатна повернути будь-який з чотирьох різних результатів На відміну від цього, оператори реляційної алгебри безсумнівно є функціями, оскільки вони при отриманні будь-якого заданого набору вхідних даних завжди повертають тільки один відповідний йому можливий набір вихідних даних

Джерело: Дейт К Дж, Введення в системи баз даних, 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>

*

*