Problem:
Chcesz poznać domyślne nazwy ograniczeń w tabeli w PostgreSQL.
Przykład:
W naszej bazie danych tworzymy dwie tabele, country
i student
, z następującymi ograniczeniami:PRIMARY KEY
(kolumna id
w tabelach country
i student
), FOREIGN KEY
(kolumna country_id
w tabeli student
), DEFAULT
(kolumna name
w tabeli student
), UNIQUE
(kolumna name
w tabeli country
i kolumna personal_number
w tabeli student
) i CHECK
(kolumna age
w tabeli student
).
Rozwiązanie:
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) );
Pokażmy, jak PostgreSQL domyślnie nazywa ograniczenia tych tabel. Użyj tego zapytania, aby je zobaczyć:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Oto wynik:
conname | typ |
---|---|
country_pkey | p |
klucz_nazwa_kraju | u |
student_age_check | c |
student_pkey | p |
student_personal_number_key | u |
student_country_id_fkey | f |
Dyskusja:
Kiedy tworzymy nasze tabele, ustawiamy ograniczenia dla niektórych kolumn. Jednak nie określamy nazw tych ograniczeń, więc są one domyślnie nazywane w PostgreSQL. Jak generowane są domyślne nazwy ograniczeń?
W PostgreSQL domyślnymi typami ograniczeń są p
, f
, u
i c
.
PRIMARY KEY
jest domyślnie nazwany nazwą tabeli, podkreśleniem („_
”) i „pkey
”. W powyższej tabeli wyników możesz zobaczyć dwa PRIMARY KEY
nazwy (wpisz „p
’) – jeden o nazwie country_pkey
w country
tabela i inny o nazwie student_pkey
w student
tabela.
FOREIGN KEY
jest wskazywany przez typ ograniczenia „f
”. Jego nazwa jest generowana przez nazwę bieżącej tabeli, podkreślenie („_
’) , nazwa kolumny, kolejne podkreślenie („_
”) i „fkey
”. W naszym przykładzie nazwa ograniczenia klucza obcego to student_country_id_fkey
, ponieważ kolumna country_id
w tabeli student
jest kluczem obcym.
Domyślna nazwa dla CHECK
ograniczenie jest podobne do klucza obcego, tylko że jest typu ograniczenia „c
”. W naszym przykładzie kolumna age
w tabeli student
ma to ograniczenie, więc domyślna nazwa ograniczenia to student_age_check
.
Domyślna nazwa dla UNIQUE
ograniczenie (wpisz „u
’) to nazwa tabeli, podkreślenie („_
”), nazwa kolumny, kolejne podkreślenie („_
”) i „key
”. W naszym przykładzie tabela student
ma UNIQUE
ograniczenie o nazwie student_personal_number_key
. W przypadku wielu kolumn w ograniczeniu nazwa jest zgodna z podobną konwencją, ale zawiera nazwy wszystkich kolumn w definicji ograniczenia.