Программирование >>  Руководство по sql 

1 ... 16 17 18 [ 19 ] 20 21 22 ... 105


REFERENCES и FOREIGN KEY связывают вместе первичные и внешние ключи. Если вы вводите значение в столбец внешнего ключа, определенного с помошью предложения REFERENCES, этот столбец и столбец, на который он ссылается, должны существовать в таблице, иначе команда модификации данных будет отвергнута.

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

Столбец

Тип данных

Нуль?

Ключ

Значение по умолчанию

Ограничения

Ссылки

titlejd

char(6)

not null

первичный, уникальный

2 буквы и 4 цифры

title

varchar(80)

not null

уникальный

type

char(12)

не классифицирована

business,

mod cook,

trad cook,

psychology,

popular comp,

unclassified

pub id

char(4)

null

publishers, pub id

price

money

null

advance

money

null

ytd sale

null

contract

not null

notes

varchar(200)

null

pubdate

datetime

null

текущая дата

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). Офани-чение на первичный ключ является офаничением на всю таблицу, так как использует более одного столбца.



Столбец

Тип данных

Нуль?

Ключ

Значение по умолчанию

Ограничения

Ссылки

au id

cliar(l 1)

not null

первичный ключ

authors. au id

titlejd

char(6)

not null

первичный ключ

titles.titlejd

au ord

tinyint

null

royaltysiiare

float

null

Рис. 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))

Столбец

Тип данных

Нуль?

Ключ

Значение по умолчанию

Офаничения

Ссылки

sales.sonum

sonum

null

первичный ключ

titlejd

char(6)

not null

первичный ключ

titles.titlejd

qty shipped

smallint

null

qty shipped not > than qty ordered

qty ordered

smallint

not null

qty shipped not > than qty ordered

date shipped

datetime

null

Puc. 3.8. Использование ограничений при создании таблицы salesdetails



1 ... 16 17 18 [ 19 ] 20 21 22 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика