Забезпечення цілісності даних в базах даних sqlite, блог про створення сайтів, просування сайтів,
Тема 11: Забезпечення цілісності даних в базах даних SQLite3
Привіт, відвідувач сайту ZametkiNaPolyah.ru. Продовжуємо вивчати бази даних і наше знайомство з бібліотекою SQLite3 .Ми приступаємо до однієї з найважливіших тем реляційних баз даних - забезпечення цілісності даних в базах даних. в цій темі ми розглянемо, які можливості щодо забезпечення цілісності даних є в реляційних СУБД на прикладі SQLite. Потрібно сказати, що поняття забезпечення цілісності даних тісно пов'язане з поняттям нормалізації і з поняттям зв'язок між таблицями. Даний запис, як допоможе вам зрозуміти ці зв'язки.

Забезпечення цілісності даних в базах даних SQLite3
З цього запису в дізнаєтесь в загальних рисах про те, як забезпечити цілісність даних в базах даних, ми повторимо аномалії, які є в реляційних базах даних і подивимося, які кошти є в SQLite для усунення аномалій. Так само ми познайомимося з обмеженнями, які, як раз таки і призначені для забезпечення цілісності даних. Обмеження діляться на два види: обмеження рівня стовпчика і обмеження рівня таблиці. І завершенні статті ви дізнаєтеся про те, як боротися з аномаліями за допомогою каскадних операцій.
Як забезпечується цілісність даних в базах даних в SQLite3
Механізми підтримки цілісності даних в базах даних будь СУБД потрібні для того, щоб уникнути всіляких помилок. боротьбу зі спробами маніпулювати даними. ці помилки називаються аномаліями:
З аномаліями баз даних можна боротися по-різному, наприклад, привести базу даних до третьої нормальної формі або скористатися механізмами підтримки цілісності даних, реалізованими в СУБД. Насправді, жодна СУБД в світі не знає про те, що таке нормальна форма. тому за нормалізацію відповідає розробник баз даних.
SQLite, як і інші СУБД, не знають про те, що таке зовнішній ключ і первинний ключ. тому що для всіх реляційних СУБД - це не ключі або ключові атрибути, а обмеження, які забезпечують цілісність даних в базах даних. Якщо вам буде простіше, то це правила для СУБД, які вона ніколи не порушить і не дасть нікому порушити що б не сталося.
Коли ми створюємо таблиці в базах даних за допомогою оператора CREATE. ми задаємо характеристики для кожного стовпця: тип даних. який буде зберігатися в стовпці, ми можемо сказати SQLite, що даний стовпець AUTOINCREMENT і тоді SQLite буде забезпечувати цілісність даних стовпця самостійно. автоматично додаючи нове значення в цей стовпець при додавання нових рядків у таблицю.
Ви можете забезпечити цілісність даних і позбутися від проблем з додаванням даних в таблицю командою INSERT. сказавши, що в стовпці не може знаходити значення NULL: в цьому випадку, якщо ви забудете додати значення в стовпець, для якого вказано NOT NULL, дані не будуть додані.
Загалом, для підтримки і забезпечення цілісності даних в базах даних SQLite3 у нас є два механізми:
- Нормалізація відносин в базі даних.
- Внутрішні правила та обмеження бази даних.
Ці два механізми підтримки та забезпечення цілісності даних в базах даних, насправді, дуже тісно пов'язані між собою, і ми це зрозуміємо кілька далі. Зараз варто сказати, що обмеження в SQLite, як і в будь-який інший СУБД діляться на два рівня: обмеження рівня таблиці і обмеження рівня стовпчика.
Перші дозволяють забезпечити цілісність даних у всій базі даних, другі забезпечують цілісність даних в таблиці бази даних.
Обмеження рівня стовпчика в базах даних SQLite, як засіб забезпечення цілісності даних
Обмеження рівня стовпчика в базах даних SQLite3 потрібні для того, щоб забезпечити цілісність даних в одній таблиці бази даних, вірніше, в стовпці таблиці. Раніше ми дуже часто стикалися з обмеженнями рівня таблиці, коли розглядали різні команди SQL. Для SQLite обмеження рівня шпальти - це правила, які повинні виконуватися, щоб підтримати і забезпечити цілісність даних в базі даних. Давайте подивимося, як SQLite забезпечує цілісність даних на рівні стовпця.
- Значення NOT NULL. Є обмеженням рівня стовпчика і забезпечує цілісність даних за рахунок того, що стовпець, якому ми сказали NOT NULL не може зберігати в собі значення NULL, тоді при виконанні команди INSERT, якщо ви забудете додати значення в стовпець, SQLite поверне вам помилку.
- Значення UNIQUE. Якщо ви задасте одну правило UNIQUE, то SQLite подбати про те, щоб в стовпці зберігалися тільки унікальні значення, таким чином забезпечивши цілісність даних стовпця.
- Значення CHECK в базах даних SQLite задає діапазон значень, наприклад, у вас є таблиця з співробітниками і зарплатою, співробітник не може отримувати зарплату нижче МРОТ, так забезпечує цілісність даних CHECK.
- Значення DEFAULT дозволяє задати значення для стовпця за замовчуванням: SQLite буде підставляти значення за замовчуванням в тому випадку, коли ви забудете додати значення для стовпця при додаванні нового рядка в таблицю. Це теж механізм забезпечення цілісності даних в базі даних SQlite.
- Тип даних стовпчика, вірніше, клас даних стовпця. але якщо вже бути зовсім точним в контексті SQLite3, то аффинированного тип даних стовпця є обмеженням і потрібен для підтримки і забезпечення цілісності даних.
- Коли ми розглядали порівняння даних в SQLite. то говорили про конструкцію COLLATE, яка дозволяє задати правила порівняння. На перший погляд ця конструкція не відноситься до механізмів забезпечення цілісності даних. але якщо поглянути на неї так: ми можемо використовувати фільтрацію WHERE при видаленні даних з таблиці командою DELETE. коли ми використовуємо WHERE, SQLite починає порівнювати значення, щоб вирішити: потрібно його видаляти чи ні.
Ще раз повторимо, що обмеження рівня стовпчика забезпечують цілісність в шпальтах таблиць бази даних.
Обмеження рівня таблиці в базах даних SQLite3, як спосіб забезпечення цілісності даних в базах даних
Обмеження рівня таблиці потрібні, щоб забезпечити цілісність даних всієї бази даних. створюючи обмеження рівня стовпчика, ми створюємо правило, від якого залежить робота всієї бази даних. Давайте подивимося, як в SQLite3 можна забезпечити цілісність даних за допомогою обмежень рівня таблиці:
- Первинний ключ. Первинний ключ в базах даних SQLite може бути складовим або звичайним. Первинний ключ в базах даних SQLite3 є обмеженням рівня таблиці і для будь-якої системи управління базами даних первинний ключ є правилом, яке не можна порушувати, тим самим забезпечується цілісність даних. Якщо ви пам'ятаєте, то ключові атрибути обов'язкові для другої нормальної форми.
- Обмеження CHECK. Якщо чесно, то я не визначився до якого рівня відноситься обмеження CHEK в SQLite. З одного боку: це обмеження забезпечує цілісність даних тільки одного стовпчика. З іншого боку, цього обмеження в базах даних SQLite можна дати ім'я. CHECK обмежує діапазон значень, який може зберігатися в стовпці.
- Зовнішній ключ є обмеженням рівня таблиці і дозволяє забезпечити цілісність даних в базі даних. вірніше, в зв'язаних таблицях. За допомогою зовнішнього ключа реалізуються різноманітні зв'язки між таблицями бази даних. Використовуючи зовнішні ключі, ми проводить нормалізацію відносин.
Давайте зробимо висновок: обмеження рівня таблиці в SQLite є правилами, які СУБД ніколи не порушить і не дасть порушити нікому для того, щоб забезпечити цілісність даних в базі даних.
Каскадні операції маніпуляції даними для забезпечення цілісності даних в базах даних SQLite
Коли ми створюємо таблиці і вказуємо зовнішні ключі, ми робимо тісні зв'язки між таблицями, ці таблиці пов'язані між собою посилаються стовпцями. Коли ми розглядали другу нормальну форму, то виявляли функціональні зв'язки між таблицями, а потім розбивали одну таблицю, яка перебувала в першій нормальній формі. на батьківську і дочірню, тобто створювали довідник, який усував надмірність даних в базі даних.
Коли ми розглядали третю нормальну форму, то ми теж створювали таблицю довідник для того, щоб позбутися від транзитивної залежності. Якби ми спробували видалити дані з батьківської таблиці в SQLite, то вона б нам повернула помилку, сказавши про те, що для видалення рядка з батьківської таблиці потрібно видалити рядок з дочірньою таблиці.
Так, ми забезпечили цілісність даних в базі даних. але ускладнили собі роботу маніпуляції даними. Розробники SQLite подбали про розробників баз даних, які прагнуть забезпечити цілісність даних, реалізувавши каскадні операції з даними. У базах даних SQLite є дві каскадні операції маніпуляції даними:
- Каскадна операція видалення рядків дозволяє видалити рядок в батьківській таблиці і пов'язану з нею рядок в дочірній таблиці. Каскадне видалення рядків забезпечує цілісність даних і дозволяє автоматизувати процес видалення даних з таблиць бази даних.
- Каскадна модифікація даних реалізує механізм каскадного оновлення даних в рядках таблиць і позбавляє розробника від необхідності перевіряти значення в зв'язаних таблицях при модифікації даних. Дана операція забезпечує цілісність даних при зміна значень в рядках.
Далі ми більш детально розглянемо каскадні операції маніпуляції з даними, як і інші питання, пов'язані із забезпеченням цілісності даних, порушених в даній запису.