Partilhar via


Criar relações de chave estrangeira

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco 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 de FOREIGN 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, especifique NOT 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 de FOREIGN KEY pertencentes a outras tabelas que fazem referência a uma tabela específica. No entanto, o número real de restrições de FOREIGN 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 e UPDATE. As operações MERGE 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

  1. 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.

  2. 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....)

  3. 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.

  4. Selecione a relação na lista Relação Selecionada.

  5. Selecione Especificação de Tabelas e Colunas na grelha à direita e selecione as reticências (...) à direita da propriedade.

  6. 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.

  7. 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.

  8. Escolha OK para criar a relação.

  9. 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;