Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 3 Реляційні БД.doc
Скачиваний:
24
Добавлен:
19.11.2019
Размер:
2.52 Mб
Скачать

3.4.2. Реляційне числення

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

Реляційне числення ніяк не зв'язане з диференціальним і інтегральним численнями в математиці, а його назва відбулася від частини символьної логіки, що називається численням предикатів. У контексті баз даних воно існує в двох формах: у формі запропонованого Коддом реляційного числення кортежів і у формі запропонованого Лакруа і Пиро реляційного числення доменів. Тут ми не даємо формального визначення реляційного числення, а приводимо лише короткий його огляд. Більш докладний розгляд цих питань зацікавлений читач зможе знайти в роботах Ульмана (Ullman, 1988).

У логіці першого порядку чи теорії числення предикатів під предикатом мається на увазі істиносна функція з аргументами. При підстановці замість аргументів значень функція стає виразом, називаним судженням, що може бути істинним або неправдивим. Наприклад, пропозиції "Джон Уайт є співробітником даної організації" і "зарплата Джона Уайта вище, ніж у Энн Бич" є судженнями, оскільки можна визначити їх істинність чи непрадивість. У першому Випадку функція "є співробітником даної організації" має один аргумент ("Джон Уайт"), а в другому випадку функція. "зарплата вище" має два аргументи ("Джон Уайт" і "Энн Бич").

Якщо предикат містить змінну, наприклад у виді "х є співробітником цієї організації", то в цієї змінній повинна бути відповідна область визначення. При підстановці замість змінної х одних значень з її області визначення дане судження може виявитися істиною, а при підстановці інших - неправдою. Наприклад, якщо областю визначення є всі люди і ми підставимо замість змінної х значення "Джон Уайт", то судження "Джон Уайт є співробітником даної організації" буде істинним. Якщо ж замість змінної х підставити ім'я іншої людини, що не є співробітником даної організації, то судження буде неправдивим.

Якщо Р - предикат, то множина усіх значень змінної х, при яких судження Р стає істинним, можна символічно записати в такий спосіб:

{x | P(x)}

Предикати можуть з'єднуватися за допомогою логічних операторів (AND), (OR) і (NOT) з утворенням складених предикатів.

Реляційне числення кортежів

У реляційному численні кортежів завдання полягає в перебуванні таких кортежів, для яких предикат є істинним. Це числення засноване на змінних кортежу. Змінними кортежу є такі змінні, областю визначення яких є зазначене відношення - тобто змінні, для яких припустимими значеннями можуть бути тільки кортежі даного відношення. (Поняття "область визначення" у даному випадку відноситься не до використовуваного діапазону значень, а до домену, на якому визначені ці значення). Наприклад, для указівки відношення Staff як область визначення змінної кортежу S використовується наступна форма запису:

RANGE OF S IS Staff

Крім того, запит "знайти множину усіх кортежів S, для яких P(S) є істинним" можна записати в такий спосіб:

{S | P(S)}

Тут предикат Р називається формулою (у математичній логіці, правильно побудованою формулою - well-formed formula, wff). Наприклад, запит "вибрати атрибути Sno, FName, LName, Address, Tel_No, Position, Sex, DOB, Salary, MIN і no для всіх співробітників, що одержують зарплату більше 10 000 фунтів стерлінгів" можна записати в такий спосіб:

RANGE OF S IS Staff

{S | S.salary > 10000}

Тут вираз S.salary означає значення атрибута Salary для кортежу S. Для вибірки одного визначеного атрибута (наприклад, Salary), можна сформулювати цей запит інакше:

RANGE OF S IS Staff

{S.salary | S.salary >10000}

Для вказівки кількості екземплярів, до яких повинний бути застосований предикат, у формулах можуть використовуватися два типи кванторів. Квантор існування ( ), чи так називаний символ "існує", використовується у формулі, що повинна бути істиною хоча б для одного випадку, наприклад:

RANGE OF У IS Branch

У (В.Bno = S.Bno B.City = 'London')

Ця формула означає, що у відношенні Branch існує кортеж, що має таке ж значення атрибута no, що і значення атрибута no в поточному кортежі S з відношення Staff, і атрибут City з кортежу В має значення 'London'. Квантор спільності ( ), чи так званий символ "для всіх", використовується у виразах, що відносяться до всіх екземплярів, наприклад:

B (В.City -= 'Paris')

Ця формула означає, що у всіх кортежах відношення Branch значення атрибута City не дорівнює 'Paris'. Якщо правила еквівалентності застосувати у відношенні логічних операцій, то її можна переписати в такий спосіб:

- У (В.City "'Paris')

У такому виді вона означає, що в Парижеві відділень компанії немає. Змінні кортежу називаються вільними змінними, якщо вони не кваліфікуються чи кванторами , у противному випадку вони називаються зв'язаними змінними. Аналогічно тому, як не всі можливі послідовності букв алфавіту утворять правильно побудовані слова, так і в реляційному численні не кожна послідовність формул є припустимою. Припустимими формулами можуть бути тільки недвозначні і небезглузді послідовності. Формула (чи правильно побудована формула) у численні предикатів визначається наступними правилами.

Якщо Р є n-арною формулою (предикатом з n аргументами), а t1, t2,…tn це константи чи змінні, то вираз P(t1, t2,…tn) є правильно побудованою формулою.

Якщо t1 і t2 є константами чи змінними з одного домену, а θ являє собою один з операторів порівняння (<, <=, >, >=, = чи -=), то вираз t1 θ t2 є правильно побудованою формулою.

Якщо вираз F1 і F2 є формулами, то їх кон'юнкція позначається як F1 F2 диз'юнкція - F1 F2 , а заперечення - як - F1

Якщо вираз F1 є формулою з вільною змінною X, то вираз F(X) і F(X) також є формулами.

Приклад 3.11 Реляційне числення кортежів

Створіть список усіх менеджерів, зарплата яких перевищує 25000 фунтів стерлінгів.

RANGE OF S IS Staff

(S.fname, S.lname | S.Position = ‘Manager’ And S.Salary > 25000)

Створіть список усіх співробітників, що відповідають за роботу з об'єктами нерухомості в Глазго

RANGE OF S IS Staff

RANGE OF P IS Property_for_Rent

{S | P (P.Sno = S.Sno and P.City = ‘Galsgow’) }

Атрибут Sno у відношенні Property_for_Rent містить номер того співробітника, що відповідає за роботу з даним об'єктом нерухомості. Цей запит можна сформулювати інакше: "Для всіх співробітників, дані про які потрібно привести в списку, у відношенні Property_for_Rent маються кортежі, що відповідають цим співробітникам причому значення атрибута City у кожнім такому кортежі дорівнює 'Glasgow'

Зверніть увагу, що в такім формулюванні запиту немає ніякої вказівки стратегії виконання запиту - СКБД надається воля вибору операцій для виконання даного завдання, а також порядку виконання цих операцій. Еквівалентне формулювання цього запиту в реляційній алгебрі буде виглядати так: "Вибрати такі кортежі відношення Property_for_Rent, у яких значення атрибута City дорівнює 'Glasgow' і виконати їх об'єднання з відношенням Staff. Як бачите, тут порядок виконання операцій задається неявно, але цілком однозначно:

Створіть список усіх співробітників, що виданий момент не працюють з об'єктами нерухомості.

RANGE OF S IS Staff

RANGE OF P IS Property_for_Rent

{S.fname, S.lname | ~ ( P (S.Sno = S.Sno))}

Використовуючи правила еквівалентності логічних операцій ці вирази можна переписати так:

{S.fname, S.lname | ( P(~(S.Sno = S.Sno))}

Створіть список усіх клієнтів, що оглядали об'єкти нерухомості в місті Глазго, із указівкою їх імен і коментарів, зроблених з приводу проведеного огляду.

RANGE OF S IS Staff

RANGE OF P IS Property_for_Rent

{S.fname, S.lname | ~ ( P (S.Sno = S.Sno))}

Перш ніж завершити цей розділ відзначимо, що вирази реляційного числення можуть генерувати нескінченну послідовність кортежів. Ми уникли виникнення цієї проблеми завдяки використанню змінній області визначення, що задаються за допомогою оператора RANGE. Деякі розроблювачі замість використання цього оператора воліють явно вказувати область визначення усередині формули. У такому випадку можна задати нескінченну множина кортежів, наприклад, у такий спосіб:

{S |~ (S є Staff)}

Цей вираз означає набір кортежів, що не входять у відношення Staff. Вираз подібного типу називаються небезпечними. Щоб уникнути їх виникнення, варто додати обмеження, що вимагає, щоб усі результуючі значення входили в область визначення формули. Наприклад, областю визначення приведеної вище формули є множина усіх значень, що представлені у відношенні Staff. Більш докладну інформацію з цього питання зацікавлений читач знайде в роботі Ульмана (Ullman, 1988).