КАТЕГОРИИ: Архитектура-(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; Просмотров: 492; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |