2009-11-23 24 views
6

Conozco dos formas de eliminar datos de una tabla de base de datos¿Cómo eliminar desde una base de datos?

  • eliminarla para siempre
  • Usar una bandera como isActive/isDeleted

Ahora el problema con isActive es que tengo para hacer un seguimiento en todas partes en mis consultas SQL que el registro esté activo o no. Sin embargo, al usar DELETE se eliminan los datos para siempre.

¿Cuál sería la mejor manera de hacer una copia de seguridad de esta información?

Suponiendo que tengo varias tablas en una base de datos, ¿debería tener una función común que simplemente respalda todo y la almacena en otra tabla (probablemente en XML?) O hay alguna otra manera.

Estoy usando MySQL pero también tengo curiosidad sobre las técnicas utilizadas en otras DB.

+2

personas pueden ser lo suficientemente agradables para darle fragmentos de código si nos diga qué software DB está usando :) – tloach

+0

Usando MySQL. ¿No son todos los demás? : P – Abhinav

Respuesta

13

Reemplace la tabla con una vista que oculte los elementos inactivos.

O escriba un desencadenador en DELETE que haga una copia de seguridad de la fila en una tabla de archivo.

0

Puede particionar las tablas en la columna de la DELETED y definir los puntos de vista que incluiría la condición:

… AND deleted = 0 

Esto hará que las consultas sobre los datos activos tan simples y eficientes.

+0

abhinav quiere eliminar filas ... así que tendría que ser una partición horizontal. – reinierpost

+0

El particionamiento y el uso de las vistas (en 'SQL Server' y' Oracle') harán que las consultas actúen exactamente como si las filas se eliminaran físicamente de las tablas. Y para trabajar con los datos eliminados (o agregados), siempre puede escribir consultas menos simples directamente en las tablas. – Quassnoi

2

Puede utilizar un disparador que dispare al eliminar registros para hacer una copia de seguridad de ellos en algún tipo de tabla de cementerio.

0

Bueno, si usaba SqlServer, puede usar activadores, que le permitirán mover el registro a una tabla eliminada.

+1

SQL Server no es la única base de datos con una característica desencadenante, pero ayudaría saber si Abhinav está utilizando un RDBMS que admite desencadenadores. Otros en los que puedo pensar son MySQL, Oracle, Progress OpenEdge y probablemente otros. – ssakl

+0

Tengo MySQL 4.1.25. ¿Funcionará esto allí? – Abhinav

+0

Si esa versión tiene activadores, entonces sí, debería. Lo siento, uso el servidor Sql, así que no estoy seguro acerca de la versión que estás usando. –

2

Puede usar una columna isDeleted y definir una vista que seleccione todas las columnas excepto isDeleted con la condición isDeleted = false. Luego, haz que todos tus stps funcionen solo con la vista.

1

Se podría mantener una tabla de historia, en el que volver el registro y sello de tiempo

1

Una de las mayores razones para no eliminación de datos es que puede ser necesario para una relación - por ejemplo, el usuario puede decidir eliminar un cliente antiguo de la base de datos, pero aún necesita el registro del cliente porque se hace referencia a él mediante facturas antiguas (que pueden tener una vida útil mucho más larga).

Basado en esto, la mejor solución es a menudo el tipo de columna "IsDeleted", combinada con una vista (Quassnoi mencionó las particiones, que pueden ayudar con problemas de rendimiento que pueden aparecer debido a una gran cantidad de datos invisibles).

Cuestiones relacionadas