ОРИГІНАЛЬНА АЛГЕБРА СЕМАНТИКА

79 Обєднання

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

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

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

не поширюється тільки на обєднання

Тому визначення операції реляційного обєднання має бути таким: якщо дано відносини а і b одного і того ж типу, то обєднання цих відносин a UNION b є відношенням того ж типу з тілом, яке складається з усіх кортежів t, присутніх в а чи b або в обох відношеннях

Приклад Припустимо, що відносини А і B мають вигляд, показаний на рис 72 (обидва вони отримані з поточного значення змінної відносини постачальників S взагалі кажучи, в А наведено дані про постачальників з Лондона, а в в – дані про постачальників, які постачають деталь Р1) У такому випадку в обєднання A UNION в (див рис 72, а) входять постачальники, які або знаходяться в Лондоні, або постачають деталь Р1, або відповідають обом цим умовам Зверніть увагу на те, що в результаті містяться три кортежу, а не чотири по визначенню відносини ніколи не містять дублікати кортежів (тому, неформально висловлюючись, з результатів операції обєднання усуваються дублікати) До речі, слід зазначити, що єдиною не розглянутим

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

Рис 72 Приклади операцій обєднання, перетину і різниці

Між іншим, зверніть увагу на те, що визначення операції обєднання базується на понятті рівності кортежів Наведемо ще одне, але еквівалентне визначення, в якому цей нюанс підкреслюється дуже ясно (змінена формулювання відзначена курсивним шрифтом): якщо дано відносини а і b одного і того ж типу, то обєднання цих відносин a UNION b є відношенням того ж типу з тілом, що складається з усіх кортежів t, таких, що t дорівнює деякому кортежу з а чи b чи з обох відносин {Тобто є його дублікатом) Як незабаром стане очевидно, аналогічні зауваження стосуються безпосередньо операцій перетину і різниці

Перетин

Як і для обєднання, і фактично з тієї ж причини, для реляційної операції перетину потрібно, щоб її операнди належали до одного і того ж типу Якщо дано відносини а і b одного і того ж типу, топеретином цих відносин а INTERSECT b є ставлення того ж типу з тілом, що складається з усіх кортежів t, таких, що t присутній одночасно в а і b

Приклад Знову припустимо, що відносини А І В показані на рис 72 Тоді перетин A INTERSECT в (рис 72, б) включає всіх постачальників, які знаходяться в Лондоні і поставляють деталь Р1

Різниця

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

Приклад Знову припустимо, що відносини А і в показані на рис 72 Тоді результат операції різниці A MINUS в (рис 72, в) включає постачальників, які знаходяться в Лондоні і не поставляють деталь Р1, а результат операції різниці в MINUS A (рис 72, г) включає постачальників, які постачають деталь Р1 і не перебувають у Лондоні Зверніть увагу на те, що оператор MINUS характеризується спрямованістю (некомутативними), так само, як віднімання у звичайній арифметиці (наприклад, 5 2 і 2 5 не є одним і тим же)

Твір

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

{Al al, A2 А2, , Am am}

І

{    B1  b1,    B2  b2,     ..,    Bn bn    }

то теоретико-множинне обєднання цих двох кортежів являє собою наведений нижче єдиний кортеж

{Al al, A2 а2, .., Am am, Bl bl, B2 b2, .., Bn bn}

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

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

1 У мові Tutorial D потрібно, щоб перед кожним з наведених нижче виразів стояло ключове СЛОВО TUPLE

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

Отже, визначимо (реляційне) декартовій твір a TIMES b відносин а і b, які не мають спільних атрибутів, як відношення, заголовок якого представляє собою (теоретико-множинне) обєднання заголовків відносин а і b, а тіло складається з усіх кортежів t, таких, що t є (теоретико-множинним) обєднанням кортежу, що належить до відношення а, і кортежу, що належить до відношення b Слід зазначити, що кардинальність результату дорівнює добутку Кардинально вхідних відносин, а й b, а ступінь результату – сумі ступенів вхідних відносин

Приклад Припустимо, що відносини А і B показані на рис 73 (неформально висловлюючись, ставлення А містить всі поточні номери постачальників, а в – все поточні номери деталей) У такому випадку декартовій твір A TIMES В (яке показано у нижній частині даного малюнка) включає в себе всі поточні пари номерів постачальників і номерів деталей

Рис 73 Приклад декартова твори

Скорочення

Припустимо, що ставлення а має атрибути X і Y (і, можливо, інші атрибути), а 0 є таким оператором (як правило, =, ≠, >, < ; "і т.д.), що логічне вираження X θ Y є правильно побудованим і за певних значеннях X і Y набуває істиннісне значення (TRUE або FALSE). У такому випадку 6-скороченням (або просто скороченням) відносини а за атрибутами X і Y (у зазначеному порядку), яке

задано за допомогою наведеного нижче вирази, є ставлення з тим же заголовком, що і відносно а, і з тілом, що складається з усіх кортежів відносини а, таких що вираз X θ Y для розглянутого кортежу приймає значення TRUE

a WHERE  X  θ  Y

Примітка Вище фактично наведено визначення скорочення, яке найчастіше зустрічається в літературі (включаючи перші видання цієї книги) Але це визначення можна узагальнити таким чином Припустимо, що ставлення а має атрибути X, Y, , Z (і, можливо, інші атрибути), а р є функцією з істиннісними значеннями, формальні параметри якої представляють собою суворе підмножина атрибутів X, Y, , Z У такому випадку скорочення а відповідно до р, яке визначається за допомогою наведеної нижче функції, є відношенням з тим же заголовком, що і в а, і з тілом, що складається з усіх кортежів відносини а, таких, що функція р приймає значення TRUE для розглянутого кортежу

a WHERE p

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

Рис 74 Приклади застосування операції скорочення З цього випливають наведені нижче висновки

1 Вираз р, яке слід за ключовим словом WHERE, безумовно, є

логічним вираженням насправді, це – предикат, в тому сенсі, до торий докладно розглядається в розділі 9

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

на рис 74, є простими А нижче для порівняння наведено приклад, в якому використовується непросте умова скорочення

S WHERE ( ( SP RENAME S# AS X ) WHERE X = S# ) { P# } = P { P# }

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

3 Заслуговують на увагу наступні еквівалентні вирази

a WHERE p1 OR p2 ≡ (a WHERE p1 ) UNION ( a WHERE p2 )

a WHERE p1 AND р2 ( a WHERE p1 ) INTERSECT ( a WHERE p2 )

a WHERE NOT (р) ≡ a MINUS (a WHERE p)

Проекція

Припустимо, що ставлення а має атрибути х, Y, , Z (і, можливо, інші атрибути) У такому випадку проекція відносини а за атрибутами X, у, .., z, яка визначається за допомогою наступного виразу

а {X, Y, , Z}

є відношенням, відповідним описаним нижче вимогам

Його заголовок формується з заголовка відносини а шляхом видалення всіх атрибутів, не зазначених у множині {X, Y, , Z}

Тіло складається з усіх кортежів {Х х, У у, .., z z}, таких що стосовно а присутній кортеж із значенням х атрибута X, у атрибута Y . і z атрибута Z

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

З цього випливає наведені нижче висновки

1 Жоден з атрибутів не може бути зазначений у розділеному комами списку імен атрибутів більше одного разу (поясніть, чому)

2 На практиці часто зручно мати можливість вказувати не атрибути, за якими має бути сформована проекція, а скоріше ті атрибути, які мають бути відкинуті (Тобто видалені) після виконання операції проекції Наприклад, замість використання формулювання отримати проекцію відносини Р по атрі бутам Р #, PNAME, COLOR І CITY , можна використовувати формулювання ВИКЛЮЧИТИ за допомогою операції проекції атрибут WEIGHT ІЗ відносини р як показано нижче

Р {ALL BUT WEIGHT}

Інші приклади наведені на рис 75 Зверніть увагу на те, що в першому прикладі (проекція відносини постачальників по атрибуту CITY) в результаті містяться тільки три кортежу (відповідно до вимоги об усуненні дублікатів), хоча

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

Зєднання

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

X1, Х 2, , Xm, Y1, Y2, , Yn

Y l ,    Y 2 ,                                        ,     Y n ,    Zl,    Z2,                                        ,     Zp

ЦЕ означає, що два розглянутих відносини мають спільне безліч атрибутів Y, що складається з атрибутів Yl, Y2, , Yn (і тільки з цих атрибутів), інші атрибути відносини а утворюють безліч х, що складається з атрибутів X1, Х2, Xm, а інші атрибути відносини b утворюють безліч z, що складається з атрибутів Z1, Z2,

. , Zp Необхідно зробити наведені нижче зауваження

■ Можна і потрібно припустити без втрати точності, що завдяки наявності оператора перейменування атрибутів RENAME ЖОДЕН З атрибутів xi (i = 1, 2, .., m) не має такого ж імені, як будь-який з атрибутів zj (j = 1, 2,

…, Р)

■ Кожен атрибут Yk (к = 1, 2, .., n) має однаковий тип в обох відно шениях, а і Ь (оскільки в іншому випадку він за визначенням не повинен рас сматриваться як загальний атрибут)

Ті пе рь множини {XI, Х 2, , X m}, {Y l, Y 2, , Y n} і {Zl, Z2,

. , Zp} можуть розглядатися, відповідно, як три складових атрибута х, Y і z

У такому випадку (природне) зєднання а і b виражається наступним чином

a JOIN b

Воно являє собою відношення із заголовком {X, Y, Z} і тілом, що складається з усіх таких кортежів {X х, Y у, zz}, що будь-який з цих кортежів присутній і щодо а, зі значенням х атрибута х і значенням у атрибута Y, і щодо b, зі значенням у атрибута Y і значенням z атрибута Z

Приклад природного зєднання (природне зєднання s JOIN P за загальним атрибуту CITY) наведено на рис 76

Примітка У даній книзі ця думка була підкреслена кілька разів (і фактично вона проілюстрована на рис 76), але необхідно знову явно вказати, що зєднання не

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

Рис 75 Приклади застосування операції проекції

Рис 76 Природне зєднання S JOIN P

До речі, слід зазначити, що визначення природного зєднання знову базується на понятті рівності кортежів Стосовно до даного визначення, необхідно також зробити наведені нижче зауваження

■ Якщо п = 0 (а це означає, що відносини а і b не мають спільних атрибутів), то операція a JOIN b вирождается2 в операцію a TIMES b

■ Якщо m = p = 0 (а це означає, що відносини а і b належать до однакового типу), то операція a JOIN b вироджується в операцію a INTERSECT b

2 Саме з цієї причини версія мови Tutorial D, яка визначена в [33], не включає безпосередньої підтримки для оператораTIMES

Тепер перейдемо до вивчення операції 9-зєднання Ця операція призначена для тих випадків (порівняно рідкісних, але проте досить важливих), коли виникає необхідність зєднати два відносини на основі деякого оператора порівняння, відмінного від порівняння на рівність Припустимо, що відносини а і b задовольняють вимогам для декартова твори (тобто не мають спільних імен атрибутів) нехай а має атрибут X і b – атрибут У, а х, y і θ задовольняють вимогам для 8соедіненія У такому випадку операція 6-зєднання відносини а по атрибуту X з відношенням b по атрибуту y визначена як результат обчислення наступного виразу

(A TIMES b) WHERE X 9 У

Іншими словами, результатом стає ставлення з тим же заголовком, як і у декартова твори а й b, і з тілом, що складається з безлічі всіх кортежів t, таких що t присутній в цьому декартовом творі, і вираз X θ У приймає значення TRUE для даного кортежу t

Як приклад припустимо, що необхідно обчислити зєднання по оператору більше відносини s по атрибуту CITY з відношенням р по атрибуту CITY (отже, в даному випадку 0 має вигляд >, а оскільки атрибути CITY визначені як належать до типу CHAR, то оператор > просто означає більше в алфавітному порядку) Відповідне реляционное вираз приведено нижче

( ( S RENAME CITY AS SCITY ) TIMES ( P RENAME CITY AS PCITY )

) WHERE SCITY &gt PCITY

Зверніть увагу на те, що в даному прикладі виконується перейменування атрибутів (Безумовно, було б достатньо перейменувати тільки один з двох атрибутів CITY єдина причина перейменування обох полягає в прагненні забезпечити рівнозначність цих атрибутів) Результат застосування всього цього виразу наведено на рис 77

Рис 77 Зєднання по оператору більше відносин постачальників і деталей по містах Якщо 0 являє собою операцію перевірки на рівність (=), то 0-зєднання

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

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

S  JOIN  P

Воно еквівалентно наступному складнішого виразу

{ ( S TIMES ( P RENAME CITY AS PCITY ) ) WHERE CITY = PCITY )

{ ALL BUT PCITY }

Примітка У мові Tutorial D не передбачена безпосередня підтримка операції 8-зєднання, оскільки на практиці необхідність у ній не виникає досить часто і вона так чи інакше не відноситься до типу примітивних операцій (тобто може бути визначена в термінах інших операцій, як було показано вище)

Ділення

В [74] визначено дві різні операції ділення, які іменуються, відповідно, малим діленням (Small Divide) і великим поділом (Great Divide) У мові Tutorial D малим поділом є операція &ltdivide&gt, в якій вираз <Реr> складається тільки з одного реляційного вираження &ltrelation exp&gt, а великим поділом – операція &ltdivide&gt, в якій <Реr> складається з укладеного в круглі дужки і розділеного комами списку з двох виразів &ltrelation exp&gt. Наведене нижче опис відноситься тільки до малого діленню, причому лише до конкретної обмеженою формі малого поділу докладний опис операції великого поділу і додаткові відомості про операцію малого ділення наведені в [74]

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

Перейдемо до розгляду визначення цієї операції Припустимо, що отноше ня а і b, відповідно, мають наступні атрибути

XI, Х2, ,

Хm І

Yl,    Y2,     ..,    Yn

Тут жоден з атрибутів xi (i = 1, 2, .., m) не має однакового імені з будь-яким з атрибутів Yj (j = 1, 2, .., п) Нехай відношення с має наступні атрибути:

XI, Х 2, , X m, Y l, Y 2, , Y n

ЦЕ означає, що з має заголовок, що представляє собою (теоретико-множинне) обєднання заголовків а і Ь Будемо розглядати множини {XI, Х2, .., Хт} і {Yl, Y2, , Yn}, відповідно, як складові атрибути х і Y У такому випадку операція ділення а на b по с (де а – ділене, Комерсант – дільник, а с – посередник) може бути представлена ​​за допомогою наступного виразу

a DIVIDEBY b PER з

Воно являє собою відношення із заголовком {X} і тілом, що складається з усіх кортежів {X х}, присутніх в а, причому таких, що кортеж {х х, Y у} присутня в с для всіх кортежів {Y у}, присутніх в b Іншими словами, неформально висловлюючись, даний результат складається з тих значень X, присутніх в а, для яких відповідні значення Y в с включають всі значення Y з b Зверніть увагу на те, що і в цьому визначенні застосовується поняття рівності кортежів

На рис 78 наведені деякі приклади поділу У кожному випадку ділене (DEND) являє собою проекцію поточного значення змінної відносини S по атрибуту S # посередник (MED) в кожному випадку є проекцією поточного значення змінної відносини SP за атрибутами S # і Р # а три дільника (DOR) є такими, як зазначено на цьому малюнку Зокрема, заслуговує на особливу увагу останній приклад, в якому дільником служить відношення, що містить номери всіх деталей, відомих у даний час результат (що цілком очевидно) показує номери тих постачальників, які поставляють всі ці деталі На підставі даного прикладу можна зробити висновок, що оператор DIVIDEBY призначений для запитів подібного загального характеру насправді, кожен раз, коли версія запиту на природній мові містить

в умовній частині слово все (Наприклад, Визначити постачальників, які постачають всі деталі), дуже велика ймовірність того, що буде потрібно поділ (І дійсно, Кодд спеціально присвятив операцію ділення для використання як алгебраїчного аналога квантора загальності, під МНОРОМ подібно до того, що операція проекції була призначена для використання як алгебраїчного аналога квантора існування Додаткові відомості з цієї теми наведені в розділі 8)

Рис 78 Приклади поділу

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

S WHERE ( ( SP RENAME S# AS X ) WHERE X = S# ) { p# } =                                           P { P# }

Результатом обчислення даного виразу стає відношення, що містить всі кортежі і лише такі кортежі, які відносяться до постачальників, що поставляють в даний час всі відомі деталі Пояснення цього виразу наведено нижче

1 Для даного постачальника вираз

(   (  SP RENAME  S#  AS  X  )  WHERE X  =  S#  )   {  P#  }

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

Потім це безліч порівнюється з безліччю всіх відомих в даний час номерів деталей

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

Нижче для порівняння наведено варіант такого виразу з використанням ключового слова DIVIDEBY, яке цього разу сформовано без скорочень

S JOIN (S {S #} DIVIDEBY P {Р #} PER SP {S #, P #})

У читача може скластися враження, що варіант з реляційним порівнянням концептуально простіше для використання І дійсно, виникають деякі сумніви з приводу того, чи потрібно було взагалі визначати оператор DIVIDEBY, якщо реляційна модель вже включає реляційні порівняння, але справа в тому, що вона такі не включає

710&nbsp&nbsp ПР ІМ ЕР И

У цьому розділі представлено кілька прикладів використання виразів реляційної алгебри у формулюванні запитів Рекомендуємо читачеві перевірити ці приклади поданням, наведеним на рис 38 (див стор 119)

751Определіть імена постачальників, які постачають деталь Р2

{ (SP JOIN S) WHERE Р # = Р # (Р2)) {SNAME}

Пояснення Спочатку формується підключення відносин SP і S за номерами постачальників, в результаті чого концептуально відбувається доповнення кожного кортежу SP відповідною інформацією про постачальників (тобто відповідними значеннями SNAME, STATUS і CITY) Потім виконується операція скорочення результатів цього зєднання таким чином, що в ньому залишаються тільки кортежі, що відносяться до деталі Р2 Нарешті, формується проекція даного скорочення по атрибуту SNAME Остаточним результатом стає тільки один атрибут, SNAME *

752 Визначити імена постачальників, які постачають щонайменше одну деталь червоного кольору

{((Р WHERE COLOR = COLOR (Red))

JOIN SP ) { S# } JOIN S ) { SNAME }

Єдиним атрибутом результату знову стає SNAME До речі сказати, нижче наведена ще одна, еквівалентна формулювання того ж запиту

(((Р WHERE COLOR = COLOR (Red)) {P #} JOIN SP) JOIN S) {SNAME}

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

753 Визначити імена постачальників, які постачають всі деталі

((S {S #} DIVIDEBY Р {Р #} PER SP {S #, P #})

JOIN S ) { SNAME }

Ще одне формулювання цього запиту наведена нижче

( S WHERE

( ( SP RENAME S# AS X ) WHERE X = S# ) { P# } = P { P# } )   { SNAME }

І в цьому випадку результат містить єдиний атрибут, SNAME

754 Визначити номери постачальників, що поставляють, щонайменше, всі деталі, що поставляються постачальником S2

S { S# } DIVIDEBY ( SP WHERE S# = S# (S2) ) { P# }

PER SP { S#, P# }

Результат має єдиний атрибут, s #

755 Визначити всі пари номерів постачальників, таких що розглянуті постачальники знаходяться в одному місті

( ( ( S RENAME S# AS SA ) { SA, CITY } JOIN ( S RENAME S# AS SB ) {SB, CITY } ) WHERE SA &lt SB ) { SA, SB }

У даному випадку результат включає два атрибути, SA і SB (фактично було б достатньо перейменувати тільки один з двох атрибутів S #, але тут перейменовані обидва атрибута, щоб не підкреслювати відмінності між ними) Передбачається, що для типу s # визначений оператор <". Умова скорочення SA < SB виконує наступні два призначення:

■ усуває пари номерів постачальників у формі (х, х)

■ гарантує, що в результаті не зявляться обидві пари, і (х, у), і (у, х)

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

WITH ( S RENAME S#    AS SA ) { SA, CITY } AS Tl, ( S RENAME S#    AS SB ) { SB, CITY } AS T2, Tl JOIN T2 AS    T3,

T3 WHERE SA &lt    SB AS T4 :

T4 { SA, SB }

Оператор WITH дозволяє формувати великі, складні вирази і при цьому жодним чином не порушує непроцедурного характер реляційної алгебри Ця тема буде продовжена в описі, яке слід за черговим прикладом

756Определіть імена постачальників, які не поставляють деталь Р2

( ( S { S# } MINUS ( SP WHERE P# = P# (P2) ) { S# } ) JOIN S ) { SNAME }

Результат містить єдиний атрибут, SNAME

Як було обіцяно, скористаємося даними прикладом для ілюстрації ще однієї ідеї Не завжди легко відразу уявити собі, як сформулювати даний запит у вигляді одного підвиразу Але не обовязково проводити розробку саме в такій манері Нижче показано, як можна поетапно сформулювати запит, що розглядається в даному прикладі Тут Т6 позначає бажаний результат

WITH S { S# } AS Tl,

SP WHERE P# = P# (P2) AS T2,                                          T2 { S# } AS T3,

Tl MINUS T3 AS T4,

T4 JOIN S AS T5,

T5   {   SNAME   }  AS   T6   :

T6

Пояснення Передбачається, що імена, введені за допомогою конструкції WITH (тобто в даному прикладі імена у формі Ti), є локальними по відношенню до оператора, який містить цю конструкцію Отже, якщо система підтримує режим відкладеного обчислення (Як, наприклад, система PRTV [79]), то розбивка всього запиту на послідовність кроків у такій формі не робить негативного впливу на продуктивність Даний запит фактично обробляється, як описано нижче

■ Вирази, що передують двокрапки, не вимагають негайного обчислення системою все, що повинна зробити система, – це запамятати їхні поряд з іменами, введеними за допомогою відповідних конструкцій АS

■ Вираз, наступне за останнім двокрапкою, позначає остаточний результат запиту (в даному прикладі цим виразом є просто Тб)

3 Насправді, скалярна форма оператора WITH вже використовувалася у визначенні оператора DIST (див розділ 55 глави 5), а в розділі 65 глави 6 була показана його реляційна форма в розширенні скорочення UPDATE

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

■ Для обчислення значення Т6, що представляє собою проекцію значення Т5 по атрибуту SNAME, система повинна спочатку обчислити Т5 для того щоб обчислити Т5, що являє собою поєднання Т4 і S, система повинна спочатку обчислити Т4 і тд Іншими словами, система фактично повинна обчислити початкове вкладене вираз точно так само, як якби користувач відразу подав це вкладене вираз на вхід системи

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

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

*

*