Здавалка
Главная | Обратная связь

Проблеми підтримки посилальної цілісності при модифікації даних



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

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

2. Видалення рядка з дочірньої таблиці. Ніяких порушень посилальної цілісності не відбувається.

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

4. Вставка рядка в батьківську таблицю. Така вставка не може викликати порушення посилальної цілісності. Доданий рядок просто стає батьківським об'єктом, що не має дочірніх об'єктів.

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

· NO ACTION. Видалення рядка з батьківської таблиці забороняється, якщо в дочірній таблиці існує хоч би один рядок, що посилається на неї.

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

· SET NULL. При видаленні рядка з батьківської таблиці у всіх рядках дочірнього відношення, що посилаються на неї, в полі зовнішнього ключа, відповідного первинному ключу видаленого рядка, записується порожнє значення. Отже, видалення рядків з батьківської таблиці викличе занесення порожнього значення у відповідне поле дочірньої таблиці. Ця стратегія може використовуватися, тільки коли в полі зовнішнього ключа дочірньої таблиці дозволяється поміщати порожні значення.

· SET DEFAULT. При видаленні рядка з батьківської таблиці в поле зовнішнього ключа всіх рядків дочірньої таблиці, що посилаються на неї, автоматично поміщається значення, вказане для цього поля як значення за замовчанням. Таким чином, видалення рядка з батьківської таблиці викликає введення значення за умовчанням в поле зовнішнього ключа всіх рядків дочірньої таблиці, що посилаються на видалений рядок. Ця стратегія застосовна лише в тих випадках, коли полю зовнішнього ключа дочірньої таблиці призначено деяке значення, що приймається за замовчанням.

· NO CHECK. При видаленні рядка з батьківської таблиці ніяких дій із збереження посилальної цілісності даних не робиться.

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

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.