La integridad referencial es un concepto fundamental en el diseño y gestión de bases de datos relacionales. Garantiza que las relaciones entre tablas se mantengan coherentes, evitando la existencia de referencias inválidas o huérfanas.
Conceptos Clave
-
Clave Primaria (Primary Key):
- Es un campo (o combinación de campos) que identifica de manera única cada registro en una tabla.
- Ejemplo: En una tabla
Clientes
, el campoClienteID
puede ser la clave primaria.
-
Clave Foránea (Foreign Key):
- Es un campo en una tabla que se refiere a la clave primaria de otra tabla.
- Ejemplo: En una tabla
Pedidos
, el campoClienteID
puede ser una clave foránea que se refiere aClienteID
en la tablaClientes
.
-
Restricción de Integridad Referencial:
- Es una regla que asegura que las claves foráneas en una tabla siempre correspondan a valores válidos en la tabla referenciada.
- Ejemplo: Si
ClienteID
enPedidos
debe existir enClientes
, no se puede insertar un pedido con unClienteID
que no exista enClientes
.
Ejemplo Práctico
Consideremos dos tablas: Clientes
y Pedidos
.
Tabla Clientes
Tabla Pedidos
CREATE TABLE Pedidos ( PedidoID INT PRIMARY KEY, Fecha DATE, ClienteID INT, FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) );
En este ejemplo:
ClienteID
enClientes
es la clave primaria.ClienteID
enPedidos
es una clave foránea que referencia aClienteID
enClientes
.
Operaciones de Integridad Referencial
-
Inserción:
- No se puede insertar un registro en
Pedidos
con unClienteID
que no exista enClientes
.
-- Esto fallará si no existe un ClienteID = 1 en la tabla Clientes INSERT INTO Pedidos (PedidoID, Fecha, ClienteID) VALUES (1, '2023-10-01', 1);
- No se puede insertar un registro en
-
Actualización:
- Si se actualiza
ClienteID
enClientes
, se debe asegurar que las referencias enPedidos
se mantengan coherentes.
-- Esto fallará si existen registros en Pedidos que referencian al ClienteID = 1 UPDATE Clientes SET ClienteID = 2 WHERE ClienteID = 1;
- Si se actualiza
-
Eliminación:
- No se puede eliminar un registro en
Clientes
si existen registros enPedidos
que lo referencian.
-- Esto fallará si existen registros en Pedidos que referencian al ClienteID = 1 DELETE FROM Clientes WHERE ClienteID = 1;
- No se puede eliminar un registro en
Opciones de Integridad Referencial
Al definir una clave foránea, se pueden especificar acciones a realizar en cascada:
-
ON DELETE CASCADE:
- Si se elimina un registro en la tabla referenciada, también se eliminan los registros relacionados en la tabla que contiene la clave foránea.
CREATE TABLE Pedidos ( PedidoID INT PRIMARY KEY, Fecha DATE, ClienteID INT, FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) ON DELETE CASCADE );
-
ON UPDATE CASCADE:
- Si se actualiza la clave primaria en la tabla referenciada, se actualizan automáticamente las claves foráneas en la tabla relacionada.
CREATE TABLE Pedidos ( PedidoID INT PRIMARY KEY, Fecha DATE, ClienteID INT, FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) ON UPDATE CASCADE );
Ejercicio Práctico
Ejercicio
- Crea las tablas
Clientes
yPedidos
con las restricciones de integridad referencial adecuadas. - Inserta algunos registros en
Clientes
. - Intenta insertar un registro en
Pedidos
con unClienteID
que no exista enClientes
. - Actualiza un
ClienteID
enClientes
y observa el comportamiento enPedidos
. - Elimina un registro en
Clientes
y observa el comportamiento enPedidos
.
Solución
-- Crear tabla Clientes CREATE TABLE Clientes ( ClienteID INT PRIMARY KEY, Nombre VARCHAR(100), Email VARCHAR(100) ); -- Crear tabla Pedidos con clave foránea CREATE TABLE Pedidos ( PedidoID INT PRIMARY KEY, Fecha DATE, ClienteID INT, FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) ON DELETE CASCADE ON UPDATE CASCADE ); -- Insertar registros en Clientes INSERT INTO Clientes (ClienteID, Nombre, Email) VALUES (1, 'Juan Perez', '[email protected]'); INSERT INTO Clientes (ClienteID, Nombre, Email) VALUES (2, 'Ana Gomez', '[email protected]'); -- Intentar insertar un registro en Pedidos con un ClienteID inexistente -- Esto fallará INSERT INTO Pedidos (PedidoID, Fecha, ClienteID) VALUES (1, '2023-10-01', 3); -- Insertar un registro válido en Pedidos INSERT INTO Pedidos (PedidoID, Fecha, ClienteID) VALUES (2, '2023-10-02', 1); -- Actualizar ClienteID en Clientes -- Esto actualizará automáticamente el ClienteID en Pedidos UPDATE Clientes SET ClienteID = 3 WHERE ClienteID = 1; -- Eliminar un registro en Clientes -- Esto eliminará automáticamente los registros relacionados en Pedidos DELETE FROM Clientes WHERE ClienteID = 3;
Conclusión
La integridad referencial es crucial para mantener la coherencia y la validez de los datos en una base de datos relacional. Al comprender y aplicar correctamente las restricciones de integridad referencial, se pueden evitar errores y asegurar que las relaciones entre tablas se mantengan consistentes.
Fundamentos de Bases de Datos
Módulo 1: Introducción a las Bases de Datos
- Conceptos Básicos de Bases de Datos
- Tipos de Bases de Datos
- Historia y Evolución de las Bases de Datos
Módulo 2: Bases de Datos Relacionales
Módulo 3: Bases de Datos No Relacionales
- Introducción a NoSQL
- Tipos de Bases de Datos NoSQL
- Comparación entre Bases de Datos Relacionales y No Relacionales
Módulo 4: Diseño de Esquemas
- Principios de Diseño de Esquemas
- Diagramas Entidad-Relación (ER)
- Transformación de Diagramas ER a Esquemas Relacionales