Pregunta

Estoy construyendo un sitio web de gestión de contenidos que incluirá también otras características. Cuando un miembro de administrador, se elimina un artículo a través del panel de administración, me gustaría este elemento a ser movido a un 'papelera de reciclaje' durante 30 días (entonces borrada automáticamente).

¿Cuál es la mejor forma de implementar esta característica?

Una idea que tenía era tener una columna poco 'eliminados' en mi mesa, a continuación, mostrar sólo los registros WHERE Hide=0. Sin embargo, esto significaría tener que recordar poner esta condición en su lugar cada vez que SELECT de la mesa.

Otra idea que tenía era tener una segunda mesa en la que los registros serían trasladados a cuando se elimina. Sin embargo, he muchas mesas que se utilizan en mi página web, por lo que esto significaría duplicar la cantidad de mesas, y tener estructuras de tabla duplicados (que podría causar problemas de coherencia en el futuro).

Lo ideal sería que me gustaría tener una mesa 'RecycleBin' que todos los registros se mueven a, pero esto podría contener 100s de columnas que ser capaz de almacenar datos de todas las tablas diferentes.

Si alguien tiene alguna otra idea sería muy apreciada.

Gracias.

¿Fue útil?

Solución

La mayoría de las implementaciones que saben utilizar una columna deleted (no un valor lógico, pero una marca de tiempo, lo que puede indicar cuando fue eliminado). Sí, tendrá que añadir esto a todas sus consultas, pero tal vez usted está utilizando una capa ORM, por lo que sólo tiene que añadir una sola vez? Sugeriría ir de esta manera.

Wikipedia utiliza varias tablas de la corriente y las versiones archivadas de sus artículos, pero eso es porque están fuera de la liga enorme, y se pide a las versiones actuales mucho más a menudo que las versiones anteriores.

Si desea utilizar una tabla RecycleBin, es posible que desee considerar la serialización de las filas y ponerlos en una columna value en lugar de almacenar todas las columnas individuales. Por supuesto, esto sólo funciona si no es necesario para la consulta sobre el contenido de las columnas individuales de los elementos eliminados, ya que será muy costoso.

Otros consejos

utilizando una columna de isDeleted es una técnica bien.

Se puede combinar esto con una eliminación en lugar de disparo que utilizará la bandera en lugar de una operación de eliminación regular. También puede envolver la mesa con vistas, por lo que sólo las filas no-suprima están expuestos en la vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top