Borrado suave

Como hemos visto, al borrar un registro de una tabla ya no se puede recuperar. En teoría ese es el comportamiento que deseamos al realizar ese tipo de consultas – si borramos un registro es por alguna razón – pero que pasa si esa razón fue un accidente. Para prevenir esos accidentes podemos usar el borrado suave – soft delete -.

Borrado Suave

El borrado suave consiste en tener, además de las columnas necesarias para almacenar los datos de los registros, una columna adicional donde se va a guardar un valor que nos indique si el registro está activo – que no se ha borrado – o inactivo – si el registro ya se borró -.

Vuelvo a tomar la base de datos tutoriales como referencia para utilizar el borrado suave en la tabla de usuarios.

Vamos a revisar las columnas que tiene la tabla usuarios con el tipo de dato que tiene cada una.

-- Seleccionar la base de datos
-- para trabajar

USE tutoriales;

-- Describir la tabla usuarios

DESCRIBE usuarios;

Borrado suave - describe usuarios

Vamos a agregar la columna en la cual vamos a indicar si el registro está activo o no.

En este caso decidí nombrar la columna «borrado» * para indicar si el registro está borrado. Elegí entero como el tipo de dato. En este caso el valor 0 indica que el registro no está borrado – por eso se asignó como valor predeterminado – y 1 que el registro está borrado.

* Puedes nombrar la columna, utilizar otro tipo de dato y asignar los valores de manera que tenga más sentido en el contexto de tu aplicación.

-- Agregar una columna a la tabla usuarios
-- la columna la llamé borrado y va a ser 
-- de tipo entero. 
-- 1: El registro está borrado
-- 0: El registro está activo
-- Tiene un valor predeterminado 0
-- para que los registros existentes 
-- y los que se generen se consideren activos.

ALTER TABLE usuarios ADD COLUMN borrado INT DEFAULT 0;

-- Volvemos a revisar la estructura
-- de la tabla usuarios

DESCRIBE usuarios;

Borrado suave, agregar columna borrado

Ahora hay que hacer unos ajustes, en lugar de utilizar DELETE para borrar un registro vas a tener que utilizar UPDATE y actualizar el valor de la columna borrado.

Si recordamos el ejemplo de la entrada integridad referencial las inconsistencias en la base de datos se generaron al borrar el registro del usuario con id = 4. Con el borrado suave podemos prevenir estas inconsistencias – hasta el momento de borrar realmente el registro – .

-- En lugar de borrar los registros 
-- con DELETE

DELETE FROM usuarios WHERE id = 4;

-- Actualizamos el valor de la columna 
-- borrado con el valor que representa
-- que el registro ya no existe

UPDATE usuarios SET borrado = 1 WHERE id = 4;

Hay otros ajustes que es recomendable hacer para que la aplicación funcione correctamente.

Por ejemplo:

Agregar a la consulta el estado – status / estatus – del registro cuando se realizan las consultas.

-- En las consultas es recomendable
-- que agregues la condición 
-- borrado = 0
-- para que trabajes explícitamente
-- con los registros que están activos

SELECT * FROM usuarios WHERE borrado = 0;

-- Si quieres trabajar con los registros "borrados"
-- tendrías que agregar borrado = 1

SELECT * FROM usuarios WHERE borrado = 1;

En este momento los registros que tienen borrado suave los podemos representar como los archivos – de windows / os x – que están «en la papelera de reciclaje / basura».

Si quieres, después del borrado suave puedes implementar el borrado normal – utilizando DELETE – y tomando las consideraciones de integridad referencial.

Cuando utilices borrado suave, informa al usuario – si los datos almacenados son de un tercero sin importar quien los manipule – que los datos van a estar almacenados un tiempo determinado antes de borrarlos o en este caso habilitar directamente el borrado normal.

Para finalizar

El borrado suave un acercamiento que te puede servir si quieres prevenir que usuarios o tu mismo borren registros accidentalmente – más adelante vamos a revisar cómo hacer una interfaz básica con PHP y también como utilizar MySQL desde la terminal / línea de comandos -.

Deja un comentario

Tu dirección de correo electrónico no será publicada.