|
Программирование >> Руководство по sql
REFERENCES и FOREIGN KEY связывают вместе первичные и внешние ключи. Если вы вводите значение в столбец внешнего ключа, определенного с помошью предложения REFERENCES, этот столбец и столбец, на который он ссылается, должны существовать в таблице, иначе команда модификации данных будет отвергнута. Перед тем как определять ограничения и значения по умолчанию, четко сформулируйте свои требования. На рис. 3.6 представлены значения по умолчанию и Офаничения, используемые в таблице titles.
Puc. 3.6. Использование ограничений при создании таблицы titles Синтаксис этих предложений может быть различным в разных системах, так что уточните его из руководства к своей системе. Обычно они следуют после определения столбца. Кроме того, эти предложения можно узнать по ключевым словам DEFAUL, CHECK, PRIMARY KEY, UNIQUE, FOREIGN KEY и REFERENCES. Помимо этого, может присутствовать слово CONSTRAINT и имя офаничения. (Задание имен офаничениям упрощает процесс их поиска и изменения. Хотя в большинстве систем для ограничений генерируются специальные метки, использовать их обычно неудобно.) Ограничения на таблицу лучше всего помещать после списка всех ее элементов (хотя это и необязательно). Столбцы могут иметь более одного Офаничения, причем офаничения не разделяются запятыми: CREATE TABLE имя таблицы (имя столбца тип [NULL NOT NULL] [ограничение на столбец]... [ , имя столбца тип[NULL NOT NULL; [ограничение на столбец]... ]... [ограничение на таблицу]...) DEFAULT значение по умолчанию] [DEFAULT значение по умолчанию] Ниже представлена SQL-версия таблицы titles (см. рис. 3.6) для SQL Anywhere (под названием titlescnstr), использующая значения по умолчанию и офаничения. (Предложения LIKE и IN рассматриваются в следующей главе. Для столбца pubdate SQL Anywhere использует значение по умолчанию CURRENT DATE, соответствующее текущей дате. Аналогичные функции имеются и в других системах.) create table titlescnstr (title id char(6) not null primary key check (title id like [A-Z] [A-Z] [0-9] [0-9] [0-9] [0-9] ), title varchar(80) not null unique, type char(12) default unclassified null check (type in ( business, mod cook, trad cook, psychology, popular comp, unclassified )), pub id char(4) null references publishers (pub id), price money null, advance money null, ytd sales int null, contract bit not null, notes varchar(200) null, pubdate datetime null default current date) Код для этой же таблицы в Sybase SQL Server имеет ряд отличий: SQL: create table titlescnstr (title id char(6) not null constraint tididx primary key constraint tidcheck check (title id like [A-Z] [A-Z] [0-9] [0-9] [0-9] [0-9] ), title varchar(80) not null constraint titleidx unique, type char(12) default unclassified null constraint typecheck check (type in (business, mod cook, trad cook, psychology, popular comp, unclassified )), pub id char(4) null references publishers (pub id), price money null, advance money null, ytd sales int null, contract bit not null, notes varchar(200) null, pubdate datetime default getdate ( ) null ) Уточните соответствующие детали в своем руководстве по системе. Ограничения на таблицу используют более одного столбца. На рис. 3.7 показаны офаничения для таблицы titleauthors. Ниже показано, как в SQL Anywhere реализуются ссылки на примере таблицы titleauthors (во избежание недоразумений она называется titleauthorscnstr). Офани-чение на первичный ключ является офаничением на всю таблицу, так как использует более одного столбца.
Рис. 3.7. Использование ограничений при создании таблицы titleauthors SQL: create table titleauthorscnstr (au id char(ll) not null references authors (au id), title id char(6) not null references titles (title id), au ord tinyint null, royaltyshare float null, primary key (au id, title id)) Ограничения с проверкой также могут применяться ко всей таблице, если они используют более одного столбца (столбцы должны принадлежать одной таблице). Например, в таблице salesdetails есть столбцы для описания количества заказанных и отправленных книг. В этом случае можно использовать табличное офаничение, проверяющее, что количество отправленных не превышает количество заказанных книг. Все ограничения для таблицы salesdetails представлены на рис. 3.8. SQL: create table salesdetailscnstr (sonum int not null references sales (sonum) , qty ordered smallint not null, qty shipped smallint null, title id char(6) not null references titles (title id), date shipped datetime null, check (qty shipped <= qty ordered), primary key (sonum, title id))
Puc. 3.8. Использование ограничений при создании таблицы salesdetails
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |