Criar relações de chave estrangeira
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
banco de dados SQL no Microsoft Fabric
Este artigo descreve como criar relações de chave estrangeira no SQL Server usando o SQL Server Management Studio ou Transact-SQL. Você cria uma relação entre duas tabelas quando deseja associar linhas de uma tabela a linhas de outra.
Permissões
Criar uma nova tabela com uma chave estrangeira requer permissão CREATE TABLE no banco de dados e permissão ALTER SCHEMA no esquema no qual a tabela está sendo criada.
Criar uma chave estrangeira em uma tabela existente requer permissão ALTER TABLE na tabela.
Limitações
Uma restrição de chave estrangeira não precisa ser vinculada apenas a uma restrição de chave primária em outra tabela. As chaves estrangeiras também podem ser definidas para referenciar as colunas de um constrangimento de
UNIQUE
noutra tabela.Quando um valor diferente de
NULL
é inserido na coluna de uma restrição deFOREIGN KEY
, o valor deve existir na coluna referenciada. Caso contrário, uma mensagem de erro de violação de chave estrangeira será retornada. Para certificar-se de que todos os valores de uma restrição de chave estrangeira composta são verificados, especifiqueNOT NULL
em todas as colunas participantes.FOREIGN KEY
restrições podem fazer referência apenas a tabelas dentro do mesmo banco de dados no mesmo servidor. A integridade referencial entre bancos de dados deve ser implementada por meio de gatilhos. Para obter mais informações, consulte CREATE TRIGGER (Transact-SQL).FOREIGN KEY
restrições podem referir-se a outra coluna na mesma tabela e são referidas como autorreferências.Uma restrição de
FOREIGN KEY
especificada no nível da coluna pode listar apenas uma coluna de referência. Esta coluna deve ter o mesmo tipo de dados que a coluna na qual a restrição está definida.Uma restrição de
FOREIGN KEY
especificada no nível da tabela deve ter o mesmo número de colunas de referência que o número de colunas na lista de colunas de restrição. O tipo de dados de cada coluna de referência também deve ser o mesmo que a coluna correspondente na lista de colunas.O Mecanismo de Banco de Dados não tem um limite predefinido para o número de restrições de
FOREIGN KEY
que uma tabela pode conter que fazem referência a outras tabelas. O Mecanismo de Banco de Dados também não limita o número de restrições deFOREIGN KEY
pertencentes a outras tabelas que fazem referência a uma tabela específica. No entanto, o número real de restrições deFOREIGN KEY
usadas é limitado pela configuração de hardware e pelo design do banco de dados e do aplicativo. Uma tabela pode fazer referência a um máximo de 253 outras tabelas e colunas como chaves estrangeiras (referências de saída). O SQL Server 2016 (13.x) e versões posteriores aumentam o limite para o número de outras tabelas e colunas que podem fazer referência a colunas em uma única tabela (referências de entrada), de 253 para 10.000. (Requer pelo menos 130 níveis de compatibilidade.) O aumento tem as seguintes restrições:Mais de 253 referências de chaves estrangeiras são suportadas nas operações DML de
DELETE
eUPDATE
. As operaçõesMERGE
não são suportadas.Uma tabela com uma referência de chave estrangeira para si mesma ainda está limitada a 253 referências de chave estrangeira.
Mais de 253 referências de chave estrangeira não estão atualmente disponíveis para índices de armazenamento em colunas ou tabelas com otimização de memória.
Não são impostas restrições
FOREIGN KEY
em tabelas temporárias.Se uma chave estrangeira for definida em uma coluna de tipo definido pelo usuário CLR, a implementação do tipo deverá suportar ordenação binária. Para obter mais informações, consulte CLR User-Defined Types.
Uma coluna do tipo varchar(max) pode participar de uma restrição de
FOREIGN KEY
somente se a chave primária a que ela se refere também for definida como tipo varchar(max).
Criar uma relação de chave estrangeira no Designer de Tabela
Utilizar SQL Server Management Studio
No Explorador de Objetos, clique com o botão direito do rato na tabela que estará no lado da chave estrangeira da relação e selecione Design.
A tabela é aberta em Criar e atualizar tabelas de banco de dados.
No menu Designer de Tabela , selecione Relações . (Consulte o menu do Designer de Tabela no cabeçalho ou, clique com o botão direito do mouse no espaço vazio da definição da tabela e selecione Relações....)
Na caixa de diálogo Relações de Chave Estrangeira, selecione Adicionar.
A relação aparece na lista de Relação Selecionada com um nome fornecido pelo sistema no formato
FK_<tablename>_<tablename>
, onde o primeiro tablename é o nome da tabela de chave estrangeira e o segundo tablename é o nome da tabela de chave primária. Esta é apenas uma convenção de nomenclatura padrão e comum para o campo (Nome) do objeto de chave estrangeira.Selecione a relação na lista Relação Selecionada.
Selecione Especificação de Tabelas e Colunas na grelha à direita e selecione as reticências (...) à direita da propriedade.
Na caixa de diálogo Tabelas e Colunas, na lista suspensa Chave Primária, escolha a tabela que estará no lado correspondente à chave primária da relação.
Na grade abaixo da caixa de diálogo, escolha as colunas que contribuem para a chave primária da tabela. Na célula de grade adjacente à direita de cada coluna, escolha a coluna de chave estrangeira correspondente da tabela de chave estrangeira.
O Designer de Tabela sugere um nome para a relação. Para alterar esse nome, edite o conteúdo da caixa de texto Nome da relação.
Escolha OK para criar a relação.
Feche a janela do designer de tabela e Guarde as suas alterações para que a alteração da relação de chave estrangeira tenha efeito.
Criar uma chave estrangeira em uma nova tabela
Utilize o Transact-SQL
O exemplo a seguir cria uma tabela e define uma restrição de chave estrangeira na coluna TempID
que faz referência à coluna SalesReasonID
na tabela Sales.SalesReason
no banco de dados AdventureWorks
. As cláusulas ON DELETE CASCADE
e ON UPDATE CASCADE
são usadas para garantir que as alterações feitas em Sales.SalesReason
tabela sejam propagadas automaticamente para a tabela Sales.TempSalesReason
.
CREATE TABLE Sales.TempSalesReason (
TempID INT NOT NULL,
Name NVARCHAR(50),
CONSTRAINT PK_TempSales
PRIMARY KEY NONCLUSTERED (TempID),
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason(SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Criar uma chave estrangeira em uma tabela existente
Utilize o Transact-SQL
O exemplo a seguir cria uma chave estrangeira na coluna TempID
e faz referência à coluna SalesReasonID
na tabela Sales.SalesReason
no banco de dados AdventureWorks
.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;