Problema:
Você deseja saber os nomes padrão das restrições no banco de dados do SQL Server.
Exemplo:
Em nosso banco de dados, criamos duas tabelas,
country
e student
, com as seguintes restrições:PRIMARY KEY
(a coluna id
nas tabelas country
e student
), FOREIGN KEY
(a coluna country_id
na tabela student
), DEFAULT
(a coluna name
na tabela student
), UNIQUE
(a coluna name
na tabela country
e a coluna personal_number
na tabela student
) e CHECK
(a coluna age
na tabela student
). Solução:
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) );
Vamos mostrar como o SQL Server nomeia as restrições dessas tabelas por padrão. Use esta consulta para vê-los:
SELECT TABLE_CATALOG, TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Aqui está o resultado:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
país | CHAVE PRIMÁRIA | PK__country__3213E83F7EFD826D |
país | ÚNICO | UQ__country__72E12F1BB69A1D8C |
aluno | CHAVE PRIMÁRIA | PK__student__3213E83F357C7D1D |
aluno | ÚNICO | UQ__student__24E2EDD2AC2A7D87 |
aluno | VERIFICAR | CK__student__age__4E88ABD4 |
aluno | CHAVE ESTRANGEIRA | FK__student__country__4F7CD00D |
Discussão:
Quando criamos nossas tabelas, definimos restrições para algumas colunas. No entanto, não especificamos os nomes para essas restrições, portanto, elas são nomeadas por padrão. Como os nomes padrão para restrições são gerados?
No SQL Server, os nomes de restrição padrão começam com prefixos específicos:
PK
, UQ
, CK
, ou FK
. O nome padrão para uma
PRIMARY KEY
restrição começa com 'PK
’, seguido por sublinhados (‘__
’), o nome da tabela, mais sublinhados (‘__
’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, PK__country__3213E83F7EFD826D
é o nome padrão para a restrição de chave primária na tabela country
e PK__student__3213E83F357C7D1D
é o nome padrão para a restrição de chave primária na tabela student
. O nome padrão para uma
FOREIGN KEY
restrição começa com 'FK
’, seguido por sublinhados (‘__
’), o nome da tabela, mais sublinhados (‘__
’), o nome da tabela relacionada e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, FK__student__country__4F7CD00D
é o nome padrão para a restrição de chave estrangeira na tabela student
que é equivalente à coluna id
na tabela country
. O nome padrão para um
UNIQUE
restrição é 'UQ
’, sublinhado (‘__
’), o nome da tabela, mais sublinhados (‘__
’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, UQ__country__72E12F1BB69A1D8C
é o nome padrão da restrição exclusiva para o nome da coluna na tabela country
e UQ__student__24E2EDD2AC2A7D87
do UNIQUE
restrição para o nome da coluna da tabela student
. UNIQUE
restrições com várias colunas são nomeadas em um padrão semelhante. O nome padrão para um
CHECK
restrição é 'CK
’, sublinhado (‘__
’), o nome da tabela, mais sublinhados (‘__
’), o nome da coluna, mais sublinhados (‘__’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, CK__student__age__4E88ABD4
é o nome padrão para o CHECK
restrição para a coluna age
da tabela student
.