Problem:
Sie möchten die Standardnamen von Einschränkungen in einer Tabelle in PostgreSQL kennen.
Beispiel:
In unserer Datenbank erstellen wir zwei Tabellen, country
und student
, mit den folgenden Einschränkungen:PRIMARY KEY
(die Spalte id
in den Tabellen country
und student
), FOREIGN KEY
(die Spalte country_id
in der Tabelle student
), DEFAULT
(die Spalte name
in der Tabelle student
), UNIQUE
(die Spalte name
in der Tabelle country
und die Spalte personal_number
in der Tabelle student
) und CHECK
(die Spalte age
in der Tabelle student
).
Lösung:
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) );
Lassen Sie uns zeigen, wie PostgreSQL die Einschränkungen dieser Tabellen standardmäßig benennt. Verwenden Sie diese Abfrage, um sie anzuzeigen:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Hier ist das Ergebnis:
conname | Kontyp |
---|---|
country_pkey | p |
Ländername_Schlüssel | du |
student_age_check | c |
student_pkey | p |
student_personal_number_key | du |
student_country_id_fkey | f |
Diskussion:
Wenn wir unsere Tabellen erstellen, legen wir Einschränkungen für einige Spalten fest. Wir geben jedoch keine Namen für diese Einschränkungen an, daher werden sie standardmäßig in PostgreSQL benannt. Wie werden die Standardnamen für Einschränkungen generiert?
In PostgreSQL sind die Standardeinschränkungstypen p
, f
, u
, und c
.
Der PRIMARY KEY
wird standardmäßig mit dem Tabellennamen, einem Unterstrich (‘_
“) und „pkey
’. In unserer obigen Ergebnistabelle sehen Sie zwei PRIMARY KEY
Namen (geben Sie ‘p
’) – eine mit dem Namen country_pkey
im country
Tabelle und eine weitere mit dem Namen student_pkey
im student
Tabelle.
Ein FOREIGN KEY
wird durch den Constraint-Typ ‘f
angezeigt ’. Sein Name wird aus dem Namen der aktuellen Tabelle, einem Unterstrich (‘_
’), der Spaltenname, ein weiterer Unterstrich (‘_
“) und „fkey
’. In unserem Beispiel lautet der Name der Fremdschlüsselbeschränkung student_country_id_fkey
, da die Spalte country_id
in der Tabelle student
ist ein Fremdschlüssel.
Der Standardname für einen CHECK
Die Einschränkung ähnelt der eines Fremdschlüssels, nur dass sie vom Einschränkungstyp "c
" ist ’. In unserem Beispiel die Spalte age
in der Tabelle student
hat diese Einschränkung, daher lautet der Standardname der Einschränkung student_age_check
.
Der Standardname für einen UNIQUE
Einschränkung (geben Sie ‘u
’) ist der Tabellenname, ein Unterstrich (‘_
’), der Spaltenname, ein weiterer Unterstrich (‘_
“) und „key
’. In unserem Beispiel die Tabelle student
hat einen UNIQUE
Einschränkung namens student_personal_number_key
. Bei mehreren Spalten in einer Einschränkung folgt der Name einer ähnlichen Konvention, enthält jedoch die Namen aller Spalten in der Definition der Einschränkung.