вважати, що атрибут 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, то ці значення кортежних змінних можуть входити в результуюче