O que é chave estrangeira na tabela do SQL Server:
Chave estrangeira em uma tabela é uma coluna ou grupo de colunas que fornece um link entre dados em duas tabelas. A chave estrangeira em uma tabela aponta para a chave primária em outra tabela.Vamos criar a tabela dbo.Customer com a chave primária usando a instrução DDL abaixo
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )
Como você pode ver que Customerid é a chave primária em dbo.Customer Table.
Como estamos prontos com nossa primeira tabela e temos a Chave Primária, estamos prontos para criar uma segunda tabela com Restrição de Chave Estrangeira.
/>
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) )
Você pode ver que adicionamos a coluna Customer_id na tabela dbo.Orders que faz referência a Customerid na tabela dbo.Customer.
A chave primária na primeira tabela é Customerid e a coluna de chave estrangeira na segunda tabela é Customer_id, o que significa que as colunas não precisam ter os mesmos nomes. É uma boa ideia manter o mesmo nome para que quando você escrever consultas e unir as tabelas, você não precise dar uma olhada qual é a chave primária e qual é a chave estrangeira, em vez disso, você saberia que os mesmos nomes de coluna estão em relação .
Vamos inserir alguns registros e ver como funciona a restrição de chave estrangeira.
insert into dbo.Customer (CustomerId,FName, LName,SSN) values (1,'Aamir','Shahzad','000-000-00') insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,1)
Ambos os registros serão inseridos muito bem, pois estamos inserindo o mesmo customerid em dbo.Orders que existe em dbo.Customer.
Se tentarmos inserir qualquer valor em dbo.Orders que não esteja presente em dbo.Customer (CustomerId), será através de um erro devido a restrição de chave estrangeira.
insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,2)
Quando executamos a consulta acima, ocorre um erro, pois não temos 2 como Customerid na tabela dbo.Customer.
Msg 547, Level 16, State 0, Line 28A instrução INSERT entrou em conflito com a FOREIGN KEY restrição "FK__Orders__Customer__286302EC". O conflito ocorreu no banco de dados "YourDatabaseName", tabela "dbo.Customer", coluna 'Customerid'. A instrução foi encerrada.
Vídeo Demo :O que é restrição de chave estrangeira e como criar Restrição de chave estrangeira no SQL