Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é o nome de restrição padrão no SQL Server?

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 .