¡Suscríbete a mi canal de Youtube!

Donaciones

▷ Integridad Referencial 【 ON DELETE Y ON UPDATE 】 y PARTICIPACIONES CERO en MySQL

Integridad Referencial y Participaciones Cero

Cuando trabajamos con bases de datos relacionales, es fundamental garantizar que los datos se mantengan consistentes y significativos. Aquí es donde conceptos como la integridad referencial y las participaciones cero desempeñan un papel muy importante. En este artículo, desglosaremos qué son, cómo funcionan y por qué son esenciales.

 ¿Qué es la integridad referencial?

La integridad referencial asegura que las relaciones entre tablas sean consistentes. Esto significa que los valores de una columna (o combinación de columnas) en una tabla hija deben coincidir con un valor existente en una tabla padre.

Por ejemplo, si tienes una tabla Pedidos que hace referencia a la tabla Clientes, cada valor en la columna id_cliente de Pedidos debe existir en la columna id de Clientes.

Cómo se implementa la integridad referencial

Esto se logra mediante el uso de claves foráneas (foreign keys). La clave foránea establece una relación entre las tablas, permitiendo que el sistema de la base de datos valide automáticamente las inserciones, actualizaciones o eliminaciones para mantener la consistencia.

Sintaxis para crear una clave foránea en SQL:

CREATE TABLE Pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT,
    fecha DATE,
    FOREIGN KEY (id_cliente) REFERENCES Clientes (id)
);

Con esta definición:

  • No se puede insertar un id_cliente en Pedidos que no exista en Clientes.
  • Dependiendo de las restricciones configuradas, si eliminas un cliente de Clientes, los pedidos asociados en Pedidos podrían ser eliminados automáticamente, actualizados, o causar un error.

Cláusulas ON DELETE y ON UPDATE: Controlando las Acciones sobre Claves Foráneas

Cuando defines una clave foránea, puedes especificar qué debe ocurrir con los registros relacionados en la tabla hija si un registro de la tabla padre es eliminado o actualizado. Esto se logra mediante las cláusulas ON DELETE y ON UPDATE.

Estas cláusulas son esenciales para garantizar la integridad referencial y evitar que los datos en las tablas relacionadas queden en un estado inconsistente.

Opciones de ON DELETE y ON UPDATE

  1. CASCADE

    • Descripción: Los cambios en la tabla padre se propagan automáticamente a los registros relacionados en la tabla hija.
    • Uso típico: Para modelos donde los datos relacionados deben seguir los cambios de la tabla padre.
    • Ejemplo de eliminación (ON DELETE CASCADE): Si eliminas un cliente en la tabla Clientes, todos los pedidos asociados en la tabla Pedidos también se eliminan.
    • Ejemplo de actualización (ON UPDATE CASCADE): Si cambias el id de un cliente en la tabla Clientes, ese cambio se refleja automáticamente en la tabla Pedidos.
  2. SET NULL

    • Descripción: Los valores de las columnas relacionadas en la tabla hija se establecen en NULL cuando ocurre una eliminación o actualización en la tabla padre.
    • Uso típico: Para relaciones opcionales donde no siempre es necesario que haya una referencia válida.
    • Ejemplo (ON DELETE SET NULL): Si eliminas un proyecto de la tabla Proyectos, los empleados asignados a ese proyecto tienen su columna id_proyecto establecida en NULL.
  3. SET DEFAULT

    • Descripción: Los valores de las columnas relacionadas se establecen en un valor predeterminado definido previamente.
    • Uso típico: Para situaciones donde quieres que las relaciones inválidas se reemplacen con un valor específico.
    • Ejemplo: Si eliminas un supervisor en la tabla Supervisores, todos los empleados relacionados podrían ser asignados a un supervisor predeterminado.
  4. NO ACTION (comportamiento por defecto)

    • Descripción: Prohíbe la eliminación o actualización si hay registros relacionados en la tabla hija.
    • Uso típico: Para mantener estrictamente la integridad referencial, impidiendo cambios que dejarían datos huérfanos.
    • Ejemplo: No se puede eliminar un cliente si tiene pedidos activos.
  5. RESTRICT (similar a NO ACTION)

    • Descripción: Similar a NO ACTION, pero verifica la restricción inmediatamente. Mientras tanto, NO ACTION permite verificarla al final de la transacción.
    • Ejemplo: No puedes actualizar o eliminar un registro en la tabla padre si afecta a registros en la tabla hija.

Ejemplo Práctico

Supongamos que tienes dos tablas: Clientes y Pedidos.

Definición con ON DELETE y ON UPDATE:

CREATE TABLE Clientes (
    id INT PRIMARY KEY,
    nombre VARCHAR(100)
);

CREATE TABLE Pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT,
    fecha DATE,
    FOREIGN KEY (id_cliente) REFERENCES Clientes(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

Lo que sucede:

ON DELETE CASCADE: Si eliminas un cliente en la tabla Clientes, automáticamente se eliminan todos los pedidos asociados en la tabla Pedidos.

DELETE FROM Clientes WHERE id = 1;

Esto elimina también los pedidos con id_cliente = 1.

ON UPDATE CASCADE: Si cambias el id de un cliente en Clientes, el id_cliente de todos los pedidos relacionados en la tabla Pedidos se actualiza automáticamente.

UPDATE Clientes SET id = 2 WHERE id = 1;
 
Esto actualiza todos los registros en Pedidos donde id_cliente = 1 a id_cliente = 2.

Participaciones cero en relaciones

La participación cero ocurre cuando una tabla no está obligada a tener una relación con otra en un momento dado. En términos prácticos, significa que una clave foránea puede aceptar valores nulos (NULL), lo que indica que no existe una relación en ese registro específico.

Ejemplo de participación cero:

Supongamos que tienes una tabla Empleados y otra tabla Proyectos. Algunos empleados pueden no estar asignados a ningún proyecto.

Definición con participación cero:

CREATE TABLE Empleados (
    id_empleado INT PRIMARY KEY,
    nombre VARCHAR(100),
    id_proyecto INT NULL,
    FOREIGN KEY (id_proyecto) REFERENCES Proyectos (id)
);
 

En este caso, id_proyecto permite valores nulos (NULL), lo que indica que el empleado no está asignado a ningún proyecto. Esto representa una participación opcional.

Participaciones obligatorias vs. participaciones cero

Participación obligatoria: Cada registro en la tabla hija debe tener una relación con la tabla padre. Esto se aplica cuando la clave foránea no permite valores nulos.

Ejemplo:

 CREATE TABLE Pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT NOT NULL,
    fecha DATE,
    FOREIGN KEY (id_cliente) REFERENCES Clientes (id)
);

Participación cero: La relación es opcional, y la clave foránea puede ser nula.

Ejemplo:

CREATE TABLE Facturas (
    id_factura INT PRIMARY KEY,
    id_pedido INT NULL,
    fecha DATE,
    FOREIGN KEY (id_pedido) REFERENCES Pedidos (id)
);

En este caso, puede haber facturas que no estén asociadas a un pedido específico.

Buenas prácticas para trabajar con integridad referencial y participaciones

  1. Define correctamente las claves foráneas: Asegúrate de que las relaciones reflejen los requisitos reales de tu modelo de datos.
  2. Decide cuándo usar participación cero: Usa columnas nulas solo cuando sea necesario y tenga sentido en el contexto del negocio.
  3. Utiliza restricciones adicionales si es necesario: Además de las claves foráneas, puedes usar restricciones como ON DELETE CASCADE o ON DELETE SET NULL para definir qué sucede con los registros relacionados al eliminar datos en la tabla padre.
  4. Documenta tus relaciones: Es importante que todos los desarrolladores que trabajen con tu base de datos entiendan las reglas de integridad y participación.

 En el siguiente video te muestro como usar la integridad referencial y las participaciones cero.


No te olvides darle LIKE y SUSCRIBIRTE al blog y a mi canal si te gustó el video. Si gustas realizar una DONACIÓN para ayudarme a mejorar el canal y mi contenido, puedes hacerlo mediante el botón ❤$GRACIAS ubicado en la parte posterior del video en YouTube o visitando el enlace https://linktr.ee/ezavalar y haciendo clic en el botón Donaciones.

Comentarios

Entradas populares

Seguidores del blog

Suscríbete al blog

Recibe mis nuevas publicaciones por email: