sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er standard begrænsningsnavnet i PostgreSQL?

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.


  1. Hvad er MariaDB Temporal Tables?

  2. Postgres pg_dump dumper databasen i en anden rækkefølge hver gang

  3. PostgreSQL GROUP BY forskellig fra MySQL?

  4. Hvordan kan vi definere output parameter størrelse i lagret procedure?