Problem:
Du vil kende standardnavnene på begrænsninger i SQL Server-databasen.
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 references country(id) );
Lad os vise, hvordan SQL Server navngiver disse tabellers begrænsninger som standard. Brug denne forespørgsel til at se dem:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Her er resultatet:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
land | PRIMÆR NØGLE | PK__country__3213E83F7EFD826D |
land | UNIKK | UQ__country__72E12F1BB69A1D8C |
elev | PRIMÆR NØGLE | PK__student__3213E83F357C7D1D |
elev | UNIKK | UQ__student__24E2EDD2AC2A7D87 |
elev | TJEK | CK__student__age__4E88ABD4 |
elev | UDLANDS NØGLE | FK__student__country__4F7CD00D |
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. Hvordan genereres standardnavnene for begrænsninger?
I SQL Server starter standard begrænsningsnavnene med specifikke præfikser:PK
, UQ
, CK
eller FK
.
Standardnavnet for en PRIMARY KEY
begrænsning starter med 'PK
’, efterfulgt af understregninger (‘__
’), tabelnavnet, flere understregninger (‘__
’), og et hexadecimalt sekvensnummer genereret af SQL Server. I vores eksempel, PK__country__3213E83F7EFD826D
er standardnavnet for den primære nøglebegrænsning i tabellen country
og PK__student__3213E83F357C7D1D
er standardnavnet for den primære nøglebegrænsning i tabellen student
.
Standardnavnet for en FOREIGN KEY
begrænsning starter med 'FK
’, efterfulgt af understregninger (‘__
’), tabelnavnet, flere understregninger (‘__
’), navnet på den relaterede tabel og et hexadecimalt sekvensnummer genereret af SQL Server. I vores eksempel, FK__student__country__4F7CD00D
er standardnavnet for den fremmede nøgle-begrænsning i tabellen student
hvilket svarer til kolonnen id
i tabellen country
.
Standardnavnet for en UNIQUE
begrænsning er 'UQ
’, understreger (‘__
’), tabelnavnet, flere understregninger (‘__
’), og et hexadecimalt sekvensnummer genereret af SQL Server. I vores eksempel, UQ__country__72E12F1BB69A1D8C
er standardnavnet på den unikke begrænsning for kolonnenavnet i tabellen country
og UQ__student__24E2EDD2AC2A7D87
af UNIQUE
begrænsning for kolonnenavnet på tabellen student
. UNIQUE
begrænsninger med flere kolonner er navngivet i et lignende mønster.
Standardnavnet for en CHECK
begrænsning er 'CK
’, understreger (‘__
’), tabelnavnet, flere understregninger (‘__
’), kolonnenavnet, flere understregninger (‘__’) og et hexadecimalt sekvensnummer genereret af SQL Server. I vores eksempel, CK__student__age__4E88ABD4
er standardnavnet for CHECK
begrænsning for kolonnen age
i tabellen student
.