атрибута записывается как условие, зависящее от имени атрибута. Вот небольшой пример для облегчения понимания этого материала:
Create table
Курс
integer
check (1 <= Курс and Курс <= 5;
Здесь условие «1 <= Курс and Курс <= 5» вместе с определением целого типа данных действительно полностью обусловливают множество допустимых значений атрибута, т. е. буквально его домен.
Флажок допустимости Null-значений (Null | not Null) запрещает (not Null) или, наоборот, разрешает (Null) появление Null-значений среди значений атрибутов.
Если взять рассмотренный только что пример, то механизм применения флажков допустимости Null- значений выглядит следующим образом:
Create table
Курс
integer
check (1 <= Курс and Курс <= 5);
Not Null;
Итак, порядковый номер курса студента никогда не может принимать Null-значения, не может быть неизвестным составителям базы данных и не может не существовать.
Значения по умолчанию (default (
Интересно заметить, что значения по умолчанию могут быть и Null-значениями, если только Null- значения для данного конкретного атрибута объявлены допустимыми.
Теперь рассмотрим определение виртуального атрибута в операторе создания базового отношения.
Как мы уже говорили ранее, задание виртуального атрибута заключается в задании формул его вычисления через другие базовые атрибуты. Рассмотрим пример объявления виртуального атрибута «Стоимость Руб.» в виде формулы, зависящей от базовых атрибутов «Вес Кг» и «Цена Руб. за Кг».
Create table
Вес Кг
check (
not Null
default (
Цена Руб. за Кг
check (
not Null
default (
…
Стоимость Руб.
as (Вес Кг * Цена Руб. за Кг)
Чуть выше мы рассмотрели ограничения атрибутов, которые записывались как условия, зависящие от имен атрибутов. Теперь рассмотрим второй вид ограничений, объявляемых при создании базового отношения, а именно ограничения кортежа.
Что такое ограничение кортежа, чем оно отличается от ограничения атрибута? Ограничение кортежа тоже записывается как условие, зависящее от имени базового атрибута, но только в случае ограничения кортежа, условие может зависеть от нескольких имен атрибутов одновременно.
Рассмотрим пример, иллюстрирующий механизм работы с ограничениями кортежей:
Create table
min Вес Кг
check (
not Null
default (
max Вес Кг
тип значений базового атрибута max Вес Кг
check (
not Null
default (
check (0 < min Вес Кг and min Вес Кг < max Вес Кг);
Таким образом, применение ограничения к кортежу сводится к подстановке значений кортежа вместо имен атрибутов.
Продвигаемся далее в рассмотрении оператора создания базового отношения. После объявления базовых и виртуальных атрибутов могут быть объявлены, а могут и не объявляться ключи: первичный, кандидатные и внешние.
Как мы уже говорили ранее, подсхема базового отношения, которой в другом (или в том же самом) базовом отношении соответствует первичный или кандидатный ключ в контексте первого отношения называется внешним ключом. Внешние ключи представляют механизм ссылок кортежей одних отношений на кортежи других отношений, т. е. есть объявления внешних ключей связаны с навязыванием уже упоминавшихся так называемых ограничений ссылочной целостности. (Этим ограничением будет посвящена вся следующая лекция, поскольку целостность по состоянию (т. е. целостность, обеспечиваемая ограничениями целостности) – это крайне важное условие успешного функционирования базового отношения и всей базы данных.)
Объявление первичных и кандидатных ключей, в свою очередь, навязывает схеме базового отношения соответствующие ограничения уникальности, о который мы уже говорили ранее.
И, наконец, следует сказать о возможности удаления базового отношения. Нередко в практике проектирования баз данных необходимо удалить старой ненужное отношение, чтобы не загромождать программный код. Сделать это можно с помощью уже знакомого нам оператора Drop. В полном общем виде оператор удаления базового отношения выглядит следующим образом:
Drop table
3. Ограничение целостности по состоянию
Ограничение целостности реляционного объекта данных по состоянию – это так называемый инвариант данных.
При этом целостность следует уверенно отличать от безопасности, которая, в свою очередь, подразумевает защиту данных от несанкционированного доступа к ним с целью раскрытия, изменения или разрушения данных.
В общем случае ограничения целостности реляционных объектов данных классифицируются по уровням иерархии этих самых реляционных объектов данных (иерархия реляционных объектов данных – это последовательность вложенных друг в друга понятий: «атрибут – кортеж – отношение – база данных»).
Что это означает? Это означает, что ограничения целостности зависят:
1) на уровне атрибута – от значений атрибута;
2) на уровне кортежа – от значений кортежа, т. е. от значений нескольких атрибутов;
3) на уровне отношений – от отношения, т. е. от нескольких кортежей;
4) на уровне базы данных – от нескольких отношений.
Итак, теперь нам остается только рассмотреть более подробно ограничения целостности по состоянию