Problem:
Chcesz poznać domyślne nazwy ograniczeń w bazie danych SQL Server.
Przykład:
W naszej bazie danych tworzymy dwie tabele, country i student , z następującymi ograniczeniami:PRIMARY KEY (kolumna id w tabelach country i student ), FOREIGN KEY (kolumna country_id w tabeli student ), DEFAULT (kolumna name w tabeli student ), UNIQUE (kolumna name w tabeli country i kolumna personal_number w tabeli student ) i CHECK (kolumna age w tabeli student ).
Rozwiązanie:
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) );
Pokażmy, jak SQL Server domyślnie nazywa ograniczenia tych tabel. Użyj tego zapytania, aby je zobaczyć:
SELECT TABLE_CATALOG, TABLE_NAME,
CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Oto wynik:
| TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
|---|---|---|
| kraj | KLUCZ PODSTAWOWY | PK__country__3213E83F7EFD826D |
| kraj | UNIKALNE | UQ__country__72E12F1BB69A1D8C |
| uczeń | KLUCZ PODSTAWOWY | PK__student__3213E83F357C7D1D |
| uczeń | UNIKALNE | UQ__student__24E2EDD2AC2A7D87 |
| uczeń | SPRAWDŹ | CK__student__wiek__4E88ABD4 |
| uczeń | KLUCZ OBCY | FK__student__country__4F7CD00D |
Dyskusja:
Kiedy tworzymy nasze tabele, ustawiamy ograniczenia dla niektórych kolumn. Jednak nie określamy nazw dla tych ograniczeń, więc są one nazwane domyślnie. Jak generowane są domyślne nazwy ograniczeń?
W SQL Server domyślne nazwy ograniczeń zaczynają się od określonych przedrostków:PK , UQ , CK lub FK .
Domyślna nazwa PRIMARY KEY ograniczenie zaczyna się od „PK ”, po którym następuje podkreślenie („__ ’), nazwa tabeli, więcej podkreśleń („__ ’) oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie PK__country__3213E83F7EFD826D to domyślna nazwa ograniczenia klucza podstawowego w tabeli country i PK__student__3213E83F357C7D1D to domyślna nazwa ograniczenia klucza podstawowego w tabeli student .
Domyślna nazwa FOREIGN KEY ograniczenie zaczyna się od „FK ”, po którym następuje podkreślenie („__ ’), nazwa tabeli, więcej podkreśleń („__ ’), nazwę powiązanej tabeli oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie FK__student__country__4F7CD00D to domyślna nazwa ograniczenia klucza obcego w tabeli student która jest odpowiednikiem kolumny id w tabeli country .
Domyślna nazwa dla UNIQUE ograniczenie to „UQ ’, podkreślenia (‘__ ’), nazwa tabeli, więcej podkreśleń („__ ’) oraz szesnastkowy numer sekwencyjny wygenerowany przez program SQL Server. W naszym przykładzie UQ__country__72E12F1BB69A1D8C to domyślna nazwa ograniczenia przez unikalność dla nazwy kolumny w tabeli country i UQ__student__24E2EDD2AC2A7D87 UNIQUE ograniczenie dla nazwy kolumny tabeli student . UNIQUE ograniczenia z wieloma kolumnami są nazywane w podobny sposób.
Domyślna nazwa dla CHECK ograniczenie to „CK ’, podkreślenia (‘__ ’), nazwa tabeli, więcej podkreśleń („__ ”), nazwę kolumny, więcej podkreśleń („__”) i szesnastkowy numer sekwencyjny wygenerowany przez SQL Server. W naszym przykładzie CK__student__age__4E88ABD4 jest domyślną nazwą dla CHECK ograniczenie dla kolumny age tabeli student .