Як ми зазначали в попередній лекції, в маніпуляційної складової реляційної моделі даних визначаються два базових механізми маніпулювання реляційними даними - заснована на теорії множин реляційна алгебра і базується на математичній логіці (точніше, на численні предикатів першого порядку) реляційне числення. В свою чергу. зазвичай виділяються два види реляційного числення - числення кортежів і числення доменів.
Всі ці механізми мають однією важливою властивістю: вони замкнені відносно поняття відношення. Це означає, що вирази реляційної алгебри і формули реляційного числення визначаються над відносинами реляційних БД і результатом їх "обчислення" також є відносини (звичайно, тут маються на увазі значення-відносини). В результаті будь-який вираз або формула можуть інтерпретуватися як відносини, що дозволяє використовувати їх в інших виразах або формулах.
Як ми побачимо, алгебра та обчислення володіють великою виразною потужністю: дуже складні запити до бази даних можуть бути виражені за допомогою одного вираження реляційної алгебри або однієї формули реляційного числення. Саме з цієї причини такі механізми включені в реляційну модель даних. Конкретний мову маніпулювання реляційними БД називається реляційно-повним. якщо будь-який запит, формулюється за допомогою одного вираження реляційної алгебри або однієї формули реляційного числення. може бути сформульований за допомогою одного оператора цієї мови.
Відомо (і ми не будемо це доводити), що механізми реляційної алгебри і реляційного числення еквівалентні, т. Е. Для будь-якого допустимого вираження реляційної алгебри можна побудувати еквівалентну (т. Е. Що виробляє такий же результат) формулу реляційного обчислення і навпаки. Чому ж в реляційної моделі даних присутні обидва ці механізму?
Справа в тому, що вони розрізняються рівнем процедурності. Вирази реляційної алгебри будуються на основі алгебраїчних операцій (високого рівня), і подібно до того, як інтерпретуються арифметичні і логічні вираження. вираз реляційної алгебри також має процедурну інтерпретацію. Іншими словами, запит. представлений на мові реляційної алгебри. може бути обчислений на основі виконання елементарних алгебраїчних операцій з урахуванням їх пріоритетності та можливої наявності дужок. Для формули реляційного числення однозначна обчислювальна інтерпретація. взагалі кажучи, відсутня. Формула тільки ставить умови, яким повинні задовольняти кортежі результуючого відносини. Тому мови реляційного числення є більшою мірою непроцедурного, або декларативними.
Оскільки механізми реляційної алгебри і реляційного числення еквівалентні, в конкретній ситуації для перевірки ступеня реляційної деякого мови БД можна користуватися будь-яким з цих механізмів.
Зауважимо, що вкрай рідко алгебра або числення приймається в якості повної основи будь-якої мови БД. Зазвичай (наприклад, в разі мови SQL) мова грунтується на деякій суміші алгебраїчних і логічних конструкцій. Проте знання алгебраїчних і логічних основ мов баз даних часто застосовується на практиці.
Для економії часу і місця ми не будемо вводити будь-які суворі синтаксичні конструкції, а в основному обмежимося розглядом матеріалу на змістовному рівні.
Огляд реляційної алгебри Кодда
Основна ідея реляційної алгебри полягає в тому, що коли незабаром відносини є множинами, засоби маніпулювання відносинами можуть базуватися на традиційних теоретико-множинних операціях, доповнених деякими спеціальними операціями, специфічними для реляційних баз даних.
Існує багато підходів до визначення реляційної алгебри. які розрізняються наборами операцій і способами їх інтерпретації, але, в принципі, є більш-менш рівносильними. В даному розділі ми опишемо трохи розширений початковий варіант алгебри. який був запропонований Коддом (будемо називати її "алгеброю Кодда"). У цьому варіанті набір основних алгебраїчних операцій складається з восьми операцій, які діляться на два класи - теоретико-множинні операції та спеціальні реляційні операції. До складу теоретико-множинних операцій входять операції:
- об'єднання відносин;
- перетину відносин;
- взяття різниці відносин;
- взяття декартова твори відносин.
Спеціальні реляційні операції включають:
- обмеження відносини;
- проекцію відносини;
- з'єднання відносин;
- поділ відносин.
Крім того, до складу алгебри включається операція присвоювання. що дозволяє зберегти в базі даних результати обчислення алгебраїчних виразів, і операція перейменування атрибутів. дає можливість коректно сформувати заголовок (схему) результуючого відносини.
Загальна інтерпретація реляційних операцій
Якщо не вдаватися в деякі тонкощі, які ми розглянемо в наступних розділах, то майже для всіх операцій запропонованого вище набору є очевидна і проста інтерпретація.
- При виконанні операції об'єднання (UNION) двох відносин з однаковими заголовками виробляється ставлення, що включає всі кортежі, що входять хоча б в одне з відносин-операндів.
- Операція перетину (INTERSECT) двох відносин з однаковими заголовками виробляє ставлення, що включає всі кортежі, що входять в обидва відносини-операнда.
- Ставлення, що є різницею (MINUS) двох відносин з однаковими заголовками, включає всі кортежі, що входять до ставлення-перший операнд, такі, що жоден з них не входить у відношення, яке є другим операндом.
- При виконанні декартова твори (TIMES) двох відносин, перетин заголовків яких порожньо, виробляється ставлення, кортежі якого виробляються шляхом об'єднання кортежів першого і другого операндів.
- Результатом обмеження (WHERE) відносини по деякому умові є ставлення, що включає кортежі відносини -операнда, яке задовольняє цій умові.
- При виконанні проекції (PROJECT) відносини на заданий підмножина безлічі його атрибутів виробляється ставлення, кортежі якого є відповідними подмножествами кортежів відносини -операнда.
- При з'єднанні (JOIN) двох відносин по деякому умові утворюється результуюче ставлення, кортежі якого виробляються шляхом об'єднання кортежів першого і другого відносин і задовольняють цій умові.
- У операції реляційного поділу (DIVIDE BY) два операнда - бінарне і унарное відносини. Результуюче відношення складається з унарних кортежів, що включають значення першого атрибута кортежів першого операнда таких, що безліч значень другого атрибута (при фіксованому значенні першого атрибута) включає безліч значень другого операнда.
- Операція перейменування (RENAME) виробляє ставлення, тіло якого збігається з тілом операнда, але імена атрибутів змінені.
- Операція присвоювання (: =) дозволяє зберегти результат обчислення реляційного вираження в існуючому відношенні БД.
Оскільки результатом будь-якої реляційної операції (крім операції присвоювання. Яка не виробляє значення) є якесь відношення, можна утворювати реляційні вирази, в яких замість відносини-операнда деякої реляційної операції знаходиться вкладене реляційне вираз. У побудові реляційного вираження можуть брати участь всі реляційні операції. крім операції присвоювання. Обчислювальна інтерпретація реляційного вираження диктується встановлених пріоритетів операцій:
RENAME> = WHERE = PROJECT> = TIMES = JOIN = INTERSECT = DIVIDE BY> = UNION = MINUS
В іншій формі пріоритети операцій показані на рис. 3.1. Обчислення виразу проводиться зліва направо з урахуванням пріоритетів операцій і дужок.
Мал. 3.1. Таблиця пріоритетів операцій традиційної реляційної алгебри
Замкнутість реляційної алгебри і операція перейменування
Як ми зазначали в попередній лекції, кожне значення-відношення характеризується заголовком (або схемою) і тілом (або безліччю кортежів). Тому, якщо нам дійсно потрібна алгебра. операції якої замкнуті щодо поняття відносини, то кожна операція повинна виробляти ставлення в повному розумінні, т. е. він повинен мати і тілом, і заголовком. Тільки в цьому випадку можна буде будувати вкладені вирази.
Тема відносини є безліч пар <имя-атрибута, имя-домена>. Якщо подивитися на загальний огляд реляційних операцій, наведений у попередньому підрозділі, то видно, що домени атрибутів результуючого відносини однозначно визначаються доменами відносин-операндів. Однак з іменами атрибутів результату не завжди все так просто.
Наприклад, уявімо собі, що у відносин-операндів операції декартова твори є однойменні атрибути з однаковими доменами. Яким був би заголовок результуючого відносини? Оскільки це безліч, в ньому не повинні міститися однакові елементи. Але і втратити атрибут в результаті неприпустимо. А це означає, що в такому випадку взагалі неможливо коректно виконати операцію декартова твори.
Аналогічні проблеми можуть виникати і у випадках інших двомісних операцій. Для вирішення проблем в число операцій реляційної алгебри вводиться операція перейменування. Її слід застосовувати в тому випадку, коли виникає конфлікт іменування атрибутів у відносинах-операнда однієї реляційної операції. Тоді до одного з операндів спочатку застосовується операція перейменування. а потім основна операція виконується вже без всяких проблем. Більш строго ми визначимо операцію перейменування в наступній лекції, а поки лише зауважимо, що результатом цієї операції є ставлення, що збігається в усьому зі ставленням-операндом, крім того, що ім'я зазначеного атрибута змінено на задане ім'я.
У подальшому викладі ми будемо припускати застосування операції перейменування у всіх конфліктних ситуаціях.
У цьому випадку все вірно?
(СЛУЖБОВЦІ JOIN ПРОЕКТИ WHERE (СЛУ_ІМЯ = ПРОЕКТ_РУК AND ПРО_ЗАРП> 18000.00)) PROJECT (СЛУ_ІМЯ, СЛУ_НОМ)
виконати еквісоедіненія відносин СЛУЖБОВЦІ і ПРОЕКТИ за умовою СЛУ_ІМЯ = ПРОЕКТ_РУК;
обмежити отримане відношення за умовою ПРО_ЗАРП> 18000.00;
спроектувати результат попередньої операції на атрибут СЛУ_ІМЯ, СЛУ_НОМ
Напевно ось так буде правильно, виходячи з попередніх лекцій даного курсу.
виконати еквісоедіненія відносин СЛУЖБОВЦІ і ПРОЕКТИ
обмежити отримане відношення за умовою (СЛУ_ІМЯ = ПРОЕКТ_РУК) AND (ПРО_ЗАРП> 18000.00)
спроектувати результат попередньої операції на атрибут СЛУ_ІМЯ, СЛУ_НОМ
Звідки в результаті операції СЛУЖАЩІЕ_В_ПРОЕКТЕ_1 TIMES ПРОЕКТИ в підсумковій Талице з'явилися дані з відносини СЛУЖАЩІЕ_В_ПРОЕКТЕ_2.