Problém:
Chcete znát výchozí názvy omezení v databázi SQL Server.
Příklad:
V naší databázi vytvoříme dvě tabulky, country
a student
, s následujícími omezeními:PRIMARY KEY
(sloupec id
v tabulkách country
a student
), FOREIGN KEY
(sloupec country_id
v tabulce student
), DEFAULT
(sloupec name
v tabulce student
), UNIQUE
(sloupec name
v tabulce country
a sloupec personal_number
v tabulce student
) a CHECK
(sloupec age
v tabulce student
).
Řešení:
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) );
Ukážeme si, jak SQL Server standardně pojmenovává omezení těchto tabulek. Chcete-li je zobrazit, použijte tento dotaz:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Zde je výsledek:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
země | PRIMÁRNÍ KLÍČ | PK__country__3213E83F7EFD826D |
země | JEDINEČNÉ | UQ__country__72E12F1BB69A1D8C |
student | PRIMÁRNÍ KLÍČ | PK__student__3213E83F357C7D1D |
student | JEDINEČNÉ | UQ__student__24E2EDD2AC2A7D87 |
student | ZKONTROLUJTE | CK__student__age__4E88ABD4 |
student | CIZI KLÍČ | FK__student__country__4F7CD00D |
Diskuse:
Když vytváříme naše tabulky, nastavujeme omezení pro některé sloupce. Neuvádíme však názvy těchto omezení, takže jsou pojmenovány ve výchozím nastavení. Jak se generují výchozí názvy pro omezení?
V SQL Server začínají výchozí názvy omezení konkrétními předponami:PK
, UQ
, CK
nebo FK
.
Výchozí název pro PRIMARY KEY
omezení začíná „PK
“, za nímž následují podtržítka („__
’), název tabulky, další podtržítka („__
’) a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu PK__country__3213E83F7EFD826D
je výchozí název pro omezení primárního klíče v tabulce country
a PK__student__3213E83F357C7D1D
je výchozí název pro omezení primárního klíče v tabulce student
.
Výchozí název pro FOREIGN KEY
omezení začíná „FK
“, za nímž následují podtržítka („__
’), název tabulky, další podtržítka („__
’), název související tabulky a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu FK__student__country__4F7CD00D
je výchozí název pro omezení cizího klíče v tabulce student
což je ekvivalentní sloupci id
v tabulce country
.
Výchozí název pro UNIQUE
omezení je „UQ
“, podtržítka („__
’), název tabulky, další podtržítka („__
’) a hexadecimální pořadové číslo vygenerované SQL Serverem. V našem příkladu UQ__country__72E12F1BB69A1D8C
je výchozí název jedinečného omezení pro název sloupce v tabulce country
a UQ__student__24E2EDD2AC2A7D87
z UNIQUE
omezení pro název sloupce tabulky student
. UNIQUE
omezení s více sloupci jsou pojmenována podobně.
Výchozí název pro CHECK
omezení je „CK
“, podtržítka („__
’), název tabulky, další podtržítka („__
’), název sloupce, další podtržítka („__“) a hexadecimální pořadové číslo generované SQL Serverem. V našem příkladu CK__student__age__4E88ABD4
je výchozí název pro CHECK
omezení pro sloupec age
tabulky student
.