Relación entre Tablas
Entender y aplicar correctamente las relaciones entre tablas es la clave para diseñar bases de datos relacionales robustas, eficientes y consistentes. Es lo que permite que tu base de datos no sea solo un montón de datos, sino un sistema organizado de información interconectada.
¿De que trata?
En una base de datos relacional, las relaciones entre tablas son el pegamento que conecta la información dispersa en diferentes tablas, dándole significado y coherencia. Imagina que tienes una tabla con datos de clientes y otra con datos de sus pedidos. Por sí solas, son solo listas. Las relaciones te permiten saber "qué pedidos hizo qué cliente", o "qué productos están en un pedido específico".
El propósito principal de establecer relaciones es:
Evitar la redundancia de datos: En lugar de repetir toda la información del cliente en cada uno de sus pedidos, simplemente vinculas el pedido a un cliente existente.
Mantener la integridad de los datos (Integridad Referencial): Asegurar que los datos relacionados sean consistentes. Por ejemplo, si un pedido está asociado a un cliente, ese cliente debe existir en la tabla de clientes. No se puede tener un pedido "flotando" sin un cliente asociado válido.
Facilitar la consulta y el análisis: Una vez que las tablas están relacionadas, puedes combinar fácilmente la información de varias tablas para responder preguntas complejas (ej., "Dame todos los pedidos que hizo Ana García").
Mejorar la organización: Divide la información en unidades lógicas y manejables.
¿Cómo se hacen las Relaciones entre Tablas?
Las relaciones se implementan principalmente a través de las claves foráneas y siguen ciertos modelos de cardinalidad (cuántos elementos de una tabla se relacionan con cuántos de otra).
1. Claves Foráneas (Foreign Keys - FK)
¿De qué trata? Una clave foránea es una columna (o conjunto de columnas) en una tabla que hace referencia a la clave primaria (PK) de otra tabla. Es el mecanismo físico que establece el vínculo entre dos tablas. El valor de la clave foránea en la tabla "hija" debe coincidir con un valor existente en la clave primaria de la tabla "padre" o ser NULL (si la columna lo permite).
¿Cómo se hace? Se define al crear la tabla o al modificarla, usando la cláusula FOREIGN KEY en SQL.
Ejemplo(SQL): Tenemos una tabla Clientes y una tabla Pedidos. Un Pedido pertenece a un Cliente.


FOREIGN KEY (ID_Cliente): Indica que la columna ID_Cliente en la tabla Pedidos es la clave foránea.
REFERENCES Clientes(ID_Cliente): Indica que esta clave foránea hace referencia a la columna ID_Cliente (que es la clave primaria) en la tabla Clientes.
2. Integridad Referencial
¿De qué trata? La integridad referencial es un conjunto de reglas que asegura que las relaciones entre las tablas de una base de datos permanezcan consistentes y válidas. Previene situaciones donde una clave foránea apunte a una clave primaria inexistente. Básicamente, garantiza que no haya "enlaces rotos" en tus datos.
¿Cómo se hace? Se aplica automáticamente cuando defines una FOREIGN KEY. Además, puedes especificar acciones a realizar cuando se intenta eliminar o actualizar un registro en la tabla "padre" que tiene registros relacionados en la tabla "hija".
ON DELETE y ON UPDATE (Acciones de Integridad Referencial):
RESTRICT (o NO ACTION): (Por defecto en muchos SGBD). Impide la eliminación o actualización de un registro en la tabla padre si existen registros relacionados en la tabla hija. (Ej: No puedes eliminar un cliente si tiene pedidos asociados).
CASCADE: Si un registro en la tabla padre es eliminado o actualizado, las filas relacionadas en la tabla hija también son eliminadas o actualizadas. (Ej: Si eliminas un cliente, todos sus pedidos asociados se eliminan automáticamente). ¡Usa con extrema precaución!
SET NULL: Si un registro en la tabla padre es eliminado o actualizado, el valor de la clave foránea en los registros relacionados de la tabla hija se establece en NULL. (Requiere que la clave foránea permita valores NULL). (Ej: Si eliminas un cliente, los pedidos que hizo ese cliente quedan con su ID_Cliente en NULL).
SQL:


3. Tipos de Relaciones (Cardinalidad)
La cardinalidad describe cuántas instancias de una entidad se relacionan con cuántas instancias de otra entidad.
a) Uno a Muchos (One-to-Many o 1:N)
¿De qué trata? Es el tipo de relación más común. Una instancia de la Entidad A se puede relacionar con cero, una o muchas instancias de la Entidad B, pero una instancia de la Entidad B solo puede relacionarse con una única instancia de la Entidad A.
Ejemplos:
Un Autor escribe muchos Libros.
Un Departamento tiene muchos Empleados.
Un Cliente realiza muchos Pedidos.
¿Cómo se hace? Se implementa colocando la clave primaria de la tabla "uno" como una clave foránea en la tabla "muchos".


SQL:
b) Uno a Uno (One-to-One o 1:1)
¿De qué trata? Una instancia de la Entidad A se relaciona con una única instancia de la Entidad B, y viceversa. Este tipo de relación es menos común y a menudo se usa para dividir una tabla grande en dos por razones de rendimiento, seguridad o modularidad.
¿Cómo se hace? Se implementa colocando la clave primaria de una de las tablas como clave foránea en la otra tabla, y además asegurando que esa clave foránea también sea UNIQUE.
Ejemplo: Un Usuario tiene una única ConfiguracionPerfil (información que no se usa con tanta frecuencia como los datos básicos del usuario).
SQL:


Aquí, ID_Usuario en ConfiguracionPerfil es tanto PK como FK, lo que fuerza la relación 1:1.
c) Muchos a Muchos (Many-to-Many o N:M)
¿De qué trata? Múltiples instancias de la Entidad A se relacionan con múltiples instancias de la Entidad B, y viceversa.
Ejemplos:
Muchos Estudiantes pueden inscribirse en muchos Cursos.
Muchos Productos pueden estar en muchos Pedidos.
Muchos Actores pueden participar en muchas Películas.
¿Cómo se hace? Este tipo de relación no se puede implementar directamente con una sola clave foránea. Requiere la creación de una tabla intermedia (o tabla de unión/asociación). Esta tabla intermedia tiene una clave primaria propia (opcional, pero buena práctica) y contiene al menos dos claves foráneas, cada una referenciando la clave primaria de las dos tablas originales.
Ejemplo(SQL): Estudiantes y Cursos.

