Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
bd.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.91 Mб
Скачать

Кортежні змінні та правильно побудовані формули

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]