Забезпечення цілісності баз даних

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

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

Підтримка цілісності в реляційної моделі даних в її класичному розумінні, включає в себе 3 аспекти.

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

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

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

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

По-третє, це підтримка посилальної цілісності (Declarative Referential Integrity, DRI), означає забезпечення одного із заданих принципів взаємозв'язку між екземплярами кортежів взаємопов'язаних відносин:

· Кортежі підлеглого відносини знищуються при видаленні кортежу основного відносини, пов'язаного з ним;

· Кортежі основного відносини модифікуються при видаленні кортежу основного відносини, пов'язаного з ним, при цьому на місці ключа батьківського відносини ставиться невизначений Null значення.

Посилальна цілісність забезпечує підтримку несуперечливого стану БД в процесі модифікації даних при виконанні операцій додавання або видалення.

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

Семантична підтримка може бути забезпечена двома шляхами:

· Декларативний, що виконується засобами мови SQL;

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

Декларативний шлях пов'язаний з наявністю механізмів в рамках СУБД, що забезпечують перевірку і виконання ряду декларативно заданих правил-обмежень, званих найчастіше «бізнес-правилами» (Business Rules) або декларативними обмеженнями цілісності.

Виділяються наступні види декларативних обмежень цілісності:

· Обмеження цілісності атрибута: значення за замовчуванням, завдання обов'язковості або необов'язковості значень (Null), завдання умов на значення атрибутів. Завдання значення за замовчуванням означає, що кожен раз при введенні нового рядка в відношення, при відсутності даних в зазначеному стовпці цього атрибуту присвоюється саме значення за замовчуванням;

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

· Обмеження цілісності, що задаються на рівні стосунки. Деякі семантичні правила неможливо перетворити в вирази, які будуть застосовні тільки до одного стовпцю;

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