Problem:
Du vil kende standardnavnene på begrænsninger i en tabel i PostgreSQL.
Eksempel:
I vores database opretter vi to tabeller, country
og student
, med følgende begrænsninger:PRIMARY KEY
(kolonnen id
i tabellerne country
og student
), FOREIGN KEY
(kolonnen country_id
i tabellen student
), DEFAULT
(kolonnen name
i tabellen student
), UNIQUE
(kolonnen name
i tabellen country
og kolonnen personal_number
i tabellen student
), og CHECK
(kolonnen age
i tabellen student
).
Løsning:
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) );
Lad os vise, hvordan PostgreSQL navngiver disse tabellers begrænsninger som standard. Brug denne forespørgsel til at se dem:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Her er resultatet:
conname | contype |
---|---|
country_pkey | p |
country_name_key | u |
student_age_check | c |
student_pkey | p |
elev_personligt_nummer_nøgle | u |
student_country_id_fkey | f |
Diskussion:
Når vi opretter vores tabeller, sætter vi begrænsninger for nogle kolonner. Vi angiver dog ikke navnene for disse begrænsninger, så de navngives som standard i PostgreSQL. Hvordan genereres standardnavnene for begrænsninger?
I PostgreSQL er standard begrænsningstyperne p
, f
, u
og c
.
PRIMARY KEY
navngives som standard med tabelnavnet, en understregning ('_
’), og ‘pkey
’. I vores resultattabel ovenfor kan du se to PRIMARY KEY
navne (skriv 'p
’) – en ved navnet country_pkey
i country
tabel og en anden med navnet student_pkey
i student
tabel.
En FOREIGN KEY
er angivet med begrænsningstypen 'f
’. Dens navn genereres af navnet på den aktuelle tabel, en understregning ('_
’), kolonnenavnet, en anden understregning (‘_
’), og ‘fkey
’. I vores eksempel er navnet på den fremmede nøglebegrænsning student_country_id_fkey
, fordi kolonnen country_id
i tabellen student
er en fremmednøgle.
Standardnavnet for en CHECK
begrænsning ligner den for en fremmed nøgle, kun at den er af begrænsningstypen 'c
’. I vores eksempel er kolonnen age
i tabellen student
har denne begrænsning, så standard begrænsningsnavnet er student_age_check
.
Standardnavnet for en UNIQUE
begrænsning (skriv 'u
’) er tabelnavnet, en understregning (‘_
’), kolonnenavnet, en anden understregning (‘_
’), og ‘key
’. I vores eksempel er tabellen student
har en UNIQUE
begrænsning med navnet student_personal_number_key
. For flere kolonner i en begrænsning følger navnet en lignende konvention, men indeholder navnene på alle kolonner i definitionen af begrænsningen.