Problema:
Vuoi conoscere i nomi predefiniti dei vincoli nel database di SQL Server.
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 references country(id) );
Mostriamo come SQL Server denomina i vincoli di queste tabelle per impostazione predefinita. Usa questa query per vederli:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Ecco il risultato:
TABLE_NAME | TIPO_VINCENTE | CONSTRAINT_NAME |
---|---|---|
paese | CHIAVE PRIMARIA | PK__paese__3213E83F7EFD826D |
paese | UNICO | UQ__paese__72E12F1BB69A1D8C |
studente | CHIAVE PRIMARIA | PK__studente__3213E83F357C7D1D |
studente | UNICO | UQ__studente__24E2EDD2AC2A7D87 |
studente | CONTROLLA | CK__student__age__4E88ABD4 |
studente | CHIAVE ESTERA | FK__student__country__4F7CD00D |
Discussione:
Quando creiamo le nostre tabelle, impostiamo dei vincoli per alcune colonne. Tuttavia, non specifichiamo i nomi per questi vincoli, quindi sono denominati per impostazione predefinita. Come vengono generati i nomi predefiniti per i vincoli?
In SQL Server, i nomi dei vincoli predefiniti iniziano con prefissi specifici:PK
, UQ
, CK
o FK
.
Il nome predefinito per una PRIMARY KEY
il vincolo inizia con "PK
', seguito da trattini bassi ('__
'), il nome della tabella, più trattini bassi ('__
') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, PK__country__3213E83F7EFD826D
è il nome predefinito per il vincolo della chiave primaria nella tabella country
e PK__student__3213E83F357C7D1D
è il nome predefinito per il vincolo della chiave primaria nella tabella student
.
Il nome predefinito per una FOREIGN KEY
il vincolo inizia con "FK
', seguito da trattini bassi ('__
'), il nome della tabella, più trattini bassi ('__
'), il nome della tabella correlata e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, FK__student__country__4F7CD00D
è il nome predefinito per il vincolo di chiave esterna nella tabella student
che è equivalente alla colonna id
nella tabella country
.
Il nome predefinito per un UNIQUE
il vincolo è "UQ
', sottolinea ('__
'), il nome della tabella, più trattini bassi ('__
') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, UQ__country__72E12F1BB69A1D8C
è il nome predefinito del vincolo univoco per il nome della colonna nella tabella country
e UQ__student__24E2EDD2AC2A7D87
del UNIQUE
vincolo per il nome della colonna della tabella student
. UNIQUE
i vincoli con più colonne sono denominati in uno schema simile.
Il nome predefinito per un CHECK
il vincolo è 'CK
', sottolinea ('__
'), il nome della tabella, più trattini bassi ('__
'), il nome della colonna, più caratteri di sottolineatura ('__') e un numero di sequenza esadecimale generato da SQL Server. Nel nostro esempio, CK__student__age__4E88ABD4
è il nome predefinito per CHECK
vincolo per la colonna age
della tabella student
.