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).
|
|
|
|
|
|
|
|
HOME_PHON char(12).
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 накладывает ограничение на порядок описания создаваемых таблиц. Действительно, если при трансляции оператора описания подчиненной таблицы с указанным внешним ключом и соответствующей ссылкой на родительскую таблицу эта родительская таблица не будет обнаружена, то мы получим сообщение об ошибке с указанием ссылки на несуществующий объект. Сначала должны быть описаны все основные таблицы, а потом подчиненные таблицы.
В нашем примере с библиотекой порядок описания таблиц следующий:
Содержание Назад Вперед