Problème :
Vous souhaitez connaître les noms par défaut des contraintes dans la base de données SQL Server.
Exemple :
Dans notre base de données, nous créons deux tables, country
et student
, avec les contraintes suivantes :PRIMARY KEY
(la colonne id
dans les tableaux country
et student
), FOREIGN KEY
(la colonne country_id
dans le tableau student
), DEFAULT
(la colonne name
dans le tableau student
), UNIQUE
(la colonne name
dans le tableau country
et la colonne personal_number
dans le tableau student
), et CHECK
(la colonne age
dans le tableau student
).
Solution :
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) );
Montrons comment SQL Server nomme les contraintes de ces tables par défaut. Utilisez cette requête pour les voir :
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Voici le résultat :
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
pays | CLÉ PRIMAIRE | PK__pays__3213E83F7EFD826D |
pays | UNIQUE | UQ__pays__72E12F1BB69A1D8C |
étudiant | CLÉ PRIMAIRE | PK__étudiant__3213E83F357C7D1D |
étudiant | UNIQUE | UQ__étudiant__24E2EDD2AC2A7D87 |
étudiant | VÉRIFIER | CK__student__age__4E88ABD4 |
étudiant | CLÉ ÉTRANGÈRE | FK__student__country__4F7CD00D |
Discussion :
Lorsque nous créons nos tables, nous définissons des contraintes pour certaines colonnes. Cependant, nous ne spécifions pas les noms de ces contraintes, elles sont donc nommées par défaut. Comment les noms par défaut des contraintes sont-ils générés ?
Dans SQL Server, les noms de contraintes par défaut commencent par des préfixes spécifiques :PK
, UQ
, CK
, ou FK
.
Le nom par défaut d'une PRIMARY KEY
la contrainte commence par 'PK
', suivi de traits de soulignement ('__
'), le nom de la table, plus des traits de soulignement ('__
’) et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, PK__country__3213E83F7EFD826D
est le nom par défaut de la contrainte de clé primaire dans la table country
et PK__student__3213E83F357C7D1D
est le nom par défaut de la contrainte de clé primaire dans la table student
.
Le nom par défaut d'une FOREIGN KEY
la contrainte commence par 'FK
', suivi de traits de soulignement ('__
'), le nom de la table, plus des traits de soulignement ('__
’), le nom de la table associée et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, FK__student__country__4F7CD00D
est le nom par défaut de la contrainte de clé étrangère dans la table student
qui équivaut à la colonne id
dans le tableau country
.
Le nom par défaut pour un UNIQUE
la contrainte est 'UQ
', souligne ('__
'), le nom de la table, plus des traits de soulignement ('__
’) et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, UQ__country__72E12F1BB69A1D8C
est le nom par défaut de la contrainte unique pour le nom de la colonne dans la table country
, et UQ__student__24E2EDD2AC2A7D87
de l'UNIQUE
contrainte pour le nom de la colonne de la table student
. UNIQUE
les contraintes avec plusieurs colonnes sont nommées dans un modèle similaire.
Le nom par défaut pour un CHECK
la contrainte est 'CK
', souligne ('__
'), le nom de la table, plus des traits de soulignement ('__
'), le nom de la colonne, d'autres traits de soulignement ('__') et un numéro de séquence hexadécimal généré par SQL Server. Dans notre exemple, CK__student__age__4E88ABD4
est le nom par défaut du CHECK
contrainte pour la colonne age
du tableau student
.