Забезпечення цілісності даних в базах даних sqlite, блог про створення сайтів, просування сайтів,

Тема 11: Забезпечення цілісності даних в базах даних SQLite3

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

Забезпечення цілісності даних в базах даних sqlite, блог про створення сайтів, просування сайтів,

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

З цього запису в дізнаєтесь в загальних рисах про те, як забезпечити цілісність даних в базах даних, ми повторимо аномалії, які є в реляційних базах даних і подивимося, які кошти є в SQLite для усунення аномалій. Так само ми познайомимося з обмеженнями, які, як раз таки і призначені для забезпечення цілісності даних. Обмеження діляться на два види: обмеження рівня стовпчика і обмеження рівня таблиці. І завершенні статті ви дізнаєтеся про те, як боротися з аномаліями за допомогою каскадних операцій.

Як забезпечується цілісність даних в базах даних в SQLite3

Механізми підтримки цілісності даних в базах даних будь СУБД потрібні для того, щоб уникнути всіляких помилок. боротьбу зі спробами маніпулювати даними. ці помилки називаються аномаліями:

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

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

Коли ми створюємо таблиці в базах даних за допомогою оператора CREATE. ми задаємо характеристики для кожного стовпця: тип даних. який буде зберігатися в стовпці, ми можемо сказати SQLite, що даний стовпець AUTOINCREMENT і тоді SQLite буде забезпечувати цілісність даних стовпця самостійно. автоматично додаючи нове значення в цей стовпець при додавання нових рядків у таблицю.

Ви можете забезпечити цілісність даних і позбутися від проблем з додаванням даних в таблицю командою INSERT. сказавши, що в стовпці не може знаходити значення NULL: в цьому випадку, якщо ви забудете додати значення в стовпець, для якого вказано NOT NULL, дані не будуть додані.

Загалом, для підтримки і забезпечення цілісності даних в базах даних SQLite3 у нас є два механізми:

  1. Нормалізація відносин в базі даних.
  2. Внутрішні правила та обмеження бази даних.

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

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

Обмеження рівня стовпчика в базах даних SQLite, як засіб забезпечення цілісності даних

Обмеження рівня стовпчика в базах даних SQLite3 потрібні для того, щоб забезпечити цілісність даних в одній таблиці бази даних, вірніше, в стовпці таблиці. Раніше ми дуже часто стикалися з обмеженнями рівня таблиці, коли розглядали різні команди SQL. Для SQLite обмеження рівня шпальти - це правила, які повинні виконуватися, щоб підтримати і забезпечити цілісність даних в базі даних. Давайте подивимося, як SQLite забезпечує цілісність даних на рівні стовпця.

  1. Значення NOT NULL. Є обмеженням рівня стовпчика і забезпечує цілісність даних за рахунок того, що стовпець, якому ми сказали NOT NULL не може зберігати в собі значення NULL, тоді при виконанні команди INSERT, якщо ви забудете додати значення в стовпець, SQLite поверне вам помилку.
  2. Значення UNIQUE. Якщо ви задасте одну правило UNIQUE, то SQLite подбати про те, щоб в стовпці зберігалися тільки унікальні значення, таким чином забезпечивши цілісність даних стовпця.
  3. Значення CHECK в базах даних SQLite задає діапазон значень, наприклад, у вас є таблиця з співробітниками і зарплатою, співробітник не може отримувати зарплату нижче МРОТ, так забезпечує цілісність даних CHECK.
  4. Значення DEFAULT дозволяє задати значення для стовпця за замовчуванням: SQLite буде підставляти значення за замовчуванням в тому випадку, коли ви забудете додати значення для стовпця при додаванні нового рядка в таблицю. Це теж механізм забезпечення цілісності даних в базі даних SQlite.
  5. Тип даних стовпчика, вірніше, клас даних стовпця. але якщо вже бути зовсім точним в контексті SQLite3, то аффинированного тип даних стовпця є обмеженням і потрібен для підтримки і забезпечення цілісності даних.
  6. Коли ми розглядали порівняння даних в SQLite. то говорили про конструкцію COLLATE, яка дозволяє задати правила порівняння. На перший погляд ця конструкція не відноситься до механізмів забезпечення цілісності даних. але якщо поглянути на неї так: ми можемо використовувати фільтрацію WHERE при видаленні даних з таблиці командою DELETE. коли ми використовуємо WHERE, SQLite починає порівнювати значення, щоб вирішити: потрібно його видаляти чи ні.

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

Обмеження рівня таблиці в базах даних SQLite3, як спосіб забезпечення цілісності даних в базах даних

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

  1. Первинний ключ. Первинний ключ в базах даних SQLite може бути складовим або звичайним. Первинний ключ в базах даних SQLite3 є обмеженням рівня таблиці і для будь-якої системи управління базами даних первинний ключ є правилом, яке не можна порушувати, тим самим забезпечується цілісність даних. Якщо ви пам'ятаєте, то ключові атрибути обов'язкові для другої нормальної форми.
  2. Обмеження CHECK. Якщо чесно, то я не визначився до якого рівня відноситься обмеження CHEK в SQLite. З одного боку: це обмеження забезпечує цілісність даних тільки одного стовпчика. З іншого боку, цього обмеження в базах даних SQLite можна дати ім'я. CHECK обмежує діапазон значень, який може зберігатися в стовпці.
  3. Зовнішній ключ є обмеженням рівня таблиці і дозволяє забезпечити цілісність даних в базі даних. вірніше, в зв'язаних таблицях. За допомогою зовнішнього ключа реалізуються різноманітні зв'язки між таблицями бази даних. Використовуючи зовнішні ключі, ми проводить нормалізацію відносин.

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

Каскадні операції маніпуляції даними для забезпечення цілісності даних в базах даних SQLite

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

Коли ми розглядали третю нормальну форму, то ми теж створювали таблицю довідник для того, щоб позбутися від транзитивної залежності. Якби ми спробували видалити дані з батьківської таблиці в SQLite, то вона б нам повернула помилку, сказавши про те, що для видалення рядка з батьківської таблиці потрібно видалити рядок з дочірньою таблиці.

Так, ми забезпечили цілісність даних в базі даних. але ускладнили собі роботу маніпуляції даними. Розробники SQLite подбали про розробників баз даних, які прагнуть забезпечити цілісність даних, реалізувавши каскадні операції з даними. У базах даних SQLite є дві каскадні операції маніпуляції даними:

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

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

Трохи про те, як створювати сайти і як просувати сайт: