sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är standardbegränsningsnamnet i PostgreSQL?

Problem:

Du vill veta standardnamnen på begränsningar i en tabell i PostgreSQL.

Exempel:

I vår databas skapar vi två tabeller, country och student , med följande begränsningar:PRIMARY KEY (kolumnen id i tabellerna country och student ), FOREIGN KEY (kolumnen country_id i tabellen student ), DEFAULT (kolumnen name i tabellen student ), UNIQUE (kolumnen name i tabellen country och kolumnen personal_number i tabellen student ), och CHECK (kolumnen 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)
);

Låt oss visa hur PostgreSQL namnger begränsningarna för dessa tabeller som standard. Använd den här frågan för att se dem:

SELECT conname, contype
FROM pg_catalog.pg_constraint;

Här är resultatet:

conname contype
country_pkey p
country_name_key u
student_age_check c
student_pkey p
student_personlig_nummernyckel u
student_country_id_fkey f

Diskussion:

När vi skapar våra tabeller sätter vi begränsningar för vissa kolumner. Vi anger dock inte namnen för dessa begränsningar, så de namnges som standard i PostgreSQL. Hur genereras standardnamnen för begränsningar?

I PostgreSQL är standardtyperna p , f , u och c .

PRIMARY KEY namnges som standard med tabellnamnet, ett understreck ('_ ’), och ‘pkey ’. I vår resultattabell ovan kan du se två PRIMARY KEY namn (skriv 'p ’) – en med namnet country_pkey i country tabell och en annan med namnet student_pkey i student bord.

En FOREIGN KEY indikeras av begränsningstypen 'f ’. Dess namn genereras av namnet på den aktuella tabellen, ett understreck ('_ ’), kolumnnamnet, ett annat understreck (‘_ ’), och ‘fkey ’. I vårt exempel är namnet på den främmande nyckelbegränsningen student_country_id_fkey , eftersom kolumnen country_id i tabellen student är en främmande nyckel.

Standardnamnet för en CHECK begränsning liknar den för en främmande nyckel, bara att den är av begränsningstypen 'c ’. I vårt exempel är kolumnen age i tabellen student har denna begränsning, så standardnamnet på begränsningen är student_age_check .

Standardnamnet för en UNIQUE begränsning (skriv 'u ’) är tabellnamnet, ett understreck (‘_ ’), kolumnnamnet, ett annat understreck (‘_ ’), och ‘key ’. I vårt exempel, tabellen student har en UNIQUE begränsning med namnet student_personal_number_key . För flera kolumner i en begränsning följer namnet en liknande konvention men innehåller namnen på alla kolumner i definitionen av begränsningen.


  1. Returnera tabelltyp från en funktion i PostgreSQL

  2. 2 sätt att lista tabellerna i en SQLite-databas

  3. Jag får hela tiden felrelationen [TABELL] existerar inte

  4. Hur man hittar medelvärdet för en numerisk kolumn i SQL