Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Підручник з баз даних.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
776.19 Кб
Скачать

Лекція 2.

  1. Цілістність баз даних

  2. Целостность баз данных

  3. Ограничения целостности для записей

  4. Ограничения целостности для таблиц

  5. Ограничения целостности для связей между таблицами

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

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

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

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

Обмеження цілісності зберігаються в словнику БД.

Обмеження цілісності можуть визначатися: • специфікою предметної області (вік співробітників організації може знаходитися в діапазоні від 16 до 80 років); • безпосередньо інформаційними характеристиками (артикул товару повинен бути цілим числом).

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

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

Обмеження цілісності в реляційної моделі даних можуть ставитися до полів, записів, таблиць, зв'язків між таблицями.

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

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

  1. Для поля встановлюється конкретний тип даних: текстовий, числовий, дата / час, логічний і т. д. Це не дозволяє вводити, наприклад, в числове поле текст або дати, в поле з типом даних дата / час - числа.

  2. Домен вказується безпосередньо - перерахуванням входять до нього значень або за допомогою вказівки діапазону допустимих значень.

Проілюструємо процес створення розглянутих обмежень цілісності для полів на прикладі СУБД MS Access. Всі вони легко задаються при формуванні структури таблиці в режимі Конструктора.

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

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

При безпосередньому завданні домену необхідні параметри можна вказати у властивості поля Умова на значення. Наприклад, якщо в структуру торгового підприємства входять три магазини: «Парус», «Хвиля» та «Лотос», для поля Назва магазину деякої таблиці, в яке вводяться відповідні значення, доцільно передбачити наступне обмеження цілісності:

Умова на значення "Парус" OR "Хвиля" OR "Лотос"

У результаті спроба ввести в поле Назва магазину інші значення буде сприйматися як помилка.

Якщо відомо, що ціни товарів повинні знаходитися в діапазоні від 100 до 100 000 рублів, обмеження цілісності для поля Ціна повинно мати вигляд:

Умова на значення> = 100 AND <= 100000

Окремим випадком визначення домену можна вважати автоматичне (за замовчуванням) завдання конкретного значення даних в деякому полі (в MS Access властивість поля Значення за замовчуванням).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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