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.