Базы данных: конспект лекций
Шрифт:
Drop tableимя базового отношения;
3. Ограничение целостности по состоянию
Ограничение целостности реляционного объекта данных по состоянию – это так называемый инвариант данных.
При этом целостность следует уверенно отличать от безопасности, которая, в свою очередь, подразумевает защиту данных от несанкционированного доступа к ним с целью
В общем случае ограничения целостности реляционных объектов данных классифицируются по уровням иерархии этих самых реляционных объектов данных (иерархия реляционных объектов данных – это последовательность вложенных друг в друга понятий: «атрибут – кортеж – отношение – база данных»).
Что это означает? Это означает, что ограничения целостности зависят:
1) на уровне атрибута – от значений атрибута;
2) на уровне кортежа – от значений кортежа, т. е. от значений нескольких атрибутов;
3) на уровне отношений – от отношения, т. е. от нескольких кортежей;
4) на уровне базы данных – от нескольких отношений.
Итак, теперь нам остается только рассмотреть более подробно ограничения целостности по состоянию каждого из приведенных понятий. Но прежде дадим понятия процедурной и декларативной поддержки ограничений целостности по состоянию.
Итак, поддержка ограничений целостности может быть двух видов:
1) процедурной, т. е. созданной при помощи написания программного кода;
2) декларативной, т. е. созданной путем объявлений тех или иных ограничений для каждого из названных выше вложенных понятий.
Декларативная поддержка ограничений целостности реализуется в контексте оператора Create создания базового отношения. Поговорим об этом подробнее. Начнем рассмотрение совокупности ограничений снизу нашей иерархической лестницы реляционных объектов данных, т. е. с понятия атрибута.
Ограничение уровня атрибута включает в себя:
1) ограничения типа значений атрибута.
Например, условие целочисленности значений, т. е. условие integer для атрибута «Курс» из одного из рассмотренного ранее базового отношения;
2) ограничение значений атрибута, записываемое как условие, зависящее от имени атрибута.
Например, анализируя то же самое базовое отношение, что и в пре дыдущем пункте, видим, что в том отношении имеется и ограничение значений атрибута с использованием опции check, т. е.:
check (1 <= Курс and Курс <= 5);
3) ограничение уровня атрибутов включает в себя ограничения Null-значений, определяемые уже знакомым нам флажком допустимости (Null) или, наоборот, недопустимости (not Null) Null-значений.
Как мы уже упоминали ранее, первые два ограничения определяют ограничение домена атрибута, т. е. значение его множества определения.
Далее согласно иерархической
И снова целесообразно будет вспомнить пройденный нами ранее пример базового отношения, имеющего необходимое нам сейчас ограничение кортежа, а именно:
check (0 < min Вес Кг and min Вес Кг < max Вес Кг);
И, наконец, последнее значимое в контексте ограничения целостности по состоянию понятие – это понятие уровня отношений. Как мы уже говорили раньше, ограничение уровня отношения включает в себя ограничение значений первичного (primary key) и кандидатного (candidate key) ключей.
Любопытно, что ограничения, накладываемые на базы данных, относятся уже не к ограничениям целостности по состоянию, а к ограничениям ссылочной целостности.
4. Ограничения ссылочной целостности
Итак, ограничение уровня баз данных включает ограничение ссылочной целостности внешних ключей (foreign key). Коротко мы уже упоминали об этом, когда говорили об ограничениях ссылочной целостности при создании базового отношения и внешних ключах. Теперь настало время поговорить об этом понятии более подробно.
Как мы уже говорили раньше, внешний ключ объявляемого базового отношения ссылается на первичный или кандидатный ключ какого-то другого (чаще всего) базового отношения. Напомним, что при этом отношение, на которое ссылается внешний ключ, называется ссылочным или родительским, потому что оно как бы «порождает» один атрибут или несколько атрибутов в ссылающемся базовом отношении. А, в свою очередь, отношение, содержащее внешний ключ, называется дочерним, тоже по вполне понятным причинам.
В чем же заключается ограничение ссылочной целостности? А заключается оно в том, что каждому значению внешнего ключа дочернего отношения обязательно должно соответствовать значение какого-либо ключа отношения родительского, если только значение внешнего ключа не содержит Null-значений в каких-либо атрибутах.
Кортежи дочернего отношения, нарушающие это условие, называются висящими.
Действительно, если внешний ключ дочернего отношения ссылается на атрибут, которого на самом деле в родительском отношении нет, то он не ссылается ни на что. Именно таких ситуаций и требуется всячески избегать, это и означает поддерживать ссылочную целостность.