Compartilhar via


Criar relações de chaves estrangeiras

Este tópico descreve como criar relações de chaves estrangeiras no SQL Server 2012 usando o SQL Server Management Studio ou o 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

    Segurança

  • Para criar relações de chaves estrangeiras usando:

    SQL Server Management Studio

    Transact-SQL

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

Ícone de seta usado com o link Voltar ao Início[Top]

Usando 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>, onde tablename é o nome da tabela de chave estrangeira.

  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.

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

Ícone de seta usado com o link Voltar ao Início[Top]

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

Ícone de seta usado com o link Voltar ao Início[Top]