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 .