Gestionar la eliminación de datos en SQL requiere especial cuidado y decisiones estratégicas. Existen dos métodos principales para borrar registros de una base de datos: el borrado lógico (suave) y el borrado físico (duro). Entender claramente ambos y cuándo utilizarlos aporta valor añadido tanto operativo como legalmente a un proyecto.
¿Qué es el borrado lógico y cuándo utilizarlo?
El borrado lógico o suave es una técnica que no elimina el registro por completo de la base de datos, sino que lo marca como inactivo mediante la adición de una columna especial, comúnmente denominada active. Esto permite conservar los datos para:
Generar estadísticas.
Mantener auditorías.
Cumplir obligaciones legales.
¿Cómo implementar una columna de borrado lógico?
Se debe añadir una nueva columna active de tipo tiny int, que indicará mediante valores (1 activo, 0 inactivo) el estado del registro:
ALTERTABLE clients ADDCOLUMN active TINYINTNOTNULLDEFAULT1AFTER phone number;
Al marcar un registro como inactivo, actualizamos su valor a 0 mediante comando:
UPDATE clients SET active =0WHERE client_id =3680;
¿Cuál es el procedimiento para borrar físicamente datos en SQL?
El borrado duro implica eliminar definitivamente un registro de la base de datos, acción que no permite recuperar fácilmente la información eliminada. El comando SQL utilizado es:
DELETEFROM clients WHERE condicion;
¿Qué prácticas seguras seguir al realizar un borrado físico?
Para evitar pérdidas accidentales, es recomendable seguir buenas prácticas como:
Comenzar siempre escribiendo WHERE false antes de especificar condiciones.
Limitar la cantidad de filas eliminadas mediante LIMIT.
Usar condiciones específicas y seguras como el identificador único o valores exactos.
Ejemplo práctico de borrado:
DELETEFROM clients WHERE email ='user@example.com'LIMIT1;
¿Qué consideraciones tener con las claves foráneas (foreign keys) al eliminar datos?
Al usar borrado duro en tablas con relaciones (foreign keys), se debe atender especialmente la configuración de cascada (on delete cascade) que permite eliminar automáticamente registros relacionados. Esto, aunque útil, requiere gran precaución porque podría causar eliminaciones inesperadas en múltiples tablas.
¿Cuál es la importancia del acuerdo técnico sobre el método de borrado?
Incluir claramente en el desarrollo del sistema y en acuerdos con el equipo la forma en que se manejan los borrados (lógico o físico) es esencial. La decisión final depende del contexto operativo, legal y de negocio del proyecto.
la columna active es en extremo útil, la uso mucho para estudiar los datos históricos. pero a medida que pasa el tiempo, las tabla van aumentado de tamaño.
pregunta: cuales son las mejores prácticas para tener buen performance de una tabla con datos active = 0? borrarlos no es una opción aceptable.
Creo que una opción que se sale de la normalización es generar una tabla de archivo de las tuplas no activas, cada cierto tiempo mover los no activos de la tabla principal a la tabla histórico, de este modo sigues conservando la información pero ya no en la tabla principal para no afectar su performance. Así cada cierto tiempo de mantenimiento de la tabla principal mueves los no activos actuales a esa de histórico. Es mi sugerencia.
La columna "active" en una base de datos es fundamental para implementar un borrado lógico. Esto significa que, al establecer el valor de "active" en 0 (cero), el registro se considera como eliminado sin borrarlo físicamente de la base de datos. Este enfoque permite conservar la información para auditorías, estadísticas y cumplimiento legal, asegurando que los datos no se pierdan completamente y puedan ser recuperados si es necesario.
bro tinyint es un tipo de dato entero que permite numeros entre cero a 255 es decir solo lo usa porque almacena un numero de 0 o 1, sirve para almacenar cosas pequeñas
Para el ejemplo del profesor en una tabla similar a esta podrías manejar distintos estados para el cliente, en boolean solo tendrías 0 y 1 para activo o inactivo, pero que tal que quisieras agregar un estado 2 que podría ser "suspendido", porque quizá manejes clientes, que solo requieran activación (0), pero otros que estén suspendidos (2) y requieran algo más, simplemente y creo lo hizo por experiencia, uso el tinyint pensando en crecimiento del estatus active.
Cuidado, porque aunque es muy usada esta idea no es necesariamente correcta. Un tinyint almacena 1 byte de información, es decir, puede guardar números desde el -128 al 127 o del 0 al 255 (si se usa unsigned). Mientras que esperaría que un boolean sólo bit (no byte) es decir, 0ó 1.
Hola a todos como dijo Andres Escobar cuando usamos el SQL worbench biene por defecto una activacion de proteccion de datos que no permoite borarr muchos datos a la vez que es normal en las empresas para protejerlos por si algun error humano se va y se borra mucha información.
La segunda tecnica para facilitar el borrado es la siguiente:
desactiva los permisos de seguridad y te deja borrar con el igualk a cero
SET SQL_SAFE_UPDATES = 0;
y despues de borrar vuelves a activar la seguridad por si acaso con el igual a 1
El borrado lógico es un método de eliminación de datos en bases de datos donde, en lugar de eliminar un registro de forma permanente, se marca como "inactivo" o "eliminado" mediante una columna adicional, como "active". Esto permite que el registro siga existiendo en la base de datos, preservando información valiosa para auditorías o estadísticas. Por ejemplo, se puede establecer "active" a 0 para indicar que el registro está borrado, mientras que un valor de 1 indica que está activo. Esto es útil para cumplir con regulaciones legales sobre la retención de datos.
El borrado lógico es crucial para cualquier registro que haya generado una huella de negocio o legal. Nunca debes borrar físicamente una venta, una factura o el registro de un ex-empleado.
El borrado físico se reserva para datos temporales, errores puros o información de alto volumen que no tiene implicaciones legales ni estadísticas. Priorizar el borrado físico de los datos obsoletos (como carritos abandonados o logsviejos) es una práctica de mantenimiento de bases de datos que mejora la eficiencia.
En el caso de borrado suave, inclusive, en el caso de modificaciones, es buena idea tener columnas tipo "last_modified_date" y "last_modified_by" para indicar fecha-hora y autor del cambio.
Esto también se puede aplicar para los borrados suaves para temas de control y seguimiento.
Depende de qué tan elaborada o detallada se desea la tabla y la base de datos.
Gran clase! Si la reglamentación del uso y protección de datos obliga a mantener la información durante un tiempo determinado, cuál sería el modelo que debemos usar cuando partimos de una Data Lake o estamos en un Data Warehouse? Es decir, si la BD estructurada original debe preservarse, podemos o debemos crear otra instancia de respaldo ? o siempre será una sola base de datos? que otras políticas podrían implementarse para no borrar la información en un proceso ETL bajo la gobernanza de datos en una empresa real.