AUTOR IS NULL AND COAUTOR
CONSTRAINT CK_BOOKS CHECK (NOT ( AUTOR IS NULL AND COAUTOR IS NOT NULL))
);
CREATE TABLE READERS
(
READER_ID |
Small int |
PRIMARY KEY |
||
FIRST_NAME |
char(30) |
NOT NULL. |
||
LAST_NAME |
char(30) |
NOT NULL. |
||
ADRES |
char(50). |
|
||
WORK_PHON char(12).
BIRTH_DAY date CHECK( DateDiff(year, GetDate().BIRTH_DAY) >=17 ),
CONSTRAINT CK_READERS CHECK (HOME_PHON IS NOT NULL OR WORK_PHON IS NOT NULL) );
CREATE TABLE CATALOG
(
ID_CATALOG Smallint PRIMARY KEY,
KNOWELEDGE_AREA varchar(150)
);
CREATE TABLE EXEMPLAR
(
ID_EXEMPLAR Int NOT NULL,
ISBN varchar(14) NOT NULL FOREIGN KEY references BOOKS(ISBN),
READER_ID Smallint(4) NULL FOREIGN KEY references REABERS (READER_ID).
DATA_IN date.
DATA_OUT date.
EXIST Logical.
PRIMARY KEY (ID_EXEMPLAR, ISBN)
);
CREATE TABLE RELATION_1
(
ISBN varchar(14) NOT NULL
FOREIGN KEY references BOOKS(ISBN).
ID_CATALOG smallint NOT NULL
FOREIGN KEY references CATALOG(ID_CATALOG).
CONSTRAINT PK_RELATION_1
PRIMARY KEY (ISBN.ID_CATALOG) ).
Операторы языка SQL, как указывалось ранее, транслируются в режиме интерпретации, в отличие от большинства алгоритмических языков, трансляторы для которых выполнены по принципу компиляции. В режиме интерпретации каждый оператор отдельно транслируется, то есть переводится в машинные коды, и тут же выполняется. В режиме компиляции вся программа, то есть совокупность операторов, сначала переводится в машинные коды, а затем может быть выполнена как единое целое. Такая особенность SQL накладывает ограничение на порядок описания создаваемых таблиц. Действительно, если при трансляции оператора описания подчиненной таблицы с указанным внешним ключом и соответствующей ссылкой на родительскую таблицу эта родительская таблица не будет обнаружена, то мы получим сообщение об ошибке с указанием ссылки на несуществующий объект. Сначала должны быть описаны все основные таблицы, а потом подчиненные таблицы.
В нашем примере с библиотекой порядок описания таблиц следующий: