2012-03-27 24 views
7

Siempre he tenido una extraña sensación en mi instinto sobre la eliminación de filas de ciertos tipos de tablas.¿Eliminar filas de MySql, o marcar "muerto"?

Por ejemplo, si tengo una tabla de usuarios ... cuando eliminan su cuenta, en lugar de eliminar por completo su fila, he estado marcando como "inactiva" o inactiva. Esto me permite conservar un registro de su existencia si alguna vez lo necesito nuevamente.

En situaciones como esta - considerando el rendimiento, sobrecarga, etc. - ¿debo eliminar la fila, o simplemente marcar como inactiva?

¿Qué es más "común"?

Respuesta

4

Personalmente, casi siempre utiliza las "eliminaciones blandos" como usted la describe.

Si el espacio es una preocupación, tendré un trabajo que periódicamente limpiará los registros borrados temporalmente después de que hayan sido eliminados por un cierto período de tiempo.

3

¿Quizás podría mover los registros inactivos de MySQL a una tabla separada diseñada para mantener cuentas inactivas? De esta forma, simplemente puede moverlos de nuevo si es necesario o eliminar la tabla si el tamaño de la base de datos se convierte en un problema.

3

Los datos son muy valiosos para eliminarlos permanentemente de la base de datos. Marque como dead.

Generalmente doy el estado para tales casos. En este patrón

  1. 0 Inactivo
  2. 1 activo
  3. 2 Trashed
+0

Me gusta el enfoque basado en el número..guardar un poco por encima :) – johnnietheblack

+0

@johnnietheblack, sí 'tinyint' es suficiente – Starx

1

Además de las eliminaciones "suaves", otra solución es usar "tablas de auditoría". Pregunté what they were en dba.stackexchange.com recientemente.

tablas de auditoría generalmente se utilizan para registrar las acciones, tales como insertar/actualizar/borrar, realizada en una segunda tabla, posiblemente almacenar los valores antiguos y nuevos, el tiempo, etc.

Pueden ser implementados utilizando disparadores en una de manera directa.

Pros:

  • los datos "sin usar" está en una tabla separada
  • es fácil girar el mando de nivel-de-detalle de grano fino a grueso de grano
  • puede ser más eficientes en el espacio conveniente, dependiendo de la aplicación exacta

Contras:

  • ya que los datos se encuentra en una tabla separada, podría causar conflictos clave en el caso de que una fila eran "no borrado"
  • Puede ser menos eficiente en cuanto al espacio, dependiendo de la aplicación exacta
1

Esta pregunta me hizo recordar esta entretenida anecdote. Mi punto: hay tantos factores a tener en cuenta al elegir entre borrar duro y blando que no hay una regla que te indique cuál elegir.

Cuestiones relacionadas