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

Qual è il nome del vincolo predefinito in PostgreSQL?

Problema:

Vuoi conoscere i nomi predefiniti dei vincoli in una tabella in PostgreSQL.

Esempio:

Nel nostro database creiamo due tabelle, country e student , con i seguenti vincoli:PRIMARY KEY (la colonna id nelle tabelle country e student ), FOREIGN KEY (la colonna country_id nella tabella student ), DEFAULT (la colonna name nella tabella student ), UNIQUE (la colonna name nella tabella country e la colonna personal_number nella tabella student ), e CHECK (la colonna age nella tabella student ).

Soluzione:

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)
);

Mostriamo come PostgreSQL nomina i vincoli di queste tabelle per impostazione predefinita. Usa questa query per vederli:

SELECT conname, contype
FROM pg_catalog.pg_constraint;

Ecco il risultato:

conname contipo
paese_pkey p
country_name_key tu
controllo_età_studente c
chiave_studente p
chiave_numero_personale_studente tu
student_country_id_fkey f

Discussione:

Quando creiamo le nostre tabelle, impostiamo dei vincoli per alcune colonne. Tuttavia, non specifichiamo i nomi per questi vincoli, quindi sono nominati per impostazione predefinita in PostgreSQL. Come vengono generati i nomi predefiniti per i vincoli?

In PostgreSQL, i tipi di vincolo predefiniti sono p , f , u e c .

La PRIMARY KEY è denominato per impostazione predefinita con il nome della tabella, un trattino basso ('_ ') e 'pkey '. Nella nostra tabella dei risultati sopra, puoi vedere due PRIMARY KEY nomi (digitare 'p ') – uno dal nome country_pkey nel country table e un altro dal nome student_pkey nello student tabella.

Una FOREIGN KEY è indicato dal tipo di vincolo 'f '. Il suo nome è generato dal nome della tabella corrente, un trattino basso ('_ ') , il nome della colonna, un altro carattere di sottolineatura ('_ ') e 'fkey '. Nel nostro esempio, il nome del vincolo di chiave esterna è student_country_id_fkey , perché la colonna country_id nella tabella student è una chiave esterna.

Il nome predefinito per un CHECK il vincolo è simile a quello di una chiave esterna, solo che è del tipo di vincolo 'c '. Nel nostro esempio, la colonna age nella tabella student ha questo vincolo, quindi il nome del vincolo predefinito è student_age_check .

Il nome predefinito per un UNIQUE vincolo (digitare 'u ') è il nome della tabella, un trattino basso ('_ '), il nome della colonna, un altro carattere di sottolineatura ('_ ') e 'key '. Nel nostro esempio, la tabella student ha un UNIQUE vincolo denominato student_personal_number_key . Per più colonne in un vincolo, il nome segue una convenzione simile ma contiene i nomi di tutte le colonne nella definizione del vincolo.