Introducción a la clave externa en SQL

La clave externa es una restricción en SQL. Se utiliza para relacionar las dos tablas. Una clave foránea en una tabla apunta a una clave primaria en otra tabla. Se puede usar una clave foránea para asegurarse de que la fila de una tabla tenga la fila / filas correspondientes en otra tabla. La tabla referenciada se denomina tabla primaria y la tabla con la clave externa se conoce como tabla secundaria. Esta relación padre-hijo hace cumplir la regla que se conoce como integridad referencial. La integridad referencial es una propiedad de los datos que indica que todas sus referencias son válidas.

Por lo tanto, si tiene relaciones de 1 a muchos o de muchos a muchos en la base de datos, las claves externas serán muy útiles. Actúa como una referencia cruzada entre dos tablas (parent_table y child_table) porque hace referencia a la clave primaria de otra tabla. Por lo tanto, establece un enlace entre parent_table y child_table.

Sintaxis

Crear una nueva tabla con una clave foránea requiere el permiso CREATE TABLE en la base de datos

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table es el nombre de la tabla que crearemos
  • column_1, column_2- las columnas que se agregarán a la tabla.
  • F_key: esta es una restricción de clave externa.
  • child_column1, child_column2 … child_column_n- Es el nombre de las columnas child_Table para hacer referencia a la clave primaria en la tabla primaria.
  • Parent_Table: este es el nombre de parent_table. La clave principal de parent_table se referencia en child_table
  • ON DELETE: este parámetro toma medidas en los datos secundarios después de la eliminación de los datos principales. SET NULL, NO ACTION, CASCADE, SET DEFAULT son algunos de los valores de este parámetro.
  • ON UPDATE: este es un parámetro opcional que toma medidas en los datos secundarios después de la actualización en los datos principales. SET NULL, NO ACTION, CASCADE, SET DEFAULT son algunos de los valores de este parámetro.
  • CASCADA: podemos usar esto junto con ELIMINAR y ACTUALIZAR. Después de eliminar o actualizar los datos principales Los datos secundarios se eliminarán o actualizarán.

Crear una clave foránea en una tabla existente requiere el permiso ALTER en la tabla.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Reglas

  1. Las claves foráneas no son aplicables a las tablas temporales.
  2. La restricción de clave externa no tiene que estar vinculada solo a la clave primaria de otra tabla, sino que también puede vincularse a la restricción ÚNICA de otra tabla.
  3. Las restricciones de CLAVE EXTRANJERA pueden hacer referencia a otra columna en la misma tabla. Esto se conoce como una autorreferencia.
  4. Las restricciones de clave externa pueden referirse a las tablas dentro de la misma base de datos.
  5. También podemos insertar valores NULL en la tabla secundaria.
  6. Cuando insertamos otro valor que no sea NULL en la restricción de clave externa, el valor debe existir en la columna a la que se hace referencia; de lo contrario, se produjo un mensaje de violación.
  7. El valor de las claves únicas del padre no se puede cambiar si la regla de actualización es RESTRICT y hay una o más filas dependientes. Sin embargo, si la regla de actualización es NO ACCIÓN, las claves únicas principales se pueden actualizar siempre que cada elemento secundario tenga una clave principal para cuando se complete la instrucción de actualización.

Ejemplos

Digamos que tenemos dos tablas Clientes y Pedidos. La tabla Clientes tiene todos los datos relacionados con el cliente y la tabla Pedidos con datos relacionados con los pedidos del cliente.

Clientes

Cust_idClave primaria
Cust_name
Ubicación

Pedidos

Solicitar IDClave primaria
Fecha de orden
Cantidad
Cust_idClave externa
Cantidad total

En el ejemplo anterior, la columna Cust_id en la tabla ORDERS es una clave foránea que apunta a la columna Cust_id en la tabla CUSTOMERS.

Supongamos que estas tablas tienen los siguientes valores

Clientes

1001AlexNOSOTROS
1002CareyNOSOTROS
1003SidReino Unido
1004TomAUS
1005KapilINDIANA

Pedidos

7820-10-20185 510021200
7912-10-20174 41001800
8020-11-201621005369
8109-10-20165 51002258
8219-08-2016111004mil novecientos
8330-06-20164510012300
8416-02-20167 71001890
8502-01-201621002260

Para cust_id 1001 hay tres órdenes que existen en la tabla de órdenes.

Para cust_id 1003 no hay orden.

Entonces, si tenemos datos particulares (Diga id 1003) en la tabla principal, entonces no es necesario tener esos datos en la tabla secundaria, pero viceversa no es cierto.

No podemos tener ningún dato en la tabla secundaria (tabla de pedidos) que no exista en la tabla principal (clientes).

Por ejemplo, no podemos insertar un nuevo registro para cust_id 1006 en la tabla de pedidos porque cust_id 1006 no existe en la tabla de clientes.

A continuación, se muestran los ejemplos que violan la integridad referencial de esta relación:

  1. Insertar una fila en la tabla PEDIDOS donde Cust_ID no aparece en la columna Cust_ID en la tabla CUSTOMERS.
  2. Eliminar una fila de la tabla CUSTOMERS donde el Cust_ID de la fila que se va a eliminar todavía está presente en la columna Cust_ID en la tabla ORDERS.

Cuando se elimina un registro particular de la tabla principal, hay dos formas de mantener la integridad de los datos en la tabla secundaria. Cuando dos tablas se conectan con la clave externa y se eliminan ciertos datos en la tabla principal, para los cuales también existe el registro en la tabla secundaria, entonces tenemos algún mecanismo para guardar la integridad de los datos en la tabla secundaria

  • En Eliminar Cascada : Esto eliminará el registro de la tabla secundaria si ese valor de la clave externa se elimina de la tabla principal.
  • En Eliminar NULL: Esto establecerá todos los valores en ese registro de la tabla secundaria como NULL, para lo cual el valor de la clave externa se elimina de la tabla principal.

Conclusión: clave externa en SQL

Por lo tanto, es aconsejable utilizar la clave externa en la base de datos que tiene una a una o una a muchas relaciones. La principal ventaja de usar restricciones de clave externa es que mejora el rendimiento. Los desarrolladores pueden identificar fácilmente la estructura de la base de datos. También podemos examinar cómo la consulta va a recuperar los datos.

Artículos recomendados

Esta es una guía de clave externa en SQL. Aquí discutimos las reglas y ejemplos de clave externa en SQL con la sintaxis. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Vistas SQL
  2. Tipos de combinaciones en SQL Server
  3. ¿Qué es PL / SQL?
  4. Restricciones de SQL Server
  5. Los 6 tipos principales de combinaciones en MySQL con ejemplos