При обработке данных необходима гарантия сохранения целостности данных в базе, поэтому важным этапом проектирования РБД является обеспечение целостности базы данных. Целостность данных может быть описана на различных уровнях:
· целостность на уровне таблиц;
· целостность, на уровне доменов;
· связная целостность.
Правила целостности задаются в виде ограничений целостности, которые представляют собой это некоторое логическое утверждение. Оно может быть истинным или ложным в зависимости от состояния БД. Состояние БД задается значением атрибутов каждого отношения. Поэтому правила целостности отражают либо ограничения на множество значений атрибута, либо ограничения на правила работы с атрибутами.
По способам реализации ограничения целостности делятся на:
· декларативные, выполняемые средствами языка описания данных СУБД;
· процедурные, выполняемые посредством триггеров и хранимых процедур.
При выполнении этой лабораторной работы в процессе построения реляционной модели данных необходимо разработать декларативные ограничения целостности. Декларативные ограничения целостности должны обеспечивать:
· задание типов принимаемых значений;
· определение первичных ключей;
· контроль функциональных ограничений на значения атрибутов, определяемых требованиями предметной области;
· задание неопределенных значений и значений по умолчанию;
· задание условий каскадного удаления и пр.
Декларативные правила целостности задаются с помощью следующих средств описания атрибутов:
· тип принимаемого значения;
· задание описателя первичного ключа;
· определение значений, присеваемых по умолчанию;
· задание списка возможных значений;
· определение диапазона значений;
· определение логических условий на значение атрибута и др.
Процедурные правила целостности позволяют проводить согласованные изменения данных, хранящихся во взаимосвязанных таблицах. При задании процедурных ограничений целостности можно использовать различные стратегии. При обновлении кортежа в родительском отношении наиболее часто применяют следующие стратегии:
· RESTRICT (Ограничить) − не разрешать обновление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на обновляемый кортеж.
· CASCADE (Каскадное обновление) − выполнить обновление и последовательно изменить значения внешних ключей во всех кортежах дочернего отношения, которые ссылаются на обновляемый кортеж.
· SET NULL (Установить в NULL) − выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на null-значение.
· SET DEFAULT (Установить по умолчанию) − выполнить обновление и во всех кортежах дочернего отношения, ссылающихся на обновляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию.
· IGNORE (Игнорировать) − выполнить обновление, не обращая внимания на нарушения ссылочной целостности.
При удалении кортежа в родительском отношении допустимы следующие стратегии:
· RESTRICT (Ограничить) − не разрешать удаление, если имеется хотя бы один кортеж в дочернем отношении, ссылающийся на удаляемый кортеж.
· CASCADE (Каскадное удаление) - выполнить удаление и последовательно удалить кортежи в дочернем отношении, которые ссылаются на удаляемый кортеж.
· SET NULL (Установить в NULL) − выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на null-значение.
· SET DEFAULT (Установить по умолчанию) − выполнить удаление и во всех кортежах дочернего отношения, ссылающихся на удаляемый кортеж, изменить значения внешних ключей на некоторое значение, принятое по умолчанию.
· IGNORE (Игнорировать) − выполнить удаление, не обращая внимания на нарушения ссылочной целостности.
При вставке кортежа в дочернее отношение применяют следующие стратегии
· RESTRICT (Ограничить) − не разрешать вставку, если внешний ключ во вставляемом кортеже не соответствует ни одному значению потенциального ключа родительского отношения.
· SET NULL (Установить в NULL) − вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение.
· SET DEFAULT (Установить по умолчанию) − вставить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию.
· IGNORE (Игнорировать) − вставить кортеж, не обращая внимания на нарушения ссылочной целостности.
При обновлении кортежа в дочернем отношении используют следующие стратегии:
· RESTRICT (Ограничить) − не разрешать обновление, если внешний ключ в обновляемом кортеже становится не соответствующим ни одному значению потенциального ключа родительского отношения.
· SET NULL (Установить в NULL) − обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а null-значение.
· SET DEFAULT (Установить по умолчанию) - обновить кортеж, но в качестве значения внешнего ключа занести не предлагаемое пользователем некорректное значение, а некоторое значение, принятое по умолчанию.
· IGNORE (Игнорировать) - обновить кортеж, не обращая внимания на нарушения ссылочной целостности.