Использование ограничений таблицы
Листинг 7.8. Использование ограничений таблицы
booktown=# CREATE TABLE editions
booktown-# (isbn text,
booktown(# bookjid integer,
booktown(# edition integer,
booktown(# publisherjd integer,
booktownCl publication date.
booktown(# type char,
booktown(# CONSTRAINT pkey PRIMARY KEY (isbn),
booktown(# CONSTRAINT integrity CHECK (bookjd IS NOT NULL
booktown(# AND edition IS NOT NULL).
booktown(# CONSTRAINT book_exists FOREIGN KEY (bookjd)
booktown(# REFERENCES books (id)
booktown(# ON DELETE CASCADE
booktown(# ON UPDATE CASCADE);
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'pkey1 for table
'editions'
NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
CREATE
Первое ограничение, pkey, относится к типу PRIMARY KEY и устанавливается для таблицы по полю isbn. Оно практически не отличается от ограничения PRIMARY KEY для поля, поскольку список в данном примере состоит всего из одного поля.
Ограничение i ntegri ty гарантирует, что поля book i d и edi ti on не содержат псевдозначения NULL.
Наконец, ограничение book_exists при помощи конструкций FOREIGN KEY и REFERENCES гарантирует, что значение поля book_id встречается в поле id таблицы books. Более того, поскольку в секциях ON DELETE и ON ACTION встречается ключевое слово CASCADE, любые модификации поля ids таблице books приведут к каскадным изменениям записей в таблице editions, а при удалении записей из таблицы books будут удалены соответствующие записи таблицы editions.
Для этих ограничений в базе данных автоматически строится индекс editions_pkey по полю isbn, а также создается триггер. Индекс обеспечивает выполнение ограничения PRIMARY KEY, а триггер относится к ограничению FOREIGN KEY.