Целостность БД
- Целостность базы данных — соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам. Каждое правило, налагающее некоторое ограничение на возможное состояние базы данных, называется ограничением целостности .
- Под целостностью баз данных будем понимать некоторый набор требований нарушение, которых приведет к противоречию между базой данных и предметной областью, которую она отражает.
- Современные СУБД поддерживают возможности соблюдения тех или иных требований целостности.
- Рассмотрим типы целостности и механизмы СУБД поддерживающие эти типы.
- Сущностная целостность или целостность по первичному ключу по своему определению значение первичного ключа в таблице должно быть уникальным т.к. основной принцип реляционной БД - доступ к данным в таблице осуществляется по цепочке.
Имя БД - Имя таблицы - Имя столбца - первичный ключ (значение)
Все современные СУБД поддерживают уникальность первичного ключа. Механизм поддержания уникальности первичного ключа основывается на понятие индекса
При определение первичного ключа СУБД автоматически создает индекс для поддержки его уникальности и для поиска по первичному ключу.
- Ссылочная целостность – это целостность поддерживается в связях между таблицами.
Для того, чтобы содержимое двух связанных таблиц правильно отражало предметную область, на операции, изменяющие содержимое таблиц должны ограничения целостности). Это относится к трем операциям:
- удаление записей (из главной таблицы)
- изменение записей (в главной таблице)
- вставка записей во второстепенные таблицы.
Так же вводят ограничения на выполнение операций: удаление из главной таблицы, обновления в главной таблице, вставка строк во вторичной таблице.
- Удаление из главной таблице
СУБД поддерживает 4 вида сценария при удаление из главной таблицы:
- при удаление из главной таблицы автоматически удаляет связанные записи из подчиненной таблицы (каскад).
- Запрет на удаление записи из главной таблицы если она связана с какими-либо записями в подчиненной таблице.
- После удаления записи из главной таблицы внешним ключам связанных записей в подчиненной таблице присваиваются значения NULL .
- При удаление записи из главной таблицы внешним ключам второстепенных записей присваиваются значения по умолчанию
- Обновление записей в главной таблице
(Это касается обновления первичного ключа)
- При обновление первичного ключа главной таблицы каскадно изменяются значения внешнего ключа подчиненных таблиц.
- При изменение первичного ключа в главной таблице соответствующим значениям ключам в подчиненной таблице присваиваются значения NULL .
- При изменение первичного ключа в главной таблице соответствующим значениям ключам в подчиненной таблице присваиваются значение по умолчанию.
- Устанавливается запрет на обновление первичных ключей тех записей главной таблицы, которые связанны с какими-либо записями в подчиненной таблице.
Значение по умолчанию – при определении структуры таблицы для каждого столбца
- определено значение по умолчанию
- разрешено присваивание значения NULL
Простым механизмом поддержания целостности БД является тип столбца таблицы СУБД автоматически отслеживает операции записи в таблицу и случаи несоответствия типов либо отвергает запись – генерирует ошибку или осуществляет неявное преобразование типов. Для каждой СУБД свои правила генерации ошибки и преобразования в неявный тип.
Например в одних СУБД возможно преобразование 32- битового целого в 16 битовое целое, а в других невозможно из-за возможности потери данных свыше 16 бит
- Доменный механизм поддержания целостности
Под доменом в реляционной базе данных понимается множество возможных значений, которые принимают данные хранящиеся в данном столбце. В частности в случае, если домен совпадает со множеством значений данного типа, но часто домен является дополнительным ограничением. Если в столбце хранится номера месяца 1..12 то в домене находится 12 значений, а тип целый.
В большинстве СУБД домен определяется набором условий, которые должны выполнятся для данных, хранящихся в столбце. В случае если записываемые данные не удовлетворяют условию генерируется ошибка(условие(112)), предотвращая неправильное указание месяца .
- Поддержание наличия возможных ключей в таблице
Уникальность возможных ключей как и первичного поддерживается индексированием. Атрибут индекса уникальный гарантирует уникальность любого столбца или группы столбцов, кроме этого индекс ускоряет поиск по соответствующему ключу. Замедляет операции редактирования.
- Некоторые СУБД поддерживают создание новых типов данных к таким относятся SQL Server 2005 там на основе технологии Net можно создавать новые типы данных, которые фактически являются объектами со своими свойствами и методами. (Уже перевод РБД в Объектную РБД).
Триггеры являются наиболее мощным средством поддержания целостности баз данных. Триггеры представляют собой процедуры, хранящиеся в базе данных, написанные на языке соответствующей СУБД и автоматически запускаемые при наступление некоторого события. При помощи триггеров можно проверять любые условия и запретить выполнение какой-либо операции, либо внести дополнительные изменения в другие таблицы . У триггеров существует три основные функции:
- Запретить те или иные действия, которые противоречат целостности базы данных.
- Попутно с выполняемой операцией внести изменения в др. таблицы баз данных или структуру баз данных.
- Функция журнализация тех или иных действий в базе данных.