Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ограничения домена




Ограничения домена представляют ограничения, применяемые к каждому столбцу, объявленному принадлежащим к данному домену.

Пример 9.4. Приведем пример определения домена:

CREATE DOMAIN COLOR CHAR(6) DEFAULT ‘???’

CONSTRAINT VALID_COLORS

CHECK (VALUE IN

(‘Красный’, ‘Желтый’, ‘Синий’,’Зеленый’,’???’)

Предположим оператор CREATE TABLE для базовой таблицы P выглядит следующим образом:

CREATE TABLE P (…, COLOR COLOR, …);

Если пользователь укажет в качестве значения атрибута COLOR значение, не принадлежащие множеству допустимых значений, то операция не будет выполнена и система выдаст сообщение о нарушении ограничения VALID_COLORS.

Язык SQL позволяет не только перечислить допустимые значения, но включать в определение ограничений доменов логические выражения произвольной сложности.

Ограничения базовой таблицы

В языке SQL существуют следующие виды ограничений базовой таблицы:

§ Определение потенциального ключа

§ Определение внешнего ключа

§ Определение «проверочного условия»

Замечание. В языке SQL каждому определению ограничения может предшествовать предложение вида CONSTRAINT <имя ограничения>, задающее имя нового ограничения.

Потенциальные ключи

Определение потенциального ключа записывается в следующем виде:

UNIQUE (<список имен столбцов>)

Возможна и иная форма записи:

PRIMARY KEY (<список имен столбцов>)

В обоих случаях <список имен столбцов> не должен быть пустым. Для данной базовой таблицы может существовать не более одной спецификации PRIMARY KEY (первичный ключ) и любое количество спецификаций UNIQUE (альтернативные ключи). В случае первичного ключа для каждого из указанных столбцов дополнительно подразумевается наличие в определении спецификации NOT NULL, даже если она не была указана явно.

Внешние ключи

Определение внешнего ключа записывается следующим образом:

FOREIGN KEY (<список имен столбцов>)

REFERENCES <имя базовой таблицы> [ <список имен столбцов> ]

[ ON DELETE <ссылочная операция> ]

[ ON UPDATE <ссылочная операция> ]

Здесь параметр <ссылочная операция> может принимать NO ACTION (по умолчанию), CASCADE, SET DEFAULT, SET NULL. Второй параметр <список имен столбцов> необходим, если внешний ключ ссылается на потенциальный ключ, который не является первичным ключом.

Замечание. Соответствие «внешний ключ – потенциальный ключ» устанавливается на основе позиции (слева направо) в списках имен атрибутов.

Проверочные условия

Определение проверочного условия имеет следующий вид:

CHECK (<условное выражение>)

Попытка создания строки r в базовой таблице T рассматривается как нарушение проверочного ограничения для таблицы T, если в результате вычисления указанного в этом ограничении условного выражения для строки r будет получено значение ложь.

Пример. Представим определение базовой таблицы, в котором используются ограничения всех трех типов:

CREATE TABLE SP

(S# S# NOT NULL, P# P# NOT NULL, QTY QTY NOT NULL,

PRIMARY KEY (S#, P#),

FOREIGN KEY (S#) REFERENCES (S)

ON DELETE CASCADE

ON UPDATE CASCADE,

FOREIGN KEY (P#) REFERENCES (P)

ON DELETE CASCADE

ON UPDATE CASCADE,

CHECK (QTY > 0 AND QTY < 5001));

Здесь предполагается, что используемые типы уже определены, а атрибуты S# и P# определены как первичные ключи для таблиц S и P. Также использовано сокращение проверочного условия CHECK (<имя столбца> IS NOT NULL) до простой спецификации NOT NULL.

Считается, что пустая таблица всегда удовлетворяет всем ограничениям.

Утверждения

Общие ограничения создаются с помощью оператора CREATE ASSERTION, имеющий следующий синтаксис:

CREATE ASSERTION <имя ограничения>

CHECK (<условное выражение>);

Для отмены общего ограничения используется оператор DROP ASSERTION:

DROP ASSERTION <имя ограничения>;

Данный оператор не содержит опций RESTRICT и CASCADE.

Пример 9.5. Приведем несколько примеров записи утверждений:

Каждый поставщик должен иметь статус не менее 5.

CREATE ASSERTION AS1 CHECK

((SELECT MIN (S.STATUS) FROM S) > 4)

Значение веса любой детали должно быть положительным:

CREATE ASSERTION AS2 CHECK

(NOT EXISTS (SELECT * FROM P

WHERE NOT (P.WEIGHT > 0)));

Поставщики со статусом меньшим 20, не имеют права поставлять любую деталь в количестве более 500 штук:

CREATE ASSERTION AS3 CHECK

(NOT EXISTS (SELECT * FROM S, SP

WHERE S.STATUS < 20

AND S.S# = SP.S#

AND SP.QTY > 500));


 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 457; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.