- •1. Маніпулювання реляційними даними
- •2. Основи реляційної алгебри
- •2.1. Основна концепція реляційної алгебри
- •2.2. Загальна інтерпретація реляційних операцій. Операції над кортежами і відношеннями
- •2.4. Основні операції реляційної алгебри з обробки відношень
- •2.5. Особливості теоретико-множинних операцій реляційної алгебри (сумісність, перейменування). Теоретико-множинні оператори
- •2.6. Спеціальні реляційні операції: операція взяття вибірки, проекції, операції об’єднання та ділення відношень
- •3. Основи реляційного числення
3. Основи реляційного числення
У реляційній моделі визначаються два базових механізми маніпулювання даними:
заснована на теорії множин реляційна алгебра
засноване на математичній логіці реляційне числення.
Так як і вирази реляційної алгебри формули реляційного числення визначаються над відносинами реляційних баз даних, і результатом обчислення також є відношення. Ці механізми маніпулювання даними розрізняються рівнем процедурності:
запит, представлений мовою реляційної алгебри, може бути обчислений на основі обчислення елементарних алгебраїчниих операцій з урахуванням їх старшинства і можливих дужок
формула реляційного числення тільки встановлює умови, яким повинні задовольняти кортежі результуючого відношення. Тому мови реляційного числення є більш непроцедурними чи декларативними.
Припустимо, що ми працюємо з базою даних, що має схему СПІВРОБІТНИКИ (СПІВ_НОМ, СПІВ_ІМ'Я, СПІВ_ЗАРП, ВІД_НОМ) і ВІДДІЛИ (ВІД_НОМ, ВІД_КІЛ, ВІД_НАЧ), і хочемо дізнатися імена і номери співробітників, що є начальниками відділів з кількістю співробітників більше 10.
Іншими словами, дані двоє відношень:
СПІВРОБІТНИКИ (СПІВ_НОМЕР, СПІВ_ІМ'Я, СПІВ_ЗАРПЛ, ВІД_НОМЕР) ВІДДІЛИ(ВІД_НОМЕР, ВІД_КІЛ, ВІД_НАЧ)
Ми хочемо довідатися імена і номери співробітників, що є начальниками відділів з кількістю працівників більш 10.
Виконання цього запиту засобами реляційної алгебри розпадається на чітко визначену послідовність кроків:
(1).виконати з'єднання відношень СПІВРОБІТНИКИ і ВІДДІЛИ за умовою СПІВ_НОМ = ВІДДІЛ_НАЧ.
З1 = СПІВРОБІТНИКИ [СПІВ_НОМ = ВІД_НАЧ] ВІДДІЛИ
(2).з отриманого відношення зробити вибірку за умовою ВІД_КІЛ > 10
З2 = З1 [ВІД_КІЛ > 10].
(3).спроецировать результати попередньої операції на атрибути СПІВ_ІМ'Я, СПІВ_НОМЕР
З3 = З2 [СПІВ_ІМ'Я, СПІВ_НОМЕР]
Помітимо, що порядок виконання кроків може вплинути на ефективність виконання запиту. Так, час виконання приведеного вище запиту можна скоротити, якщо поміняти місцями етапи (1) і (2). У цьому випадку спочатку з відношення СПІВРОБІТНИКИ буде зроблена вибірка всіх кортежів зі значенням атрибута ВІДДІЛ_КІЛ > 10, а потім виконане з'єднання результуючого відношення з відношенням ВІДДІЛИ. Машинний час заощаджується за рахунок того, що в операції з'єднання беруть участь менше відношень.
Якби для формулювання такого запиту використовувалася реляційна алгебра, то ми одержали б алгебраїчний вираз, що читався б, наприклад, у такий спосіб:
виконати з'єднання відношень СПІВРОБІТНИКИ і ВІДДІЛИ за умовою СПІВ_НОМ = ВІД_НАЧ;
обмежити отримане відношення за умовою ВІД_КІЛ > 10;
спроектувати результат попередньої операції на атрибут СПІВ_ІМ'Я, СПІВ_НОМ.
Ми чітко сформулювали послідовність кроків виконання запиту, кожний з який відповідає однієї реляційної операції.
Мовою реляційного числення даний запит може бути записаний як:
Видати СПІВ_ІМ'Я і СПІВ_НОМ для СПІВРОБІТНИКИ таких, що існує ВІДДІЛ з таким же, що і СПІВ_НОМ значенням ВІД_НАЧ і значенням ВІД_КІЛ більшим 10.
Іншими словами, якщо сформулювати той же запит з використанням реляційного числення, якому присвячується цей розділ, то ми одержали б формулу, котру можна було б прочитати, наприклад, у такий спосіб: Видати СПІВ_ІМ'Я і СПІВ_НОМ для співробітників таких, що існує відділ з таким же значенням ВІД_НАЧ і значенням ВІД_КІЛ більшим 10.
В другому формулюванні ми вказали лише характеристики результуючого відношення, але нічого не сказали про спосіб його формування. У цьому випадку система (СУБД) повинна сама вирішити, які операції й у якому порядку потрібно виконати над відносинами СПІВРОБІТНИКИ і ВІДДІЛИ. Задача оптимізації виконання запиту в цьому випадку також лягає на СУБД.
Звичайно говорять, що алгебраїчне формулювання є процедурним, тобто задає правила виконання запиту, а логічне - описовим (чи декларативним), оскільки воно усього лише описує властивості бажаного результату. Як ми вказували на початку лекції, насправді ці два механізми еквівалентні й існують не дуже складні правила перетворення одного формалізму в іншій.
