Пример 6.1:
Создание отношения группы:
CREATE TABLE "group"
(
"name" text,
num integer,
"Fio" text
);
Ограничения в таблицах
Ранее нами уже были рассмотрены некоторые ограничения,
используемые в среде MS Access. Теперь рассмотрим ограничения,
использование которых предоставляет нам PostgreSQL.
Ограничение (constraint) представляет собой особый атрибут таблицы,
который устанавливает критерии допустимости для содержимого ее полей.
Соблюдение этих правил помогает предотвратить заполнение базы
ошибочными или неподходящими данными.
Формат установки ограничений следующий:
[ CONSTRAINT ограничение ]
{ NOT NULL | UNIQUE | PRIMARY KEY | DEFAULT значение | CHECK (
условие ) |
REFERENCES таблица [ ( поле ) ]
[ MATCH FULL | MATCH PARTIAL ]
[ ON DELETE операция ]
[ ON UPDATE операция ]
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] }
Определение следует в команде CREATE TABLE сразу же за типом
ограничиваемого поля и предшествует запятой, отделяющей его от
следующего поля. Ограничения могут устанавливаться для любого
количества полей, а ключевое слово CONSTRAINT и идентификатор
ограничение не обязательны.
Существует шесть типов ограничений полей, задаваемых при помощи
специальных ключевых слов. Некоторые из них косвенно устанавливаются
при создании ограничений другого типа. Некоторые из типов ограничений
полей перечислены ниже (более подробно [6]):
• NOT NULL. Поле не может содержать псевдозначение NULL.
Ограничение NOT NULL эквивалентно ограничению CHECK (поле NOT
NULL).
• UNIQUE. Поле не может содержать повторяющиеся значения.
Следует учитывать, что ограничение UNIQUE допускает многократное
вхождение псевдозначений NULL, поскольку формально NULL не совпадает
ни с каким другим значением.
• PRIMARY KEY. Автоматически устанавливает ограничения UNIQUE
и NOT NULL, а для заданного поля создается индекс. В таблице может
устанавливаться только одно ограничение первичного ключа.
• DEFAULT значение. Пропущенные значения поля заменяются
заданной величиной. Значение по умолчанию должно относиться к типу
данных, соответствующему типу поля. В PostgreSQL 7.1.х значение по
умолчанию не может задаваться при помощи подзапроса.
• CHECK условие. Команда INSERT или UPDATE для записи
завершается успешно лишь при выполнении заданного условия (выражения,
возвращающего логический результат). При установке ограничения поля в
секции CHECK может использоваться только поле, для которого
устанавливается ограничение.
• REFERENCES. Это ограничение состоит из нескольких секций,
которые перечислены ниже.
о REFERENCES таблица [ ( поле ) ]. Входные значения
ограничиваемого поля сравниваются со значениями другого поля в
заданной таблице. Если совпадения отсутствуют, команда INSERT или
UPDATE завершается неудачей. Если параметр поле не указан,
проверка выполняется по первичному ключу. Ограничение
REFERENCES похоже на ограничение таблицы FOREIGN KEY,
описанное в следующем пункте этого подраздела. Действительно,
между этими ограничениями есть много общего.
о ON DELETE операция. При выполнении команды DELETE для
заданной таблицы с ограничиваемым полем выполняется одна из
следующих операций: NО ACTION (если удаление приводит к
нарушению целостности ссылок, происходит ошибка; используется по
умолчанию, если операция не указана), RESTRICT (аналогично NО
ACTION), CASCADE (удаление всех записей, содержащих ссылки на
удаляемую запись), SET NULL (поля, содержащие ссылки на
удаляемую запись, заменяются псевдозначениями NULL), SET
DEFAULT (полям, содержащим ссылки на удаляемую запись,
присваивается значение по умолчанию).
о ON UPDATE операция. При выполнении команды UPDATE для
заданной таблицы выполняется одна из операций, описанных выше. По
умолчанию используется значение NО ACTION. Если выбрана
операция CASCADE, все записи, содержащие ссылки на обновляемую
запись, обновляются новым значением (вместо удаления, как в случае с
ON DELETE CASCADE).
В ограничениях таблиц, в отличие от ограничений полей, могут
участвовать сразу несколько полей таблицы. Синтаксис ограничения
таблицы:
[ CONSTRAINT ограничение ]
{ UNIQUE ( поле [....]) |
PRIMARY KEY ( поле [. ...] ) |
CHECK ( условие ) |
FOREIGN KEY ( поле [. ... ] )
REFERENCES таблица [ ( поле [. ] ) ]
[ MATCH FULL | MATCH PARTIAL ]
[ ON DELETE операция ]
[ ON UPDATE операция ]
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
Секция CONSTRAINT ограничение определяет необязательное имя.
Ограничениям рекомендуется присваивать содержательные имена вместо
автоматически сгенерированных имен, не несущих никакой полезной
информации. В будущем имя также может пригодиться и для удаления
ограничения.
В примере 6.2 первое ограничение, pkey, относится к типу PRIMARY
KEY и устанавливается для таблицы по полю isbn. Оно практически не
отличается от ограничения PRIMARY KEY для поля, поскольку список в
данном примере состоит всего из одного поля.
Достарыңызбен бөлісу: |