Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема3_ДСН.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
53 Кб
Скачать
☆

3.5.2 Реляційне числення

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

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

Для визначення змінної, кортежу, використовується оператор 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 з абсолютно різним сенсом.

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, а набір атрибутів і їх імена - цільовим списком.

У численні доменів областю визначення змінних є не відносини, а домени. Стосовно бази даних СПІВРОБІТНИКИ-ВІДДІЛИ можна говорити, наприклад, про доменні змінні ІМ'Я (значення - допустимі імена) або НОСОТР (значення - допустимі номери співробітників).

Основною формальною відмінністю числення доменів від числення кортежів є наявність додаткового набору предикатів, що дозволяють виражати так звані умови членства. Якщо 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, яка була першою (і найцікавішим) мовою в сімействі мов, заснованих на табличних формах.