Probleem:
U wilt de standaardnamen van beperkingen in de SQL Server-database weten.
Voorbeeld:
In onze database maken we twee tabellen, country
en student
, met de volgende beperkingen:PRIMARY KEY
(de kolom id
in de tabellen country
en student
), FOREIGN KEY
(de kolom country_id
in de tabel student
), DEFAULT
(de kolom name
in de tabel student
), UNIQUE
(de kolom name
in de tabel country
en de kolom personal_number
in de tabel student
), en CHECK
(de kolom age
in de tabel student
).
Oplossing:
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) );
Laten we laten zien hoe SQL Server standaard de beperkingen van deze tabellen benoemt. Gebruik deze zoekopdracht om ze te bekijken:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Hier is het resultaat:
TABLE_NAME | CONSTRRAINT_TYPE | CONSTRRAINT_NAME |
---|---|---|
land | PRIMAIRE SLEUTEL | PK__country__3213E83F7EFD826D |
land | UNIEK | UQ__country__72E12F1BB69A1D8C |
student | PRIMAIRE SLEUTEL | PK__student__3213E83F357C7D1D |
student | UNIEK | UQ__student__24E2EDD2AC2A7D87 |
student | CONTROLEER | CK__student__age_4E88ABD4 |
student | BUITENLANDSE SLEUTEL | FK__student__country_4F7CD00D |
Discussie:
Wanneer we onze tabellen maken, stellen we beperkingen in voor sommige kolommen. We specificeren echter geen namen voor deze beperkingen, dus ze worden standaard genoemd. Hoe worden de standaardnamen voor beperkingen gegenereerd?
In SQL Server beginnen de namen van de standaardbeperkingen met specifieke voorvoegsels:PK
, UQ
, CK
, of FK
.
De standaardnaam voor een PRIMARY KEY
beperking begint met 'PK
’, gevolgd door onderstrepingstekens (‘__
’), de tabelnaam, meer onderstrepingstekens (‘__
'), en een hexadecimaal volgnummer gegenereerd door SQL Server. In ons voorbeeld PK__country__3213E83F7EFD826D
is de standaardnaam voor de primaire sleutelbeperking in de tabel country
en PK__student__3213E83F357C7D1D
is de standaardnaam voor de primaire sleutelbeperking in de tabel student
.
De standaardnaam voor een FOREIGN KEY
beperking begint met 'FK
’, gevolgd door onderstrepingstekens (‘__
’), de tabelnaam, meer onderstrepingstekens (‘__
'), de naam van de gerelateerde tabel en een hexadecimaal volgnummer gegenereerd door SQL Server. In ons voorbeeld FK__student__country__4F7CD00D
is de standaardnaam voor de externe sleutelbeperking in de tabel student
wat gelijk is aan de kolom id
in de tabel country
.
De standaardnaam voor een UNIQUE
beperking is 'UQ
’, onderstrepingstekens (‘__
’), de tabelnaam, meer onderstrepingstekens (‘__
'), en een hexadecimaal volgnummer gegenereerd door SQL Server. In ons voorbeeld UQ__country__72E12F1BB69A1D8C
is de standaardnaam van de unieke beperking voor de kolomnaam in de tabel country
, en UQ__student__24E2EDD2AC2A7D87
van de UNIQUE
beperking voor de kolomnaam van de tabel student
. UNIQUE
beperkingen met meerdere kolommen worden in een vergelijkbaar patroon genoemd.
De standaardnaam voor een CHECK
beperking is 'CK
’, onderstrepingstekens (‘__
’), de tabelnaam, meer onderstrepingstekens (‘__
’), de kolomnaam, meer onderstrepingstekens (‘__’) en een hexadecimaal volgnummer gegenereerd door SQL Server. In ons voorbeeld CK__student__age__4E88ABD4
is de standaardnaam voor de CHECK
beperking voor de kolom age
van de tafel student
.