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.