Probleem:
U wilt de standaardnamen van beperkingen in een tabel in PostgreSQL weten.
Voorbeeld:
In onze database maken we twee tabellen, country
en student
, met de volgende beperkingen:PRIMARY KEY
(de kolom id
in de tabellen country
en student
), FOREIGN KEY
(de kolom country_id
in de tabel student
), DEFAULT
(de kolom name
in de tabel student
), UNIQUE
(de kolom name
in de tabel country
en de kolom personal_number
in de tabel student
), en CHECK
(de kolom age
in de tabel student
).
Oplossing:
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) );
Laten we laten zien hoe PostgreSQL de beperkingen van deze tabellen standaard benoemt. Gebruik deze zoekopdracht om ze te bekijken:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Hier is het resultaat:
conname | contype |
---|---|
country_pkey | p |
country_name_key | u |
student_age_check | c |
student_pkey | p |
student_personal_number_key | u |
student_country_id_fkey | f |
Discussie:
Wanneer we onze tabellen maken, stellen we beperkingen in voor sommige kolommen. We specificeren echter geen namen voor deze beperkingen, dus ze worden standaard genoemd in PostgreSQL. Hoe worden de standaardnamen voor beperkingen gegenereerd?
In PostgreSQL zijn de standaard typen beperkingen p
, f
, u
, en c
.
De PRIMARY KEY
wordt standaard genoemd met de tabelnaam, een onderstrepingsteken ('_
’), en ‘pkey
’. In onze resultatentabel hierboven ziet u twee PRIMARY KEY
namen (typ ‘p
’) – één met de naam country_pkey
in het country
tabel en een andere met de naam student_pkey
in de student
tafel.
EEN FOREIGN KEY
wordt aangegeven door het type beperking 'f
’. De naam wordt gegenereerd door de naam van de huidige tabel, een onderstrepingsteken ('_
’), de kolomnaam, een ander onderstrepingsteken (‘_
’), en ‘fkey
’. In ons voorbeeld is de naam van de externe sleutelbeperking student_country_id_fkey
, omdat de kolom country_id
in de tabel student
is een externe sleutel.
De standaardnaam voor een CHECK
beperking is vergelijkbaar met die van een externe sleutel, alleen is deze van het beperkingstype 'c
’. In ons voorbeeld is de kolom age
in de tabel student
heeft deze beperking, dus de standaardnaam van de beperking is student_age_check
.
De standaardnaam voor een UNIQUE
beperking (typ 'u
’) is de tabelnaam, een onderstrepingsteken (‘_
’), de kolomnaam, een ander onderstrepingsteken (‘_
’), en ‘key
’. In ons voorbeeld is de tabel student
heeft een UNIQUE
beperking met de naam student_personal_number_key
. Voor meerdere kolommen in een beperking volgt de naam een vergelijkbare conventie, maar bevat de namen van alle kolommen in de definitie van de beperking.