No creo que sea la única persona que se pregunta esto. ¿Qué suele practicar sobre el comportamiento de las bases de datos? ¿Prefieres eliminar un registro de la base de datos físicamente? ¿O es mejor marcar el registro con una marca de "eliminado" o una columna booleana para indicar que el registro está activo o inactivo?
database
database-design
jerbersoft
fuente
fuente
Respuestas:
Definitivamente depende del contenido real de su base de datos. Si lo está utilizando para almacenar información de la sesión, límpielo inmediatamente cuando la sesión expire (o se cierre), no querrá que la basura se quede por ahí. Ya que realmente no se puede volver a utilizar con fines prácticos.
Básicamente, lo que debe preguntarse, ¿podría necesitar restaurar esta información? Al igual que las preguntas eliminadas en SO, definitivamente deberían estar marcadas como 'eliminadas', ya que permitimos activamente una recuperación. También tenemos la opción de mostrarlo a usuarios seleccionados, sin mucho trabajo adicional.
Si no está buscando activamente restaurar por completo los datos, pero aún así le gustaría conservarlos para fines de monitoreo (o similares). Le sugiero que descubra (en la medida de lo posible, por supuesto) un esquema de agregación y lo lleve a otra mesa. Esto mantendrá su tabla principal limpia de datos 'eliminados', así como también mantendrá su tabla secundaria optimizada para propósitos de monitoreo (o lo que sea que tenga en mente).
Para obtener datos temporales, consulte: http://talentedmonkeys.wordpress.com/2010/05/15/temporal-data-in-a-relational-database/
fuente
Ventajas de usar una bandera de eliminación:
Contras de usar una bandera de eliminación:
AND DeletedFlag = 'N'
en algún lugar de su SQLfuente
Como complemento a todas las publicaciones ...
Sin embargo, si planea marcar el registro, es bueno considerar hacer una vista, para registros activos. Esto le evitaría escribir u olvidar la bandera en su consulta SQL. También puede considerar una vista para registros no activos, si cree que también tiene un propósito.
fuente
Me alegro de haber encontrado este hilo. Yo también me preguntaba qué pensaba la gente sobre este tema. He implementado el "marcado como eliminado" durante unos 15 años en muchos sistemas. Cada vez que un usuario llamaba para decir que algo se eliminó accidentalmente, ciertamente era mucho más fácil marcarlo como no eliminado que volver a crearlo o restaurarlo desde una copia de seguridad.
Estamos usando postgresql y Ruby on rails, parece que podríamos hacer esto de una de dos maneras, modificar los rieles o agregar un disparador ondelete y en su lugar, hace una función pl / pgsql para marcar como eliminado. Me estoy inclinando hacia lo último.
En cuanto a los impactos de rendimiento, será interesante ver los resultados de EXPLAIN-ANALYZE en tablas grandes para pocos elementos eliminados, así como muchos elementos eliminados.
En los sistemas usados a lo largo del tiempo que he descubierto, los nuevos usuarios tienden a hacer cosas tontas como eliminar cosas accidentalmente. Entonces, cuando las personas son nuevas en un puesto, tienen todos los derechos de acceso de la persona que estuvo anteriormente en ese puesto, excepto con cero experiencia. Eliminar algo accidentalmente y poder recuperarse rápidamente hace que todos vuelvan a trabajar rápidamente.
Pero como alguien dijo, a veces es posible que necesite esa clave en particular por alguna razón, en ese momento necesitaría eliminarla realmente, luego volver a crear los registros (al recuperarla y modificar el registro).
fuente
También existen problemas legales de cualquier manera si se trata de datos personales. Creo que depende en gran medida de dónde se encuentre (o dónde esté la base de datos) y cuáles son los términos de uso.
En algunos casos, las personas pueden solicitar ser eliminadas de su sistema, en cuyo caso se necesita una eliminación completa (o al menos borrar toda la información personal).
Verificaría con su departamento legal antes de adoptar una estrategia de cualquier manera si hay información personal involucrada.
fuente
Los marco como eliminados y no los elimino realmente. Sin embargo, de vez en cuando barro toda la basura y la archivo, para que no mate el rendimiento.
fuente
Si le preocupa que los registros "inactivos" ralenticen el acceso a la base de datos, es posible que desee mover esas filas a otra tabla que actúe como una tabla de "archivo".
fuente
Para los datos ingresados / administrados por el usuario, he usado el método de marca que usted describe y le he dado al usuario una interfaz de "vaciar la papelera" para eliminar elementos si así lo desea.
fuente