дополнительная связующая таблица между книгами
Набор операторов языка SQL принято называть не программой, а скриптом. Тогда скрипт, который добавит набор из 5 взаимосвязанных таблиц базы данных «Библиотека» в существующую базу данных, будет выглядеть следующим образом:
CREATE TABLE BOOKS
(
ISBN varchar(14) NOT NULL .
TITLE varchar(120) NOT NULL.
AUTOR varchar (30) NULL.
COAUTOR varchar(30) NULL.
YEAR_PUBL smallint NOT NULL.
PUBLICH varchar(20) NULL.
PAGES smallInt NOT NULL.
CONSTRAINT PK_BOOKS PRIMARY KEY (ISBN).
CONSTRAINT DF_ YEAR_PUBL DEFAULT (Year(GetDate()).
CONSTRAINT CK_ YEAR_PUBL CHECK (YEAR_PUBL >= 1960 AND
YEAR_PUBL <= YEAR(GetDate())).
CONSTRANT CK_PAGES CHECK (PAGES > = 5 AND PAGES <= 1000).
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_DAYdate СНЕCK 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(l50)
);
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 READERS (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 small int NOT NULL
FOREIGN KEY references CATALOG (ID_CATALOG),
CONSTRAINT PK_RELATION_1 PRIMARY KEY (ISBN.ID_CATALOG)
);
При написании скрипта мы добавили в оператор создания таблицы «Читатели» ограничение на уровне таблицы, которое связано с обязательным наличием хотя бы одного из двух телефонов.