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

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3.Мы приступаем к одной из самых важных тем реляционных баз данных — обеспечение целостности данных в базах данных, в этой теме мы рассмотрим, какие возможности по обеспечению целостности данных есть в реляционных СУБД на примере SQLite. Нужно сказать, что понятие обеспечение целостности данных тесно связано с понятием нормализации и с понятием связь между таблицами. Данная запись, как поможет вам понять эти связи.

Обеспечение целостности данных в базах данных SQLite3

Обеспечение целостности данных в базах данных 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. Каскадная модификация данных реализует механизм каскадного обновления данных в строках таблиц и избавляет разработчика от необходимости проверять значения в связанных таблицах при модификации данных. Данная операция обеспечивает целостность данных при изменение значений в строках.

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

Текст комментария: