En SQL Foreign Key o clave externa es una columna (o combinación de columnas) que nos permite crear una relación referencial entre dos tablas de datos.
La tabla que lleva una clave foránea (o SQL Foreign Key) se conoce como tabla secundaria. Mientras que la tabla que lleva la clave principal se conoce como tabla principal o referenciada.
Crear en SQL Foreign Key usando Query
En SQL Foreign Key o clave externa se usa para crear una relación de referencia entre los datos de dos tablas. Entonces, para demostración, vamos a crear dos tablas, la primera es la tabla Cliente que contiene todos los detalles básicos de los clientes de una organización. Y la segunda es la tabla Pedidos que contiene todos los detalles del pedido de un cliente.
Según la estructura de los datos, la tabla Pedidos no debe incluir datos de clientes no válidos. Entonces, necesitaremos crear una relación referencial entre la tabla Clientes y Pedidos para resolver este problema. Ahora, para crear una tabla de clientes
CREATE TABLE Cliente
( id INT PRIMARY KEY,
Nombre VARCHAR(50),
Sexo VARCHAR(50),
Pais VARCHAR(50) );
Ahora, insertar nuevas filas en la tabla Cliente insert into Cliente (id, Nombre, Sexo, Pais) values (1, 'Pedro Santana', 'Masculino', 'Mexico'); insert into Cliente (id, Nombre, Sexo, Pais) values (2, 'Franklin Puerro', 'Masculino', 'Chile'); insert into Cliente (id, Nombre, Sexo, Pais) values (3, 'Ana Bonifacio', 'Fermenina', 'España'); insert into Cliente (id, Nombre, Sexo, Pais) values (4, 'Noelyn Rosario', 'Femenina', 'Australia');
Al usar la consulta anterior, estamos creando una tabla de clientes y definiendo la columna de identificación como PRIMARY KEY. Después de esto, estamos completando la tabla con algunos datos de muestra.
Y después de ejecutar la consulta con éxito, obtendremos la siguiente tabla de clientes.
Ahora, para crear una relación referencial entre la tabla Cliente y Pedidos , crearemos una clave externa en SQL Foreign Key en la tabla Pedidos que hará referencia a la columna CLAVE PRIMARIA en la tabla Cliente .
Y para esta implementación, vamos a ejecutar la siguiente consulta que se proporciona a continuación.
CREATE TABLE Pedidos
(OrderID INT PRIMARY KEY,
Fecha DATE,
ClienteID INT,
Monto VARCHAR(50),
CONSTRAINT FK_CustomerCheck FOREIGN KEY (ClienteID) REFERENCES Cliente(ID) );
Al implementar la consulta anterior, estamos creando una tabla de pedidos con 4 columnas. Y también hemos definido la restricción SQL FOREIGN KEY para la columna ClienteID que se referirá a la columna ID en la tabla Cliente.
Ahora, al insertar una nueva fila en la tabla Pedidos , el valor de ClienteID debe coincidir con los valores de la columna de ID de la tabla Clientes.
insert into Pedidos (OrderID, Fecha, ClienteID, Monto)
values (101, '5/4/2022', 1, '100.83');
insert into Pedidos (OrderID, Fecha, ClienteID, Monto)
values (102, '3/5/2021', 2, '500.48');
insert into Pedidos (OrderID, Fecha, ClienteID, Monto)
values (103, '1/3/2019', 3, '480.27');
insert into Pedidos (OrderID, Fecha, ClienteID, Monto)
values (104, '3/2/2020', 4, '800.73');
Entonces, al usar la restricción de clave SQL FOREIGN KEY, podemos crear una relación referencial entre varias tablas fácilmente. Y en nuestro ejemplo, estamos creando una relación entre la columna ID y la columna CustomerID en la tabla Cliente y Pedidos respectivamente.
Crear clave externa o Foreign Key en SQL Server Management Studio
Para crear una columna de clave externa en SQL Foreign Key en una tabla, podemos usar SQL Server Management Studio. SQL Server Management Studio es una aplicación de software utilizada para crear y administrar componentes en SQL Server.
Ahora, para la demostración, considere la siguiente tabla principal y secundaria disponible en SQL Server.
Tabla principal: supongamos que ya tenemos una tabla principal llamada » Cliente » y contiene columnas de ID, nombre, género y país con » ID » como clave principal.
Tabla secundaria: para la tabla secundaria, vamos a crear una tabla Pedidos que contenga todos los detalles de los pedidos de un cliente. Para esta implementación en SQL Server Management Studio, mostramos los siguientes pasos:
Paso 1. En el Explorador de objetos, presione clic derecho del mouse en el directorio Tablas de nuestra base de datos y seleccione » Nueva » > » Tabla… «. Se abrirá una página de diseñador de objetos en el Management Studio.
Paso 2. Ahora, en la página del diseñador, vamos a agregar las columnas requeridas, como OrderID, OrderDate, CustomerID y Amount.
Paso-3 . Después de agregar todos los detalles de la columna, agregaremos la relación de clave externa entre la columna ID en la tabla Customer y la columna CustomerID en esta tabla secundaria.
Paso 4. Ahora presione clic derecho del mouse en la columna CustomerID y luego ejecute la opción » Relaciones …». Se abrirá una ventana de » Relación de clave externa «.
Paso-5. En la nueva ventana, ejecute con un clic el botón » Agregar » y agregará una nueva relación. Después, en el menú del lado derecho, haga clic en el ícono » … » debajo de la opción » Especificación de tablas y columnas «.
Paso-6. Ahora, en la ventana » Tablas y columnas «, primero seleccione la tabla de clave principal como » Cliente » y luego seleccione la columna ID debajo de la tabla de clave principal. Después de esto, seleccione la columna CustomerID debajo de la tabla de clave externa 0 en SQL Foreign Key, haga clic en Aceptar.
Paso-7. Ahora cierre la ventana de relaciones y haga clic en la opción » GUARDAR» para guardar la tabla recién creada.
Crear en SQL Foreign Key o clave externa a la columna existente
Hasta ahora, hemos entendido las diferentes formas en que podemos crear una columna de clave externa mientras creamos una nueva tabla. Pero, ¿qué sucede si queremos agregar una clave externa a una tabla existente en SQL Server?
Entonces, en esta sección, aprenderemos cómo agregar una restricción de clave externa a una tabla existente mediante la consulta Transact-SQL. Y para esta implementación, podemos seguir la siguiente sintaxis que se proporciona a continuación.
ALTER TABLE child_table ADD CONSTRAINT foreign_key_name FOREIGN KEY(child_column1, ... child_column_n) REFERENCES parent_table(parent_column1, ... parent_column_n);
- En la sintaxis anterior, child_table se usa para representar la tabla secundaria en la que queremos agregar una clave externa.
- A continuación, en la sintaxis, hemos definido Foreign_key_name que representa el nombre de la restricción.
- En la instrucción SQL FOREIGN KEY, child_column1, … child_column_n representa las columnas que queremos como clave externa.
- A continuación, parent_table se usa para definir el nombre de la tabla padre con la que queremos crear una relación referencial. Y parent_column1, … parent_column_n se utilizan para definir las columnas de clave principal de la tabla principal.
Ahora, para una mejor comprensión, considere el siguiente ejemplo a continuación, utilizado para agregar la columna de clave externa a la tabla Pedidos.
ALTER TABLE Orders ADD CONSTRAINT FK_CustomerCheck FOREIGN KEY(CustomerID) REFERENCES Customer(id);
En el ejemplo anterior, estamos usando el comando ALTER TABLE para modificar la tabla Pedidos y agregarle una clave externa. Y hemos definido la columna CustomerID en la tabla Pedidos como una clave externa que se referirá a la columna id en la tabla Cliente.