Criar relações de chaves estrangeiras

Este tópico descreve como criar relações de chave estrangeira no SQL Server 2014 usando SQL Server Management Studio ou Transact-SQL. Você cria uma relação entre duas tabelas quando deseja associar linhas de uma tabela com linhas de outra.

Neste tópico

Antes de começar

Limitações e Restrições

  • Uma restrição de chave estrangeira não precisa estar vinculada apenas a uma restrição de chave primária em outra tabela; ela também pode ser definida para referenciar as colunas de uma restrição UNIQUE em outra tabela.

  • Quando um valor diferente de NULL é inserido na coluna de uma restrição FOREIGN KEY, o valor deve existir na coluna referenciada; caso contrário, será retornada uma mensagem de erro de violação de chave estrangeira. Para garantir que todos os valores de uma restrição FOREIGN KEY composta foram verificados, especifique NOT NULL em todas as colunas participantes.

  • As restrições FOREIGN KEY só podem fazer referência a tabelas que estão no mesmo banco de dados e no mesmo servidor. A integridade referencial em todos os bancos de dados deve ser implementada por gatilhos. Para obter mais informações, veja CREATE TRIGGER (Transact-SQL).

  • As restrições FOREIGN KEY podem fazer referência a outra coluna da mesma tabela. Isso se chama autorreferência.

  • Uma restrição FOREIGN KEY especificada no nível da coluna pode listar apenas uma coluna de referência. Essa coluna deve ter o mesmo tipo de dados da coluna na qual a restrição foi definida.

  • Uma restrição FOREIGN KEY especificada no nível da tabela deve ter o mesmo número de colunas de referência da lista de colunas de restrição. O tipo de dados de cada coluna de referência também deve ser igual ao da coluna correspondente na lista de colunas.

  • O Mecanismo de Banco de Dados não tem um limite predefinido quanto ao número de restrições FOREIGN KEY que uma tabela pode conter para referenciar outras tabelas nem quanto ao número de restrições FOREIGN KEY que são propriedade de outras tabelas e fazem referência a uma tabela específica. Entretanto, o número real de restrições FOREIGN KEY que pode ser usado é limitado pela configuração do hardware e pelo design do banco de dados e do aplicativo. Recomendamos que uma tabela não contenha mais de 253 restrições FOREIGN KEY e que ela não seja referenciada por mais de 253 restrições FOREIGN KEY.

  • As restrições FOREIGN KEY não são impostas a tabelas temporárias.

  • Se a chave estrangeira for definida em uma coluna de tipo de dados CLR definido pelo usuário, a implementação do tipo deverá oferecer suporte a uma ordenação binária. Para obter mais informações, veja Tipos CLR definidos pelo usuário.

  • A coluna do tipo varchar(max) poderá participar de uma restrição FOREIGN KEY somente se a chave primária que ela referencia também estiver definida como tipo varchar(max).

Segurança

Permissões

A criação de uma nova tabela com uma chave estrangeira requer a permissão CREATE TABLE no banco de dados e a permissão ALTER no esquema no qual a tabela está sendo criada.

Criar uma chave estrangeira em uma tabela existente requer a permissão ALTER na tabela.

Como usar o SQL Server Management Studio.

Para criar uma relação de chave estrangeira no Designer de Tabela

  1. No Pesquisador de Objetos, clique com o botão direito do mouse na tabela que estará ao lado da chave estrangeira da relação e clique em Design.

    A tabela é aberta no Designer de Tabela.

  2. No menu Designer de Tabela , clique em Relações.

  3. Na caixa de diálogo Relações de Chave Estrangeira , clique em Adicionar.

    A relação aparece na lista Relação Selecionada com um nome fornecido pelo sistema no formato FK_<tablename>_<tablename>, em que tablename é o nome da tabela de chaves estrangeiras.

  4. Clique na relação na lista Relação Selecionada .

  5. Clique em Especificação de Tabelas e Colunas na grade à direita e clique nas 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á ao lado da chave primária da relação.

  7. Na grade inferior, escolha as colunas que contribuem para chave primária da tabela. Na célula da grade adjacente à esquerda de cada coluna, escolha a coluna da chave estrangeira correspondente da tabela da chave estrangeira.

    ODesigner de Tabela sugere um nome para a relação. Para mudar esse nome, edite o conteúdo da caixa de texto Nome da Relação .

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

Usando o Transact-SQL

Para criar uma chave estrangeira em uma nova tabela

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, clique em Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar. O exemplo cria uma tabela e define uma restrição de chave estrangeira na coluna TempID que referencia a coluna SalesReasonID na tabela Sales.SalesReason . As cláusulas ON DELETE CASCADE e ON UPDATE CASCADE são usadas para assegurar a propagação das alterações feitas na tabela Sales.SalesReason automaticamente para a tabela Sales.TempSalesReason .

    USE AdventureWorks2012;  
    GO  
    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  
    );GO  
    
    

Para criar uma chave estrangeira em uma tabela existente

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, clique em Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar. O exemplo cria uma chave estrangeira na coluna TempID e referencia a coluna SalesReasonID na tabela Sales.SalesReason .

    USE AdventureWorks2012;  
    GO  
    ALTER TABLE Sales.TempSalesReason   
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)   
        REFERENCES Sales.SalesReason (SalesReasonID)   
        ON DELETE CASCADE  
        ON UPDATE CASCADE  
    ;  
    GO  
    
    

    Para obter mais informações, consulte ALTER TABLE (Transact-SQL), CREATE TABLE (Transact-SQL) e table_constraint (Transact-SQL).