Criar relações de chaves estrangeirasCreate Foreign Key Relationships

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Este artigo descreve como criar relações de chaves estrangeiras no SQL ServerSQL Server usando o SQL Server Management StudioSQL Server Management Studio ou o Transact-SQLTransact-SQL.This article describes how to create foreign key relationships in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Você cria uma relação entre duas tabelas quando deseja associar linhas de uma tabela com linhas de outra.You create a relationship between two tables when you want to associate rows of one table with rows of another.

Antes de começar!Before You Begin! Limitações e restriçõesLimits and Restrictions

  • 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.A foreign key constraint does not have to be linked only to a primary key constraint in another table; it can also be defined to reference the columns of a UNIQUE constraint in another table.

  • 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.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned. Para garantir que todos os valores de uma restrição FOREIGN KEY composta foram verificados, especifique NOT NULL em todas as colunas participantes.To make sure that all values of a composite foreign key constraint are verified, specify NOT NULL on all the participating columns.

  • As restrições FOREIGN KEY só podem fazer referência a tabelas que estão no mesmo banco de dados e no mesmo servidor.FOREIGN KEY constraints can reference only tables within the same database on the same server. A integridade referencial em todos os bancos de dados deve ser implementada por gatilhos.Cross-database referential integrity must be implemented through triggers. Para mais informações, veja CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • As restrições FOREIGN KEY podem fazer referência a outra coluna da mesma tabela.FOREIGN KEY constraints can reference another column in the same table. Isso se chama autorreferência.This is referred to as a self-reference.

  • Uma restrição FOREIGN KEY especificada no nível da coluna pode listar apenas uma coluna de referência.A FOREIGN KEY constraint specified at the column level can list only one reference column. Essa coluna deve ter o mesmo tipo de dados da coluna na qual a restrição foi definida.This column must have the same data type as the column on which the constraint is defined.

  • 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.A FOREIGN KEY constraint specified at the table level must have the same number of reference columns as the number of columns in the constraint column list. O tipo de dados de cada coluna de referência também deve ser igual ao da coluna correspondente na lista de colunas.The data type of each reference column must also be the same as the corresponding column in the column list.

  • O Mecanismo de Banco de DadosDatabase Engine 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.The Mecanismo de Banco de DadosDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table. 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.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. Uma tabela pode fazer referência a no máximo 253 outras tabelas e colunas como chaves estrangeiras (referências de saída).A table can reference a maximum of 253 other tables and columns as foreign keys (outgoing references). SQL Server 2016 (13.x)SQL Server 2016 (13.x) aumenta de 253 para 10.000 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).increases the limit for the number of other table and columns that can reference columns in a single table (incoming references), from 253 to 10,000. (Requer, no mínimo, o nível de compatibilidade 130.) O aumento tem as seguintes restrições:(Requires at least 130 compatibility level.) The increase has the following restrictions:

    • Há suporte para mais de 253 referências de chave estrangeira em operações DELETE and UPDATE DML.Greater than 253 foreign key references are supported for DELETE and UPDATE DML operations. Não há suporte para operações MERGE.MERGE operations are not supported.
    • Uma tabela com uma referência de chave estrangeira a ela mesma ainda é limitada a 253 referências de chave estrangeira.A table with a foreign key reference to itself is still limited to 253 foreign key references.
    • O uso de mais de 253 referências de chave estrangeira não está disponível atualmente para índices columnstore, tabelas com otimização de memória nem para o Stretch Database.Greater than 253 foreign key references are not currently available for columnstore indexes, memory-optimized tables, or Stretch Database.
  • As restrições FOREIGN KEY não são impostas a tabelas temporárias.FOREIGN KEY constraints are not enforced on temporary tables.

  • 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.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Para obter mais informações, veja Tipos CLR definidos pelo usuário.For more information, see CLR User-Defined Types.

  • Uma coluna do tipo varchar(max) poderá participar de uma restrição FOREIGN KEY somente se a chave primária à qual ela fizer referência também estiver definida como tipo varchar(max) .A column of type varchar(max) can participate in a FOREIGN KEY constraint only if the primary key it references is also defined as type varchar(max).

PermissõesPermissions

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.Creating a new table with a foreign key requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Criar uma chave estrangeira em uma tabela existente requer a permissão ALTER na tabela.Creating a foreign key in an existing table requires ALTER permission on the table.

Criar uma relação de chave estrangeira no Designer de TabelaCreate a foreign key relationship in Table Designer

Usando o SQL Server Management StudioUsing SQL Server Management Studio

  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.In Object Explorer, right-click the table that will be on the foreign-key side of the relationship and click Design.

    A tabela é aberta no Designer de Tabela.The table opens in Table Designer.

  2. No menu Designer de Tabela , clique em Relações.From the Table Designer menu, click Relationships.

  3. Na caixa de diálogo Relações de Chave Estrangeira , clique em Adicionar.In the Foreign-key Relationships dialog box, click Add.

    A relação é exibida na lista Relação Selecionada com um nome fornecido pelo sistema no formato FK_<tablename><tablename>, em que tablename é o nome da tabela de chave estrangeira.The relationship appears in the Selected Relationship list with a system-provided name in the format FK<tablename>_<tablename>, where tablename is the name of the foreign key table.

  4. Clique na relação na lista Relação Selecionada .Click the relationship in the Selected Relationship list.

  5. Clique em Especificação de Tabelas e Colunas na grade à direita e clique nas reticências ( ... ) à direita da propriedade.Click Tables and Columns Specification in the grid to the right and click the ellipses (...) to the right of the property.

  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.In the Tables and Columns dialog box, in the Primary Key drop-down list, choose the table that will be on the primary-key side of the relationship.

  7. Na grade inferior, escolha as colunas que contribuem para chave primária da tabela.In the grid beneath, choose the columns contributing to the table's primary key. Na célula da grade adjacente à esquerda de cada coluna, escolha a coluna da chave estrangeira correspondente da tabela da chave estrangeira.In the adjacent grid cell to the left of each column, choose the corresponding foreign-key column of the foreign-key table.

    ODesigner de Tabela sugere um nome para a relação.Table Designer suggests a name for the relationship. Para mudar esse nome, edite o conteúdo da caixa de texto Nome da Relação .To change this name, edit the contents of the Relationship Name text box.

  8. Escolha OK para criar a relação.Choose OK to create the relationship.

Criar uma chave estrangeira em uma nova tabelaCreate a foreign key in a new table

Usando Transact-SQLUsing Transact-SQL

O exemplo a seguir cria uma tabela e define uma restrição de chave estrangeira na coluna TempID que referencia a coluna SalesReasonID na tabela Sales.SalesReason do banco de dados do AdventureWorks.The following example creates a table and defines a foreign key constraint on the column TempID that references the column SalesReasonID in the Sales.SalesReason table in the AdventureWorks database. 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 .The ON DELETE CASCADE and ON UPDATE CASCADE clauses are used to ensure that changes made to Sales.SalesReason table are automatically propagated to the Sales.TempSalesReason table.

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 existenteCreate a foreign key in an existing table

Usando Transact-SQLUsing Transact-SQL

O exemplo a seguir cria uma chave estrangeira na coluna TempID que referencia a coluna SalesReasonID na tabela Sales.SalesReason do banco de dados do AdventureWorks.The following example creates a foreign key on the column TempID and references the column SalesReasonID in the Sales.SalesReason table in the AdventureWorks database.

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

Para obter mais informações, consulte:For more information, see: