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 .