
- •Лекція 3. Реляційна модель бази даних
- •3. Вступ
- •3.1. Короткий огляд історії реляційної моделі
- •Домен - це набір припустимих значень для одного чи декількох атрибутів.
- •Кортеж - це рядок відношень.
- •Ступінь - ступінь відношення визначається кількістю атрибутів, що вона містить.
- •Кардинальність - це кількість кортежів, що містить відношення.
- •Реляційна база даних - Набір нормалізованих відношень.
- •Альтернативна термінологія
- •3.2.2. Математичні відношення
- •3.2.3. Відношення в базі даних
- •Реляційна схема - ім'я відношення, за яким випливає множина пар імен атрибутів і доменів.
- •3.2.4. Властивості відношень
- •3.2.5. Реляційні ключі
- •Суперключ (superkey) - Атрибут чи множина атрибутів, що єдиним образом ідентифікує кортеж даного відношення.
- •Потенційний ключ - суперключ, що не містить підмножини, що також є суперключем даного відношення.
- •Первинний ключ - Це потенційний ключ, що обраний для унікальної ідентифікації кортежів усередині відношення.
- •Зовнішній ключ - це атрибут чи множина атрибутів усередині відношення, що відповідає потенційному ключу будь якого (може того ж самого) відношення.
- •3.2.6. Представлення схем у реляційній базі даних
- •3.3. Реляційна цілісність
- •3.3.1. Визначник null Визначник null вказує, що значення атрибуту в даний момент невідомо чи неприйнятне для цього кортежу.
- •3.3.2. Цілісність сутностей
- •Цілісність сутностей - у базовому відношенні жоден атрибут, первинного ключа не може містити відсутніх значень, що позначаються визначником null.
- •3.3.3. Посилальна цілісність
- •3.3.4. Корпоративні обмеження цілісності Корпоративні обмеження цілісності - Додаткові правила підтримки цілісності даних, обумовлені користувачами чи адміністраторами бази даних.
- •3.4. Реляційні мови
- •3.4.1. Реляційна алгебра
- •Вибірка (чи обмеження)
- •Проекція
- •Декартовий добуток
- •Об'єднання
- •Різниця
- •Операції з'єднання
- •Тета-з'єднання (θ - join)
- •Природне з'єднання
- •Зовнішнє з'єднання
- •Напівз'єднання
- •Перетинання
- •Розподіл
- •3.4.2. Реляційне числення
- •Реляційне числення кортежів
- •Реляційне числення доменів
- •3.4.3. Інші мови
- •3.5. Представлення
- •3.5.1. Термінологія
- •Базове відношення - пойменоване відношення, що відповідає сутності в концептуальній схемі, кортежі якого фізично зберігаються в базі даних.
- •3.5.2. Призначення представлень
- •3.5.3. Відновлення представлень
- •3.6. Коли скбд можна вважати Реляційної
- •Фундаментальні правила (правила 0 і 12)
- •Правило 0 - фундаментальне правило
- •Правило 12 - правило заборони обхідних шляхів
- •Структурні правила (правила 1 і 6)
- •Правило 1 - представлення інформації
- •Правило 6 - відновлення представлення
- •Правила цілісності (правила 3 і 10)
- •Правило 3 - систематична обробка невизначених значень (null)
- •Правило 10 - незалежність обмежень цілісності
- •Правила маніпулювання даними (правила 2, 4, 5 і 7)
- •Правило 2 - гарантований доступ
- •Правило 4 - динамічний інтерактивний каталог, побудований за правилами реляційної моделі
- •Правило 5 - вичерпна підмова даних
- •Питання
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).