Обмеження цілісності для полів
ЛЕКЦІЯ 2.
Цілістність баз даних
3. Целостность баз данных
4. Ограничения целостности для записей
5. Ограничения целостности для таблиц
6. Ограничения целостности для связей между таблицами
Одним з найважливіших завдань, що вирішується СУБД, є підтримка в будь-який момент часу взаємної несуперечності, правильності і точності даних, що зберігаються в БД. Цей процес називається забезпеченням цілісності бази даних.
Слід розрізняти проблеми забезпечення цілісності бази даних та захисту бази даних від несанкціонованого доступу. Підтримка цілісності бази даних може інтерпретуватися як захист даних від неправильних дій користувачів або деяких випадкових зовнішніх впливів. В обох ситуаціях порушення цілісності бази даних мають ненавмисний характер.
Цілісність бази даних може бути порушена в результаті збою обладнання; програмної помилки в СУБД, операційній системі або прикладній програмі; неправильних дій користувачів. Ці ситуації можуть виникати навіть у добре перевірених і налагоджених системах, незважаючи на вживані системи контролю. Тому СУБД повинна мати засоби виявлення таких ситуацій та відновлення правильного стану бази даних.
Цілісність бази даних підтримується за допомогою набору спеціальних логічних правил, що накладаються на дані, званих обмеженнями цілісності. Обмеження цілісності являють собою твердження про допустимі значення окремих інформаційних одиниць і зв'язках між ними.
Обмеження цілісності зберігаються в словнику БД.
Обмеження цілісності можуть визначатися:
• специфікою предметної області (вік співробітників організації може знаходитися в діапазоні від 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 для цих полів у властивості Індексовані поле встановлюється значення Так (Збіги не допускаються).
Всі розглянуті обмеження цілісності перевіряють не тільки правильність введення нових даних в поля таблиць, а й контролюють процес редагування вже наявних в таблицях значень.
Перераховані обмеження цілісності називають статичними, так як вони визначають умови, які повинні виконуватися для кожного стану бази даних. СУБД може підтримувати і динамічні обмеження цілісності, контролюючі можливість переходу від одних значень даних, що зберігаються в полі, до інших.
Наприклад, якщо в таблиці бази даних зберігаються відомості про вік і стаж роботи співробітників підприємства, значення даних у цих полях повинні тільки збільшуватися. При спробах внести в базу даних некоректні зміни, СУБД повинна виводити повідомлення про допущену помилку.