Обмеження цілісності для записів

 

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

Для завдання цього обмеження цілісності в MS Access необхідно викликати діалогове вікно властивостей таблиці і у властивості Умова на значення ввести необхідні умови:
[Наявність товару]> = [Продано]

 

Ці обмеження цілісності перевіряють узгодженість даних в різних записах однієї таблиці.

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

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

Обмеження цілісності для таблиць в основному реалізуються спеціально створеними для цього програмами (процедурами).

 

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

 

Розглянемо таблиці Постачальники (табл. 1.1) і Поставки товарів (табл. 1.2). Ці таблиці зв'язані між собою за допомогою ключових полів Код та Шифр постачальника. Таблиця Постачальники є головною таблицею, таблиця Поставки товарів - підлеглою. Значення даних в зв'язуючих полях отримані з одного домену, який представляє в розглянутому прикладі безліч позитивних цілих тризначних чисел.

 

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


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

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

 

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

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

 

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

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