Головна » Статті » Інформатика [ Додати статтю ]

Базисні засоби маніпулювання реляційними даними
Базисні засоби маніпулювання реляційними даними
У попередній лекції ми говорили про три складових реляційній моделі даних. Дві з них - структурну і цілісну складові - ми розглянули більш або менш детально, а маніпуляційної частині реляційної моделі даних присвячується ця лекція.
Як ми відмічали в попередній лекції, в маніпуляційній складовій визначаються два базових механізми маніпулювання реляційними даними - заснована на теорії множин реляційна алгебра і реляційне числення, що базується на математичній логіці (точніше, на численні предикатів першого порядку). У свою чергу, звичайно розглядаються два вигляду реляційного числення - числення доменів і числення предикатів.
Всі ці механізми володіють однією важливою властивістю: вони замкнені відносно поняття відношення. Це означає, що вираження реляційної алгебри і формули реляційного числення визначаються над відносинами реляційної БД і результатом обчислення також є відносини. У результаті будь-яке вираження або формула можуть інтерпретуватися як відносини, що дозволяє використати їх в інших виразах або формулах.
Як ми побачимо, алгебра і числення володіють великою виразною потужністю: дуже складні запити до бази даних можуть бути виражені за допомогою одного вираження реляційної алгебри або однієї формули реляційного числення. Саме з цієї причини саме ці механізми включені в реляційну модель даних. Конкретна мова маніпулювання реляційною БД називається реляційно повним, якщо будь-який запит, що виражається за допомогою одного вираження реляційної алгебри або однієї формули реляційного числення, може бути виражений за допомогою одного оператора цієї мови.
Відомо (і ми не будемо це доводити), що механізми реляційної алгебри і реляційного числення еквівалентні, тобто для будь-якого допустимого вираження реляційної алгебри можна побудувати еквівалентну (тобто виробляючу такий же результат) формулу реляційного числення і навпаки. Чому ж в реляційній моделі даних присутні обидва ці механізми?
Справа в тому, що вони розрізнюються рівнем процедурності. Вирази реляційної алгебри будуються на основі алгебраїчних операцій (високого рівня), і подібно тому, як інтерпретуються арифметичні і логічні вирази, вираження реляційної алгебри також має процедурну інтерпретацію. Іншими словами, запит, представлений на мові реляційної алгебри, може бути обчислений на основі обчислення елементарних алгебраїчних операцій з урахуванням їх старшинства і можливої наявності дужок. Для формули реляційного числення однозначна інтерпретація, взагалі кажучи, відсутній. Формула тільки встановлює умови, яким повинні задовольняти кортежі результуючого відношення. Тому мови реляційного числення є більш непроцедурними або декларативними.
Оскільки механізми реляційної алгебри і реляційного числення еквівалентні, то в конкретній ситуації для перевірки міри реляційності деякої мови БД можна користуватися будь-ким з цих механізмів.
Помітимо, що надто рідко алгебра або числення приймаються як повна основа якої-небудь мови БД. Звичайно (як, наприклад, у разі мови SQL) мова засновується на деякій суміші алгебраїчних і логічних конструкцій. Проте, знання алгебраїчних і логічних основ мов баз даних часто буває корисно на практиці.
У нашому викладі ми в основному слідуємо підходу Дейта, застосованому (хоч і не винайденому) ним в останньому виданні книги "Введення в системи баз даних". Для економії часу і місця ми не будемо вводити яких-небудь суворих синтаксичних конструкцій, а в основному обмежимося розглядом матеріалу на змістовному рівні.
5.1. Реляційна алгебра
Основна ідея реляційної алгебри полягає в тому, якщо відносини є множинами, то засоби маніпулювання відносинами можуть базуватися на традиційних теоретико-множинних операціях, доповнених деякими спеціальними операціями, специфічними для баз даних.
Існує багато підходів до визначення реляційної алгебри, які розрізнюються набором операцій і способами їх інтерпретації, але в принципі, більш або менш рівносильні. Ми опишемо трохи розширений початковий варіант алгебри, який був запропонований Коддом. У цьому варіанті набір основних алгебраїчних операцій складається з восьми операцій, які діляться на два класи - теоретико-множинні операції і спеціальні реляційні операції. До складу теоретико-множинних операцій входять операції:
об'єднання відносин;
перетину відносин;
взяття різниці відносин;
прямого вироблення відносин.
Спеціальні реляційні операції включають:
обмеження відношення;
проекцію відношення;
з'єднання відносин;
ділення відносин.
Крім того, до складу алгебри включається операція присвоєння, що дозволяє зберегти в базі даних результати обчислення алгебраїчних виразів, і операція перейменування атрибутів, що дає можливість коректно сформувати заголовок (схему) результуючого відношення.
5.1.1. Загальна інтерпретація реляційних операцій
Якщо не вдаватися в деяку тонкість, яку ми розглянемо в наступних підрозділах, то майже всі операції запропонованого вище набору володіють очевидною і простою інтерпретацією.
При виконанні операції об'єднання двох відносин проводиться відношення, що включає всі кортежі, що входять хоч би в одне з відносин-операндів.
Операція перетину двох відносин проводить відношення, що включає всі кортежі, що входять в обидва відношення-операнди.
Відношення, те, що є різницею двох відносин включає всі кортежі, що входять у відношення - перший операнд, такі, що жоден з них не входить у відношення, що є другим операндом.
При виконанні прямого вироблення двох відносин проводиться відношення, кортежі якого є конкатенацією (зчепленням) кортежів першого і другого операндів.
Результатом обмеження відношення по деякій умові є відношення, що включає кортежі відношення-операнда, що задовольняє цій умові.
При виконанні проекції відношення на заданий набір його атрибутів проводиться відношення, кортежі якого проводяться шляхом взяття відповідних значень з кортежів відношення-операнда.
При з'єднанні двох відносин по деякій умові утвориться результуюче відношення, кортежі якого є конкатенацією кортежів першого і другого відносин і задовольняють цій умові.
У операції реляційного ділення два операнди - бінарне і унарне відносини. Результуюче відношення складається з одноатрибутивних кортежів, що включають значення першого атрибута кортежів першого операнда таких, що безліч значень другого атрибута (при фіксованому значенні першого атрибута) співпадає з безліччю значень другого операнда.
Операція перейменування проводить відношення, тіло якого співпадає з тілом операнда, але імена атрибутів змінені.
Операція присвоєння дозволяє зберегти результат обчислення реляційного вираження в існуючому відношенні БД.
Оскільки результатом будь-якої реляційної операції (крім операції привласнення) є деяке відношення, можна утворювати реляційні вирази, в яких замість відношення-операнда деякої реляційної операції знаходиться вкладене реляційне вираження.
5.1.2. Замкненість реляційної алгебри і операція перейменування
Як ми говорили в попередній лекції, кожне відношення характеризується схемою (або заголовком) і набором кортежів (або тілом). Тому, якщо дійсно бажати мати алгебру, операції якій замкнені відносно поняття відношення, то кожна операція повинна проводити відношення в повному розумінні, тобто воно повинно володіти і тілом, і заголовком. Тільки в цьому випадку буде дійсно можливо будувати вкладені вирази.
Заголовок відношення являє собою безліч пар <імені-атрибута, імені-домена>. Якщо подивитися на загальний огляд реляційних операцій, приведений в попередньому підрозділі, то видно, що домени атрибутів результуючого відношення однозначно визначаються доменами відносин-операндів. Однак з іменами атрибутів результату не завжди все так просто.
Наприклад, уявимо собі, що у відносин-операндів операції прямого вироблення є однойменні атрибути з однаковими доменами. Яким був би заголовок результуючого відношення? Оскільки ця безліч, в ньому не повинні міститися однакові елементи. Але і втратити атрибут в результаті недопустимо. А це означає, що в цьому випадку взагалі неможливо коректно виконати операцію прямого твору.
Аналогічні проблеми можуть виникати і у разах інших двомісних операцій. Для їх дозволу до складу операцій реляційної алгебри вводиться операція перейменування. Її потрібно застосовувати в будь-якому випадку, коли виникає конфлікт іменування атрибутів у відносинах - операндах однієї реляційної операції. Тоді до одного з операндів спочатку застосовується операція перейменування, а потім основна операція виконується вже без всяких проблем.
У подальшому викладі ми будемо передбачати застосування операції перейменування у всіх конфліктних випадках.
5.1.3. Особливості теоретико-множинних операцій реляційної алгебри
Хоч в основі теоретико-множинної частини реляційної алгебри лежить класична теорія множин, відповідні операції реляційної алгебри володіють деякими особливостями.
Почнемо з операції об'єднання (все, що буде говоритися з приводу об'єднання, переноситься на операції перетину і взяття різниці). Значення операції об'єднання в реляційній алгебрі загалом залишається теоретико-множинним. Але якщо в теорії множин операція об'єднання передбачена для будь-яких двох множин-операндів, то у разі реляційної алгебри результатом операції об'єднання повинно бути відношення. Якщо допустити в реляційній алгебрі можливість теоретико-множинного об'єднання довільних двох відносин (з різними схемами), то, звичайно, результатом операції буде безліч, але безліч різнотипних кортежів, тобто не відношення. Якщо вийти з вимоги замкненість реляційної алгебри відносно поняття відношення, то така операція об'єднання є безглуздою.
Всі ці міркування приводять до появи поняття сумісності відносин по об'єднанню: два відношення сумісні по об'єднанню в тому і тільки в тому випадку, коли володіють однаковими заголовками. Більш точно, це означає, що в заголовках обох відносин міститься один і той же набір імен атрибутів, і однойменні атрибути визначені на одному і тому ж домені.
Якщо два відношення сумісні по об'єднанню, то при звичайному виконанні над ними операцій об'єднання, перетину і взяття різниці результатом операції є відносини з коректно певним заголовком, співпадаючим із заголовком кожного з відносин-операндів. Нагадаємо, що якщо два відношення "майже" сумісні по об'єднанню, тобто сумісні у всьому, крім імен атрибутів, то до виконання операції типу з'єднання ці відносини можна зробити повністю сумісними по об'єднанню шляхом застосування операції перейменування.
Помітимо, що включення до складу операцій реляційної алгебри трьох операцій об'єднання, перетину і взяття різниці є очевидно надмірним, оскільки відомо, що будь-хто з цих операцій виражається через дві інших. Проте, Кодд в свій час вирішив включити всі три операції, виходячи з інтуїтивних потреб потенційного користувача системи реляційної БД, далекого від математики.
Інші проблеми пов'язані з операцією взяття прямого вироблення двох відносин. У теорії множин прямий твір може бути отриманий для будь-яких двох множин, і елементами результуючої безлічі є пари, складені з елементів першої і другої множин. Оскільки відносини є множинами, то і для будь-яких двох відносин можливе отримання прямого твору. Але результат не буде відношенням! Елементами результату будуть бути не кортежі, а пари кортежів.
Тому в реляційній алгебрі використовується спеціалізована форма операції взяття прямого твору - розширене пряме вироблення відносин. При взятті розширеного прямого вироблення двох відносин елементом результуючого відношення є кортеж, що є конкатенацією (або злиттям) одного кортежу першого відношення і одного кортежу другого відношення.
Але тепер виникає друге питання - як отримати коректно сформований заголовок відношення-результату? Очевидно, що проблемою може бути іменування атрибутів результуючого відношення, якщо відносини-операнди володіють однойменними атрибутами.
Ці міркування приводять до появи поняття сумісності по взяттю розширеного прямого твору. Два відношення сумісні по взяттю прямого виготовлення в тому і тільки в тому випадку, якщо множини імен атрибутів цих відносин не перетинаються. Будь-які два відношення можуть бути зроблені сумісними по взяттю прямого твору шляхом застосування операції перейменування до одного з цих відносин.
Потрібно помітити, що операція взяття прямого твору не є дуже осмисленою на практиці. По-перше, потужність її результату дуже велика навіть при допустимих потужностях операндів, а по-друге, результат операції не більше ніж інформативний, ніж взяті в сукупності операнди. Як ми побачимо трохи нижче, основне значення включення операції розширеного прямого призначення складом реляційної алгебри полягає в тому, що на її основі визначається дійсно корисна операція з'єднання.
З приводу теоретико-множинних операцій реляційної алгебри потрібно ще помітити, що всі чотири операції є асоціативними. Т. е., якщо визначити через OP будь-кого з чотирьох операцій, то (А OP В) OP З = А (В OP З), і отже, без введення двозначності можна писати А OP В OP З (А, В і З - відносини, що володіють властивостями, необхідними для коректного виконання відповідної операції). Всі операції, крім взяття різниці, є комутативний, тобто А OP В = В OP А.
5.1.4. Спеціальні реляційні операції
У цьому підрозділі ми трохи детальніше розглянемо спеціальні реляційні операції реляційної алгебри: обмеження, проекція, з'єднання і ділення.
Операція обмеження
Операція обмеження вимагає наявності двох операндів: відношення, що обмежується і простої умови обмеження. Проста умова обмеження може мати або вигляд (а comp-op b), де а і b - імена атрибутів відношення, що обмежується, для яких передбачена операція порівняння comp-op, або вигляд (а comp-op const), де а - ім'я атрибута відношення, що обмежується, а const - літерально задана константа.
Внаслідок виконання операції обмеження проводиться відношення, заголовок якого співпадає із заголовком відношення-операнда, а в тіло входять ті кортежі відношення-операнда, для яких значенням умови обмеження є true.
Нехай UNION означає операцію об'єднання, INTERSECT - операцію перетину, а MINUS - операцію взяття різниці. Для позначення операції обмеження будемо використати конструкцію А WHERE comp, де А - відношення, що обмежується, а comp - проста умова порівняння. Нехай comp1 і comp2 - дві простих умови обмеження. Тоді по визначенню:
А WHERE comp1 AND comp2 означає те ж саме, що і (А WHERE comp1) INTERSECT (А WHERE comp2)
А WHERE comp1 OR comp2 означає те ж саме, що і (А WHERE comp1) UNION (А WHERE comp2)
А WHERE NOT comp1 означає те ж саме, що і А MINUS (А WHERE comp1)
З використанням цих визначень можна використати операції обмеження, в яких умовою обмеження є довільне булеве вираження, складене з простих умов з використанням логічних зв'язок AND, OR, NOT і дужок.
На інтуїтивному рівні операцію обмеження краще усього представляти як взяття деякої "горизонтальної" вирізки з відношення-операнда.
Операція взяття проекції
Операція взяття проекції також вимагає наявності двох операндів - відношення А, що проектується і списку імен атрибутів, що входять в заголовок відношення А.
Результатом проекції відношення А по списку атрибутів a1, a2,..., an є відношення, із заголовком, що визначається безліччю атрибутів a1, a2,..., an, і з тілом, що складається з кортежів вигляду <a1:v1, a2:v2,..., an:vn> таких, що у відношенні А є кортеж, атрибут a1 якого має значення v1, атрибут a2 має значення v2,. .., атрибут an має значення vn. Тим самим, при виконанні операції проекції виділяється "вертикальна" вирізка відношення-операнда з природним знищенням потенційно виникаючих кортежів-дублікатів.
Операція з'єднання відносин
Загальна операція з'єднання (звана також з'єднанням по умові) вимагає наявності двох операндів - відносин, що з'єднуються і третього операнда - простої умови. Нехай сполучаються відносини А і B. Як і у разі операції обмеження, умова з'єднання comp має вигляд або (а comp-op b), або (а comp-op const), де а і b - імена атрибутів відносин А і В, const - літерально задана константа, а comp-op - допустима в даному контексті операція порівняння.
Тоді по визначенню результатом операції порівняння є відношення, що отримується шляхом виконання операції обмеження за умовою comp прямого вироблення відносин А і В.
Якщо уважно осмислити це визначення, то стане ясно, що в загальному випадку застосування умови з'єднання істотно зменшить потужність результату проміжного прямого вироблення відносин-операндів тільки в тому випадку, коли умова з'єднання має вигляд (а comp-op b), де а і b - імена атрибутів різних відносин-операндів. Тому на практиці звичайно вважають реальними операціями з'єднання саме ті операції, які засновуються на умові з'єднання приведеного вигляду.
Хоч операція з'єднання в нашій інтерпретації не є примітивною (оскільки вона визначається з використанням прямого твору і проекції), внаслідок особливої практичної важливості вона включається в базовий набір операцій реляційної алгебри. Помітимо також, що в практичних реалізаціях з'єднання звичайно не виконується саме як обмеження прямого твору. Є більш ефективні алгоритми, що гарантують отримання такого ж результату.
Є важливий окремий випадок з'єднання - еквіз'єднання і простої, але важливе розширення операції еквіз'єднання - природне з'єднання. Операція з'єднання називається операцією еквіз’єднання, якщо умова з'єднання має вигляд (а = b), де а і b - атрибути різних операндів з'єднання. Цей випадок важливий тому, що (a) він часто зустрічається на практиці, і (b) для нього існують ефективні алгоритми реалізації.
Операція природного з'єднання застосовується до пари відносин А і В, що володіють (можливо складовим) загальним атрибутом з (тобто атрибутом з одним і тим же ім'ям і визначеним на одному і тому ж домені). Нехай a b означає об'єднання заголовків відносин А і B. Тоді природне з'єднання А і В - це спроектований на a b результат еквіз’єднання А і В по А/з і BBC. Якщо пригадати введене нами в кінці попереднього глави визначення зовнішнього ключа відношення, то повинне стати зрозуміло, що основне значення операції природного з'єднання - можливість відновлення складної суті, декомпазованою внаслідок вимоги першої нормальної форми. Операція природного з'єднання не включається прямо до складу набору операцій реляційної алгебри, але вона має дуже важливе практичне значення.
Операція ділення відносин
Ця операція найменше очевидна з всіх операцій реляційної алгебри і тому потребує більш докладного пояснення. Нехай задані два відношення - А із заголовком {a1, a2,. .., an, b1, b2,..., bm} і В із заголовком {b1, b2,..., bm}. Будемо вважати, що атрибут bi відношення А і атрибут bi відношення В не тільки володіють одним і тим же ім'ям, але і визначені на одному і тому ж домені. Назвемо безліч атрибутів {aj} складовим атрибутом a, а безліч атрибутів {bj} - складовим атрибутом b. Після цього будемо говорити про реляційне ділення бінарного відношення А(a, b) на унарне відношення В(b).
Результатом ділення А на В є унарне відношення З(a), що складається з кортежів v таких, що у відношенні А є кортежі <v, w> такі, що безліч значень {w} включає безліч значень атрибута b у відношенні В.
Передбачимо, що в базі даних співробітників підтримуються два відношення: СПІВРОБІТНИКИ ( ІМ'Я, ВІД_НОМЕР ) і ІМЕНА ( ІМ'Я ), причому унарне відношення ІМЕНА містить всі прізвища, якими володіють співробітники організації. Тоді після виконання операції реляційного ділення відношення СПІВРОБІТНИКИ на відношення ІМЕНА буде отримано унарне відношення, що містить номери відділів, співробітники яких володіють всіма можливими в цій організації іменами.
5.2. Реляційне числення
Передбачимо, що ми працюємо з базою даних, що володіє схемою СПІВРОБІТНИКИ (СПІВР_НОМ, СПІВР_ІМ'Я, СПІВР_ЗАРП, ВІД_НОМ) і ВІДДІЛИ (ВІД_НОМ, ВІД_КІЛ, ВІД_НАЧ), і хочемо дізнатися імена і номери співробітників, що є начальниками відділів з кількістю співробітників більше 50.
Якби для формулювання такого запиту використовувалася реляційна алгебра, то ми отримали б алгебраїчне вираження, яке читалося б, наприклад, таким чином:
виконати з'єднання відносин СПІВРОБІТНИКИ і ВІДДІЛИ по умові СПІВР_НОМ = ВІД_НАЧ;
обмежити отримане відношення по умові ВІД_КІЛ > 50;
спроектувати результат попередньої операції на атрибут СПІВР_ІМ'Я, СПІВР_НОМ.
Ми чітко сформулювали послідовність кроків виконання запиту, кожний з яких відповідає одній реляційній операції. Якщо ж сформулювати той же запит з використанням реляційного числення, якому присвячується цей розділ, то ми отримали б формулу, яку можна було б прочитати, наприклад, таким чином: Видати СПІВР_ІМ'Я і СПІВР_НОМ для співробітників таких, що існує відділ з таким же значенням ВІД_НАЧ і значенням ВІД_КІЛ великим 50.
У другому формулюванні ми указали лише характеристики результуючого відношення, але нічого не сказали про спосіб його формування. У цьому випадку система повинна сама вирішити, які операції і в якому порядку треба виконати над відносинами СПІВРОБІТНИКИ і ВІДДІЛИ. Звичайно кажуть, що алгебраїчне формулювання є процедурним, тобто що задає правила виконання запиту, а логічна - описової (або декларативної), оскільки вона усього лише описує властивості бажаного результату. Як ми вказували на початку лекції, насправді ці два механізми еквівалентні і існують не дуже складні правила перетворення одного формалізму в іншій.
5.2.1. Кортежні змінні і правильно побудовані формули
Реляційне числення є прикладною гілкою формального механізму числення предикатів першого порядку. Базисними поняттями числення є поняття змінною з певною для неї областю допустимих значень і поняття правильно побудованої формули, що спирається на змінні, предикати і квантори.
У залежності від того, що є областю визначення змінною, розрізнюються числення кортежів і числення доменів. У численні кортежів областями визначення змінних є відносини бази даних, тобто допустимим значенням кожною змінною є кортеж деякого відношення. У численні доменів областями визначення змінних є домени, на яких визначені атрибути відносин бази даних, тобто допустимим значенням кожною змінною є значення деякого домену. Ми розглянемо більш детально числення кортежів, а в кінці лекції коротко опишемо особливості числення доменів.
На відміну від розділу, присвяченого реляційній алгебрі, в цьому розділі нам не вдасться уникнути використання деякого конкретного синтаксису, який ми, проте, формально визначати не будемо. Необхідні синтаксичні конструкції будуть вводитися по мірі необхідності. У сукупності, синтаксис, що використовується близький, але не повністю співпадає з синтаксисом мови баз даних QUEL, який довгий час був основною мовою СУБД Ingres.
Для визначення кортежної змінною використовується оператор RANGE. Наприклад, для того, щоб визначити змінну СПІВРОБІТНИК, областю визначення якої є відношення СПІВРОБІТНИКИ, треба вжити конструкцію
RANGE СПІВРОБІТНИК IS СПІВРОБІТНИКИ
Як ми вже говорили, з цього визначення слідує, що в будь-який момент часу змінна СПІВРОБІТНИК представляє деякий кортеж відношення СПІВРОБІТНИКИ. При використанні кортежних змінних в формулах можна посилатися на значення атрибута змінною (це аналогічне тому, як, наприклад, при програмуванні на мові Сі можна послатися на значення поля структурною змінною). Наприклад, для того, щоб послатися на значення атрибута СПІВР_ІМ'Я змінною СПІВРОБІТНИК, треба вжити конструкцію СПІВРОБІТНИКК.СПІВР_ІМ'Я.
Правильно побудовані формули (WFF - Well-Formed Formula) служать для вираження умов, що накладаються на кортежні змінні. Основою WFF є прості порівняння (comparison), що являють собою операції порівняння скалярних значень (значень атрибутів змінних або літерально заданих констант). Наприклад, конструкція "СПІВРОБІТНИК.СПІВР_НОМ = 140" є простим порівнянням. По визначенню, просте порівняння є WFF, а WFF, взята в круглі дужки, є простим порівнянням.
Більш складні варіанти WFF будуються за допомогою логічних зв'язок NOT, AND, OR і IF. .. THEN. Так, якщо form - WFF, а comp - просте порівняння, то NOT form, comp AND form, comp OR form і IF comp THEN form є WFF.
Нарешті, допускається побудова WFF з допомогою кванторів. Якщо form - це WFF, в якій бере участь змінна var, то конструкції EXISTS var (form) і FORALL var (form) представляють wff.
Змінні, що входять в WFF, можуть бути вільними або пов'язаними. Всі змінні, що входять в WFF, при побудові якої не використовувалися квантори, є вільними. Фактично, це означає, що якщо для якогось набору значень вільних кортежних змінних при обчисленні WFF отримане значення true, то ці значення кортежних змінних можуть входити в результуюче відношення. Якщо ж ім'я змінної використано відразу після квантора при побудові WFF вигляду EXISTS var (form) або FORALL var (form), то в цієї WFF і у всіх WFF, побудованих з її участю, var - це пов'язана змінна. Це означає, що така змінна не видна за межами мінімальної WFF, що зв'язала цю змінну. При обчисленні значення такий WFF використовується не одне значення пов'язаною змінною, а вся її область визначення.
Нехай СПІВР1 і СПІВР2 - дві кортежні змінні, певні на відношенні СПІВРОБІТНИКИ. Тоді, WFF EXISTS СПІВР2 (СПІВР1.СПІВР_ЗАРП > СПІВР2.СПІВР_ЗАРП) для поточного кортежу змінної СПІВР1 приймає значення true в тому і тільки в тому випадку, якщо у всьому відношенні СПІВРОБІТНИКИ знайдеться кортеж (пов'язаний із змінної СПІВР2) такий, що значення його атрибута СПІВР_ЗАРП задовольняє внутрішній умові порівняння. WFF FORALL СПІВР2 (СПІВР1.СПІВР_ЗАРП > СПІВР2.СПІВР_ЗАРП) для поточного кортежу змінної СПІВР1 приймає значення true в тому і тільки в тому випадку, якщо для всіх кортежів відношення СПІВРОБІТНИКИ (пов'язаних із змінної СПІВР2) значення атрибута СПІВР_ЗАРП задовольняють умові порівняння.
Насправді, правильніше говорити не про вільні і пов'язані змінних, а про вільні і зв'язаних входженнях змінних. Легко бачити, що якщо змінна var є пов'язаною в WFF form, то у всіх WFF, що включають дану, може використовуватися ім'я змінної var, яка може бути вільною або пов'язаною, але в будь-якому випадку не має ніякого відношення до входження змінної var в WFF form. Ось приклад:
EXISTS СПІВР2 (СПІВР1.СПІВР_ВІД_НОМ = СПІВР2.СПІВР_ВІД_НОМ) AND
FORALL СПІВР2 (СПІВР1.СПІВР_ЗАРП > СПІВР2.СПІВР_ЗАРП)
Тут ми маємо два зв’язаних входження змінної СПІВР2 з абсолютно різним значенням.
5.2.2. Цільові списки і вирази реляційного числення
Отже, WFF забезпечують засоби формулювання умови вибірки з відносин БД. Щоб можна було використати числення для реальної роботи з БД, потрібний ще один компонент, який визначає набір і імена стовпців результуючого відношення. Цей компонент називається цільовим списком (target_list).
Цільовий список будується з цільових елементів, кожний з яких може мати наступний вигляд:
var.attr, де var - ім'я вільної змінної відповідної WFF, а attr - ім'я атрибута відношення, на якому визначена змінна var;
var, що еквівалентно наявності підсписку var.attr1, var.attr2,. .., var.attrn, де attr1, attr2,. .., attrn включає імена всіх атрибутів визначального відношення;
new_name = var.attr; new_name - нове ім'я відповідного атрибута результуючого відношення.
Останній варіант потрібно в тих випадках, коли в WFF використовуються декілька вільних змінних з однаковою областю визначення.
Вираженням реляційного числення кортежів називається конструкція вигляду target_list WHERE wff. Значенням вираження є відношення, тіло якого визначається WFF, а набір атрибутів і їх імена - цільовим списком.
5.2.3. Реляційне числення доменів
У численні доменів областю визначення змінних є не відносини, а домени. Стосовно до бази даних СПІВРОБІТНИКИ-ВІДДІЛИ можна говорити, наприклад, про доменні змінних ІМ'Я (значення - допустимі імена) або НОСОТР (значення - допустимі номери співробітників).
Основною формальною відмінністю числення доменів від числення кортежів є наявність додаткового набору предикатів, що дозволяють виражати так звані умови членства. Якщо R - це n-арне відносини з атрибутами a1, a2,..., an, то умова членства має вигляд
R (ai1:vi1, ai2:vi2,..., aim:vim) (m <= n),
де vij - це або константа, що літерально задається, або ім'я кортежної змінної. Умова членства приймає значення true в тому і тільки в тому випадку, якщо у відношенні R існує кортеж, що містить вказані значення вказаних атрибутів. Якщо vij - константа, то на атрибут aij задається жорстка умова, що не залежить від поточних значень доменних змінних; якщо ж vij - ім'я доменної змінної, то умова членства може приймати різні значення при різних значеннях цієї змінної.
У всіх інших відносинах формули і вираження обчислення доменів виглядають схожими на формули і вирази числення кортежів. Зокрема, звичайно, розрізнюються вільні і пов'язані входження доменних змінних.
Для прикладу сформулюємо з використанням числення доменів запит "Видати номери і імена співробітників, що не одержують мінімальну заробітну плату" (будемо вважати для простоти, що ми визначили доменні змінні, імена яких співпадають з іменами атрибутів відношення СПІВРОБІТНИКИ, а у випадку, коли потрібно декілька доменних змінних, визначених на одному домені, ми будемо додавати в кінці імені цифри):
СПІВР_НОМ, СПІВР_ІМ’Я WHERE EXISTS СПІВР_ЗАРП1
(СПІВРОБІТНИКИ (СПІВР_ЗАРП1) AND
СПІВРОБІТНИКИ (СПІВР_НОМ, СПІВР_ІМ’Я, СПІВР_ЗАРП) AND
СПІВР_ЗАРП > СПІВР_ЗАРП1)
Реляційне числення доменів є основою більшості мов запитів, заснованих на використанні форм. Зокрема, на цьому численні базувалася відома мова Query-by-Example, яка була першою (і найбільш цікавим) мовою в сімействі мов, заснованих на табличних формах.
Категорія: Інформатика | Додав: КрАсАв4іК (30.12.2012)
Переглядів: 834 | Рейтинг: 0.0/0
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]