sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo crear una tabla con restricción de clave externa en SQL Server - Tutorial de SQL Server/TSQL, parte 66

¿Qué es la clave externa en la tabla de SQL Server:

La clave externa en una tabla es una columna o grupo de columnas que proporciona un vínculo entre los datos de dos tablas. La clave foránea en una tabla apunta a la clave principal en otra tabla.
Vamos a crear la tabla dbo.Customer con la clave principal usando la siguiente declaración DDL
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Como puede ver, Customerid es la clave principal en dbo.Customer Table.
Como estamos listos con nuestra primera tabla y tenemos la clave principal, estamos listos para comenzar y crear una segunda tabla con restricción de clave externa.
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 Puede ver que hemos agregado la columna Customer_id en la tabla dbo.Orders que hace referencia a Customerid en dbo.Customer Table.
La clave principal en la primera tabla es Customerid y la columna de clave externa en la segunda tabla es Customer_id, eso significa que las columnas no tienen que tener los mismos nombres. Es una buena idea mantener el mismo nombre para que cuando escriba consultas y se una a las tablas, no tenga que mirar cuál es la clave principal y cuál es la clave externa, sino que sabrá que los mismos nombres de columna están relacionados. .
Vamos a insertar un par de registros y ver cómo funciona la restricción de clave externa.
    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 registros se insertarán correctamente, ya que estamos insertando el mismo ID de cliente en dbo.Orders que existe en dbo.Customer.
Si intentaremos insertar cualquier valor en dbo.Orders que no esté presente en dbo.Customer (CustomerId), lo hará a través de un error debido a una restricción de clave externa.
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Cuando ejecutamos la consulta anterior, se produce un error, ya que no tenemos 2 como Customerid en la tabla dbo.Customer.
Mensaje 547, Nivel 16, Estado 0, Línea 28La declaración INSERT entró en conflicto con FOREIGN KEY restricción "FK__Orders__Customer__286302EC". El conflicto ocurrió en la base de datos "YourDatabaseName", tabla "dbo.Customer", columna 'Customerid'. La declaración ha terminado.

Video de demostración:¿Qué es la restricción de clave externa y cómo crearla? Restricción de clave externa en SQL