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