Проблем:
Искате да знаете имената по подразбиране на ограниченията в таблица в 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 . За множество колони в ограничение името следва подобна конвенция, но съдържа имената на всички колони в дефиницията на ограничението.