Реляційна цілісність даних

 

Реляційна цілісність данихрозглядається в двох аспектах — ключі відношення і реляційні обмеження цілісності.

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

Кожне відношення обов'язково має комбінацію атрибутів, яка може служити ключем. Таким чином, її існування гарантує те, що відношення — це множина, яка не містить однакових кортежів. У багатьох СУБД можна створювати відношення, не визначаючи ключі.

Іноді відношення має декілька комбінацій атрибутів, кожна з яких однозначно визначає всі кортежі відношення. Такі комбінації атрибутів — це можливі ключі відношення (потенційні) і будь-який з них можна вибрати як первинний.

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

Зазвичай ключі використовують для:

□ виключення дублювання значень в ключових атрибутах (інші атрибути у розрахунок не приймаються);

□ впорядкування кортежів. Можливо впорядкування за збільшенням або убуванню значень всіх ключових атрибутів, а також змішане впорядкування (по одних атрибутах зростання, по інших — убування);

□ прискорення роботи з кортежами відношення;

□ організації зв¢язування таблиць.

Якщо у відношенні R1 є не ключовийатрибут А, значення якого є значеннями ключовогоатрибуту В іншого відношення R2, то атрибут А відношення R1 є зовнішнім ключем.

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

Оскільки кожен атрибут пов'язаний з деяким доменом, для множини допустимих значень кожного атрибуту відношення визначають так звані обмеження домена. Окрім цього, для БД задаються два правила цілісності, які називаються реляційними обмеженнями цілісності — обмеженнями для всіх допустимих станів БД:

□ правила цілісності сутності (відношень);

□ правила посилальної цілісності.

Визначник null указує на те, що значення атрибуту в даний момент невідоме або неприйнятно для даного кортежу, null не входить в область визначення деякого кортежу або ніяке значення ще не задано. Ключове слово null є способом обробки неповних або незвичайних даних, null у жодному випадку не можна ототожнювати як нульове чисельне значення або заповнений пропусками текстовий рядок (нулі і пропуски — це деякі значення; null — це відсутність значення). Цілісність відношень — в базовому (основному) відношенні жоден атрибут первинного ключа не може містити відсутніх значень, тобто NULL-значень.

Посилальна цілісність— значення зовнішнього ключа відношення повинне або відповідати значенню первинного ключа базового відношення, або задаватися визначником null.

Корпоративні обмеження цілісності— додаткові правила підтримки цілісності даних, визначувані користувачами або адміністраторами БД.

 

Індексування

 

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

Вирішення проблеми організації фізичного доступу до інформації залежить в основному від наступних чинників:

□ виду вмісту в полі ключа записів індексного файлу;

□ типу використовуваних посилань (покажчиків) на запис основної таблиці;

□ методу пошуку потрібних записів.

Індексний файл — це файл, що зберігається, особливого типу, в якому кожен запис складається з двох значень: дане і RID-покажчик. На практиці найчастіше використовуються два методи пошуку: послідовний і бінарний (заснований на діленні інтервалу пошуку навпіл).

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

 


Рис. 2.2. Одноуровневая схема индексации

 

У кожному блоці записи розташовуються у порядку зростання значення ключа (або згортки). Старшим ключем кожного блоку є ключ його останнього запису. Якщо в індексному файлі зберігаються хеш-коды ключових полів індексованої таблиці, то алгоритм пошуку потрібного запису включає три етапи.

1. Утворення згортки значення ключового поля шуканого запису.

2. Пошук в індексному файлі запису про блок, значення першого поля якого більше одержаною згортки (це гарантує знаходження шуканою згортки в даному блоці).

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

Недолік однорівневої схеми — ключі (згортки) записів зберігаються разом із записами, що приводить до збільшення часу пошуку записів через велику довжину перегляду (значення даних в записах доводиться пропускати). У дворівневій схемі ключі (згортки) записів відокремлені від вмісту записів (мал. 2.3).

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

На практиці при створенні індексу для деякої таблиці бази даних указують поле таблиці, яке вимагає індексації. Ключові поля таблиці в багатьох СУБД індексуються автоматично. Індексні файли, створювані n<J ключовим полям таблиці, називаються файлами первинних індексів.

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

 

Рис. 2.3. Двухуровневая схема индексации

 

Деякі СУБД підтримують кластеризованные і кластеризованные хешированные індекси.

Кластеризація — приміщення в один блок записів таблиць, які з великою вірогідністю часто піддаватимуться з'єднанню.

Кластерізованний індекс — спеціальна техніка індексування, при якій дані в таблиці фізично розташовуються в індексованому порядку. Використання кластеризованного індексу значно прискорює виконання запитів по індексованій колонці. Для кожної таблиці може існувати тільки один кластеризованный індекс. При створенні кластеризованного індексу не по первинному ключу автоматично знімається кластеризація по первинному ключу.

Хешування — альтернативний спосіб зберігання даних в наперед заданому порядку з ланцюгом прискорення пошуку (прямий доступ). Хешування позбавляє від необхідності підтримувати і проглядати індекси. Кластерізованний хеширо-ванний індекс значно прискорює операції пошуку і сортування, але додавання і видалення рядків сповільнюється із-за необхідності реорганізації даних для відповідності індексу. Хешування застосовується у тому випадку, коли необхідний прямий доступ (без індексів), наприклад при бронюванні авіаквитків, місць в готелях, прокаті машин, а також електронних грошових переказах. Проте недоліком хешування є необхідність знаходження відповідної хеш-функции, необхідність виконання операції згортки (вимагає певного часу), можливі колізії (згортка різних значень може дати однаковий j хеш-код) і проміжки між записами невизначеної протяжності. При хешуванні RID-покажчик обчислюється за допомогою деякої хеш-функции і називається хеш-кодом. У полі ключа індексного файлу можна зберігати значення ' ключових полів індексованої таблиці або згортку ключа (хеш-код). Довжина хеш-кода завжди постійна і має достатньо малу величину (наприклад, 4 байти), а це істотно знижує час пошукових операцій.

Загальним недоліком індексних схем є необхідність зберігання індексів, до яких потрібно звертатися для виявлення записів.


 

Завдання

1. Сформулювати основні поняття реляційної моделі даних і дати відповідну інтерпретацію в табличних термінах.

2. Які аспекти даних розглядає реляційна модель?

3. У чому відмінність типу даних від домена?

4. Що таке ступінь і потужність відношення?

5. У якому випадку схеми двох відношень будуть еквівалентними?

6. Чим відношення в реляційній моделі відрізняється від простій таблиці? Перерахувати головні відмінності і привести відповідні приклади.

7. Що таке схема бази даних? Яка може бути математичний запис схеми бази даних?

8. Які типи зв'язків можна виділити між відношеньами в реляційній моделі? Привести приклади з наочної області, що відображають можливе існування таких зв'язків.

9. Перерахувати види відношень реляційної моделі і зробити їх порівняльний аналіз.

 

10. Які аспекти включає реляційна цілісність даних? Привести відповідні приклади.

11. Що таке індекс? У чому полягають переваги і недоліки використання індексів?

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

 

• (Код спортивного заходу, Назва заходу, Опис) ',

• (Код судді, ФІО судді, Категорія, Службова адреса, Службовий телефон)\

• (Код спортивного заходу, Код судді, Дата проведення) .

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

• (Код товару, Назва, Опис);

• (Код товару, Код продукту, Кількість);

(Код продукту, Назва продукту, Ціна продукту);

• (Код накладної, Дата виписки, Дата оплати)',

• (Код накладної, Код товару, Кількість товару).

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

•(Особистий номер аспіранта, Прізвище, Ім'я, По батькові, Підлога, Дата народження, Дата надходження, Код спеціальності) ",

• (Код спеціальності, Спеціальність, Опис)',

• (Особистий номер аспіранта, Тема, Науковий керівник, Дата твердження);

• (Код дисципліни, Назва дисципліни, ФІО викладача) ;

•(Особистий номер аспіранта, Код дисципліни, Оцінка, Дата здачі) .