Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como criar uma tabela com restrição de chave estrangeira no SQL Server - Tutorial SQL Server/TSQL Parte 66

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