Проблем:
Искате да знаете имената по подразбиране на ограниченията в таблица в PostgreSQL.
Пример:
В нашата база данни създаваме две таблици, country
и student
, със следните ограничения:PRIMARY KEY
(колоната id
в таблиците country
и student
), FOREIGN KEY
(колоната country_id
в таблицата student
), DEFAULT
(колоната name
в таблицата student
), UNIQUE
(колоната name
в таблицата country
и колоната personal_number
в таблицата student
) и CHECK
(колоната age
в таблицата student
).
Решение:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Нека покажем как PostgreSQL наименува ограниченията на тези таблици по подразбиране. Използвайте тази заявка, за да ги видите:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Ето резултата:
conname | contype |
---|---|
country_pkey | p |
ключ_на_държава | u |
проверка на_възрастта на студента | c |
udent_pkey | p |
личен_номер_ключ на ученик | u |
udent_country_id_fkey | f |
Дискусия:
Когато създаваме нашите таблици, ние задаваме ограничения за някои колони. Въпреки това, ние не уточняваме имената за тези ограничения, така че те са именувани по подразбиране в PostgreSQL. Как се генерират имената по подразбиране за ограничения?
В PostgreSQL типовете ограничения по подразбиране са p
, f
, u
и c
.
PRIMARY KEY
е именуван по подразбиране с името на таблицата, долна черта (‘_
“) и „pkey
’. В нашата таблица с резултати по-горе можете да видите два PRIMARY KEY
имена (напишете „p
’) – един с името country_pkey
в country
таблица и друг с името student_pkey
в student
таблица.
FOREIGN KEY
се обозначава от типа на ограничението „f
’. Името му се генерира от името на текущата таблица, долна черта (‘_
’), името на колоната, друго долно черта (‘_
“) и „fkey
’. В нашия пример името на ограничението за външния ключ е student_country_id_fkey
, тъй като колоната country_id
в таблицата student
е външен ключ.
Името по подразбиране за CHECK
ограничението е подобно на това на външния ключ, само че е от тип ограничение „c
’. В нашия пример колоната age
в таблицата student
има това ограничение, така че името на ограничението по подразбиране е student_age_check
.
Името по подразбиране за UNIQUE
ограничение (напишете „u
’) е името на таблицата, долна черта (‘_
“), името на колоната, друго долно черта (‘_
“) и „key
’. В нашия пример таблицата student
има UNIQUE
ограничение с име student_personal_number_key
. За множество колони в ограничение името следва подобна конвенция, но съдържа имената на всички колони в дефиницията на ограничението.