Saltar a un capítulo clave
Explicación de SQL FOREIGN KEY
SQL significa Lenguaje de Consulta Estructurado, que es un lenguaje estandarizado utilizado para gestionar sistemas de bases de datos relacionales. Una parte esencial del diseño y la construcción de una base de datos relacional es especificar restricciones para garantizar la integridad de los datos. Una de estas restricciones es la CLAVE EXTERNA.
Una CLAVE EXTERNA es una columna (o un conjunto de columnas) de una tabla que se utiliza para establecer un vínculo entre dos o más tablas de una base de datos relacional. Estas claves ayudan a mantener la coherencia y la integridad de los datos, reforzando la integridad referencial entre las tablas.
Cuando se crea una restricción FOREIGN KEY, se garantiza que los valores introducidos en la tabla de referencia deben existir en la tabla referenciada. En términos más sencillos, impide que se introduzcan datos no válidos en la(s) columna(s) CLAVE FOREJA de una tabla que no tenga(n) el valor correspondiente en la columna clave primaria de la tabla referenciada.
La integridad referencial es un concepto según el cual las relaciones entre las tablas de una base de datos deben ser siempre coherentes. Es decir, al utilizar CLAVES EXTERNAS, cualquier modificación de los datos dentro de las tablas no debe dar lugar a imprecisiones o incoherencias en los datos.
Hay cuatro tipos de acciones que se pueden especificar con las restricciones FOREIGN KEY cuando se modifican los datos:
- SIN ACCIÓN: Es la acción por defecto. Impide la modificación si viola la integridad referencial.
- CASCADE: Si se borra o actualiza la referencia de clave primaria, CASCADE borrará o actualizará automáticamente las filas de la tabla de referencia.
- SET NULL: Si se borra o actualiza la referencia a la clave primaria, SET NULL establecerá el valor de la FOREIGN KEY en NULL en la tabla de referencia.
- SET DEFAULT: Si se borra o actualiza la referencia a la clave primaria, SET DEFAULT establecerá el valor de la CLAVE EXTERNA a su valor por defecto en la tabla de referencia.
Clave primaria vs SQL FOREIGN KEY
En las bases de datos relacionales, los conceptos de Clave Primaria y Clave Foránea desempeñan un papel crucial en la definición de la estructura y las relaciones entre tablas. Comprender la diferencia entre ambos te ayudará a diseñar y gestionar eficazmente tu base de datos.
Clave primaria | CLAVE EXTRAÑA |
---|---|
Identificador único para cada fila de una tabla. | Columna(s) de una tabla utilizada(s) para establecer un vínculo entre dos o más tablas. |
Cada tabla sólo puede tener una clave primaria. | Una tabla puede tener varias CLAVES EXTERNAS, cada una de las cuales hace referencia a una tabla distinta. |
Aplica la integridad de los datos dentro de una misma tabla. | Aplica la integridad referencial entre tablas relacionadas. |
No puede contener valores NULL. | Puede contener valores NULL a menos que se especifiquen restricciones adicionales. |
En resumen, una Clave Primaria es un identificador único para las filas de una tabla, mientras que una CLAVE FOREÑA se utiliza para hacer referencia a valores de otra tabla, manteniendo la coherencia y la integridad de los datos entre tablas relacionadas. Tanto las restricciones de Clave Primaria como las de CLAVE EXTERNA son herramientas esenciales para garantizar la organización coherente de tu base de datos cuando realizas operaciones de consulta, actualizaciones y modificaciones.
Implementación de SQL FOREIGN KEY en bases de datos y tablas
Añadir una CLAVE FOREÑA a tus tablas en una base de datos es un paso esencial durante la creación y el mantenimiento de una base de datos relacional. Establecer estas relaciones entre tablas garantiza la integridad referencial y evita que se introduzcan datos no válidos en tu base de datos. Existen dos métodos principales para añadir una CLAVE EXTERNA a tus tablas: durante la creación de la tabla o después de la creación de la tabla.
Añadir FOREIGN KEY durante la creación de la tabla:
Si vas a crear una tabla nueva y deseas añadir una CLAVE FOREJA inmediatamente, puedes utilizar la sentencia CREAR TABLA y especificar la restricción CLAVE FOREJA junto con cualquier otra columna necesaria. Aquí tienes un ejemplo:
CREAR TABLA pedidos ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
En el ejemplo anterior, la columna "customer_id" de la tabla "pedidos" hace referencia a la columna "customer_id" de la tabla "clientes", aplicando la integridad referencial. Esto significa que cualquier valor "customer_id" introducido en la tabla "pedidos" debe existir en la tabla "clientes".
Añadir FOREIGN KEY después de crear la tabla:
Si tienes una tabla existente y quieres añadir una CLAVE EXTERNA, puedes utilizar la sentencia ALTER TABLE combinada con la cláusula ADD CONSTRAINT. He aquí un ejemplo:
ALTER TABLE pedidos ADD CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
En este ejemplo, se añade la restricción FOREIGN KEY denominada 'fk_customer_id' a la tabla 'pedidos'. La columna "customer_id" de la tabla "pedidos" hace referencia a la columna "customer_id" de la tabla "clientes", garantizando la integridad referencial entre las tablas.
SQL de clave foránea opcional
Al crear restricciones FOREIGN KEY, tienes la opción de especificar acciones adicionales que se llevarán a cabo cuando se produzca una modificación de datos en las tablas referenciadas. Estas acciones opcionales a veces son necesarias, dependiendo del diseño y los requisitos de tu base de datos. En esta sección, hablaremos de las siguientes acciones opcionales de FOREIGN KEY:
- ON DELETE
- ON ACTUALIZAR
- ON DELETE y ON UPDATE híbridos
Recuerda los cuatro tipos de acciones que puedes especificar al crear restricciones FOREIGN KEY de las acciones referenciales que hemos tratado anteriormente: NO ACTION, CASCADE, SET NULL y SET DEFAULT.
Utilizar ON DELETE:
Te permite definir la acción referencial que se producirá cuando se realice una operación DELETE en las filas de la tabla referenciada. He aquí un ejemplo:
CREAR TABLA pedidos ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE );
El ejemplo muestra el uso de la acción ON DELETE CASCADE. Significa que si se elimina cualquier fila de la tabla "clientes", todas las filas correspondientes de la tabla "pedidos" con los valores "customer_id" afectados se eliminarán automáticamente para mantener la integridad referencial.
Utilizando ON UPDATE:
Te permite definir la acción referencial que se producirá cuando se realice una operación de ACTUALIZACIÓN en las filas de la tabla referenciada. Aquí tienes un ejemplo:
CREAR TABLA pedidos ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON UPDATE CASCADE );
El ejemplo muestra el uso de la acción ON UPDATE CASCADE. Si alguna fila de la tabla "clientes" tiene un cambio en el valor de su columna "customer_id", todas las filas correspondientes de la tabla "pedidos" se actualizarán con el nuevo valor para preservar la integridad referencial.
Híbrido ON DELETE y ON UPDATE:
Puedes combinar acciones ON DELETE y ON UPDATE para manejar ambas situaciones simultáneamente. Aquí tienes un ejemplo:
CREAR TABLA pedidos ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE SET NULL ON UPDATE CASCADE );
En este ejemplo, si se elimina una fila de la tabla "clientes", las filas correspondientes de la tabla "pedidos" tendrán su "customer_id" establecido en NULL. Mientras tanto, si se actualiza un valor de 'customer_id' en la tabla 'clientes', las filas correspondientes de la tabla 'pedidos' se actualizarán con el nuevo valor, preservando así la integridad referencial.
SQL Añadir Múltiples Claves Foráneas Eficientemente
Al crear tablas con múltiples CLAVES EXTERNAS, es esencial definir las restricciones de forma eficiente para evitar complicaciones y reducir la carga de trabajo durante las actualizaciones o modificaciones posteriores. Hay dos formas principales de añadir múltiples restricciones FOREIGN KEY a tu tabla:
Añadiendo múltiples FOREIGN KEY durante la creación de la tabla:
Puedes definir varias restricciones FOREIGN KEY al crear una tabla incluyendo las restricciones en la sentencia CREATE TABLE. Aquí tienes un ejemplo:
CREAR TABLA pedidos ( order_id INT PRIMARY KEY, customer_id INT, product_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id), FOREIGN KEY (product_id) REFERENCES products(product_id) );
En el ejemplo anterior, hemos añadido dos restricciones FOREIGN KEY a la tabla "pedidos": "customer_id" hace referencia a la columna "customer_id" de la tabla "clientes", y "product_id" hace referencia a la columna "product_id" de la tabla "productos".
Añadir varias FOREIGN KEY después de crear la tabla:
Si tienes una tabla existente y quieres añadir varias restricciones FOREIGN KEY, puedes utilizar la sentencia ALTER TABLE en combinación con varias cláusulas ADD CONSTRAINT. He aquí un ejemplo:
ALTER TABLE pedidos ADD CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES clientes(customer_id), ADD CONSTRAINT fk_product_id FOREIGN KEY (product_id) REFERENCES productos(product_id);
Como se muestra en el ejemplo, hemos añadido dos restricciones FOREIGN KEY a la tabla 'pedidos' mediante la sentencia ALTER TABLE. Las restricciones denominadas 'fk_customer_id' y 'fk_product_id' hacen referencia a la columna 'customer_id' de la tabla 'clientes' y a la columna 'product_id' de la tabla 'productos', respectivamente.
Añadir varias restricciones FOREIGN KEY de forma eficaz puede ayudar a mantener la integridad referencial y optimizar las operaciones de la base de datos para mejorar el rendimiento. Si sigues los principios descritos en esta sección, podrás crear bases de datos relacionales robustas y escalables para satisfacer tus necesidades de gestión de datos.
Uso de SQL FOREIGN KEY en las consultas
Las SQL FOREIGN KEY desempeñan un papel crucial en las operaciones de consulta, ya que te permiten establecer relaciones entre tablas y recuperar datos con eficacia. En esta sección, exploraremos las distintas formas en que pueden utilizarse las CLAVES EXTRAÑAS en las consultas SQL, incluida la recuperación de datos y la combinación con otros comandos SQL.
Consulta SQL con clave foránea para recuperar datos
Cuando necesites recuperar datos de varias tablas relacionadas, las CLAVES EXTRAÑAS te permiten realizar operaciones JOIN para combinar los resultados en un único conjunto de resultados sin problemas. El tipo más común de operación JOIN es INNER JOIN, pero existen otros tipos, como LEFT JOIN, RIGHT JOIN y FULL OUTER JOIN.
INNER JOIN:
INNER JOIN devuelve filas de ambas tablas cuando hay una coincidencia entre los valores de la(s) columna(s) FOREIGN KEY de una tabla y la(s) columna(s) de clave primaria o única de otra tabla. Vamos a ilustrarlo con un ejemplo:
SELECT clientes.nombre_cliente, pedidos.fecha_pedido FROM clientes INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente;
En el ejemplo anterior, recuperamos "nombre_cliente" de la tabla "clientes" y "fecha_pedido" de la tabla "pedidos". El INNER JOIN se realiza utilizando la FOREIGN KEY 'customer_id' de la tabla 'pedidos' que hace referencia a la clave primaria 'customer_id' de la tabla 'clientes'. Sólo las filas con valores "customer_id" coincidentes en ambas tablas se devuelven en el conjunto de resultados.
JOIN IZQUIERDO:
LEFT JOIN (o LEFT OUTER JOIN) devuelve todas las filas de la tabla izquierda (la tabla que aparece primero en la consulta) y las filas coincidentes de la tabla derecha (la tabla que aparece después en la consulta). Si no se encuentra ninguna coincidencia, se devuelven valores NULL para las columnas de la tabla derecha. Aquí tienes un ejemplo:
SELECT clientes.nombre_cliente, pedidos.fecha_pedido FROM clientes LEFT JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente;
En este caso, se muestran todas las filas de la tabla "clientes", y siempre que se encuentre una coincidencia en la tabla "pedidos" basada en el "id_cliente", también se muestra la columna "fecha_pedido". Si no hay un valor 'fecha_pedido' correspondiente, se muestra NULL para esa fila.
RIGHT JOIN y FULL OUTER JOIN:
Mientras que RIGHT JOIN (o RIGHT OUTER JOIN) devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda, FULL OUTER JOIN devuelve todas las filas cuando hay una coincidencia en la tabla izquierda o derecha. En ambos casos, se muestran valores NULL para las columnas de las filas no coincidentes.
Sin embargo, cabe señalar que algunas bases de datos relacionales, como MySQL, no admiten RIGHT JOIN y FULL OUTER JOIN. En tales casos, puedes utilizar LEFT JOIN y comandos SQL adicionales para conseguir resultados similares.
Combinación de SQL FOREIGN KEY con otros comandos SQL
Las FOREIGN KEY pueden utilizarse en combinación con otros comandos SQL para realizar eficazmente diversas operaciones en tu base de datos. A continuación, exploraremos algunos comandos SQL clave que pueden utilizarse junto con las FOREIGN KEY:
Cláusula WHERE:
Puedes utilizar la cláusula WHERE junto con las FOREIGN KEY para filtrar los resultados basándote en condiciones específicas. Aquí tienes un ejemplo:
SELECT clientes.nombre_cliente, pedidos.fecha_pedido FROM clientes INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente WHERE pedidos.fecha_pedido > '2021-01-01';
En este ejemplo, aplicamos la cláusula WHERE para filtrar los resultados y mostrar sólo los pedidos realizados después de '2021-01-01'.
Cláusula GROUP BY:
La cláusula GROUP BY se puede utilizar con las FOREIGN KEY para crear resultados agregados y agruparlos en función de atributos compartidos entre tablas. Por ejemplo
SELECT clientes.nombre_cliente, COUNT(pedidos.id_pedido) AS total_pedidos FROM clientes INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente GROUP BY clientes.id_cliente;
Esta consulta obtiene el número total de pedidos de cada cliente agrupando el conjunto de resultados según el atributo "customer_id".
Cláusula ORDER BY:
Puedes utilizar la cláusula ORDER BY con FOREIGN KEYs para ordenar los resultados de la consulta en función de columnas específicas de tablas relacionadas. Veamos un ejemplo
SELECT clientes.nombre_cliente, pedidos.fecha_pedido FROM clientes INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente ORDER BY pedidos.fecha_pedido DESC;
En este ejemplo, los resultados de la consulta se ordenan en orden descendente según la columna "fecha_pedido" de la tabla "pedidos".
Cuando trabajes con consultas complejas y varias tablas relacionadas, la combinación de las CLAVES EXTERNAS SQL con varios comandos SQL te permitirá optimizar la recuperación y manipulación de los datos, al tiempo que mantienes la integridad y coherencia de los datos dentro de tu base de datos relacional.
SQL FOREIGN KEY - Puntos clave
CLAVEFORÁNEA SQL: Columna o conjunto de columnas de una tabla que se utiliza para establecer un vínculo entre dos o más tablas de una base de datos relacional para reforzar la integridad referencial.
Claveprimaria vs CLAVE EXTRANJERA SQL: Las claves primarias identifican de forma única las filas dentro de una única tabla, mientras que las CLAVES EXTRAÑAS hacen referencia a valores de otras tablas, manteniendo la coherencia y la integridad de los datos entre tablas relacionadas.
SQL Añadir Clave Foránea: Las restricciones FOREIGN KEY se pueden añadir durante la creación de la tabla mediante sentencias CREATE TABLE o después de la creación de la tabla mediante sentencias ALTER TABLE con cláusulas ADD CONSTRAINT.
Clave foráneaSQL opcional: Se pueden especificar acciones ON DELETE y ON UPDATE al crear claves foráneas, lo que permite realizar acciones adicionales como CASCADE, SET NULL o SET DEFAULT durante las modificaciones de datos.
Consulta SQL con Clave Foránea: Las CLAVES EXTRAÑAS pueden utilizarse en consultas SQL para realizar operaciones JOIN, recuperar datos de forma eficaz y combinar resultados de varias tablas relacionadas.
Aprende más rápido con las 15 tarjetas sobre Clave foránea de SQL
Regístrate gratis para acceder a todas nuestras tarjetas.
Preguntas frecuentes sobre Clave foránea de SQL
Acerca de StudySmarter
StudySmarter es una compañía de tecnología educativa reconocida a nivel mundial, que ofrece una plataforma de aprendizaje integral diseñada para estudiantes de todas las edades y niveles educativos. Nuestra plataforma proporciona apoyo en el aprendizaje para una amplia gama de asignaturas, incluidas las STEM, Ciencias Sociales e Idiomas, y también ayuda a los estudiantes a dominar con éxito diversos exámenes y pruebas en todo el mundo, como GCSE, A Level, SAT, ACT, Abitur y más. Ofrecemos una extensa biblioteca de materiales de aprendizaje, incluidas tarjetas didácticas interactivas, soluciones completas de libros de texto y explicaciones detalladas. La tecnología avanzada y las herramientas que proporcionamos ayudan a los estudiantes a crear sus propios materiales de aprendizaje. El contenido de StudySmarter no solo es verificado por expertos, sino que también se actualiza regularmente para garantizar su precisión y relevancia.
Aprende más