5. Контроль цілісності зв'язків
З перерахованих видів зв'язку частіше використовується зв'язок виду 1.N. Зв'язок вигляду 1:1 можна вважати окремим випадком зв'язку 1:N, коли одному запису головної таблиці відповідає один запис допоміжної таблиці. Зв'язок N:1, по суті, є «дзеркальним відображенням» зв'язку 1:N. Вид зв'язку N:N, що залишився, характеризується як слабкий вид зв'язку або навіть як відсутність зв'язку. Тому надалі розглядається зв'язок виду 1:N.
Нагадаємо, що при утворенні зв'язку виду 1:N один запис головної таблиці (головний, батьківський запис) виявляється пов'язаним з декількома записами додатковою (додаткові, підлеглі записи) і має місце схема, показана на мал. 8.
Мал. 8. Зв'язок 1:N записів двох таблиць
Контроль цілісності зв'язків зазвичай означає аналіз вмісту двох таблиць на дотримання наступних правил:
- кожному запису основної таблиці відповідає нуль або більш за записи додаткової таблиці;
- у додатковій таблиці немає записів, які не мають батьківських записів в основній таблиці;
- кожен запис додаткової таблиці має тільки один батьківський запис основної таблиці.
Опишемо дію контролю цілісності при маніпулюванні даними в таблицях. Розглянемо три основні операції над даними двох таблиць:
- введення нових записів
- модифікацію записів
- видалення записів.
При розгляді спробуємо охопити всі можливі методи організації контролю цілісності. У реальних СУБД можуть застосовуватися власні методи, подібні описуваним.
При введенні нових записів виникає питання визначення послідовності введення в таблиці такий, щоб не допустити порушення цілісності. Виходячи з вище навединих правил, логічною є схема, при якій дані спочатку вводяться в основну таблицю, а потім в додаткову. Черговість введення може бути встановлена на рівні цілих таблиць або окремих записів (випадок одночасного введення в декілька відкритих таблиць).
В процесі заповнення основної таблиці контроль значень полий зв'язку ведеться як контроль звичайного ключа (на збіг із значеннями тих жеполів інших записів). Заповнення полий зв'язку додаткової таблиці контролюється на предмет збігу із значеннями полий зв'язки основної таблиці. Якщо значення, що знов вводиться, в полі зв'язку додаткової таблиці не співпаде ні з одним відповідним значенням в записах основної таблиці, то введення такого значення повинне блокуватися.
Модифікація записів. Зміна вмісту полів зв'язаних записів, що не відносяться до нулів зв'язку, очевидно, повинна відбуватися звичайним способом. Нас цікавитиме механізм зміни полий зв'язки.
При редагуванні полий зв'язки додаткової таблиці очевидною вимогою є те, щоб нове значення поля зв'язку співпадало з відповідним значенням якого-небудь запису основної таблиці. Тобто додатковий запис може змінити батька, але залишитися без нього не повинна.
Редагування поля зв'язку основної таблиці розумно підпорядкувати одному з наступних правил:
- редагувати записи, у яких немає підлеглих записів. Якщо є підлеглі записи, то блокувати модифікацію полий зв'язки;
- зміни в полях зв'язку основного запису миттєво передавати у всі поля зв'язки всіх записів додаткової таблиці (каскадне оновлення).
У операціях видалення записів зв'язаних таблиць велику свободу, очевидно, мають записи додаткової таблиці. Видалення їх повинно відбуватися практично безконтрольно.
Видалення записів основної таблиці логічне підпорядкувати одному з наступних правил:
- видаляти можна запис, який не має підлеглих записів;
- заборонити (блокувати) видалення запису за наявності підлеглих записів, або видаляти її разом зі всіма підлеглими записами (каскадне видалення).
