Question

Je construis un site de gestion de contenu qui comprendra également d'autres caractéristiques. Lorsqu'un membre admin supprime un élément dans le panneau d'administration, je voudrais cet article à être déplacé vers une « corbeille » pour 30 jours (puis supprimé automatiquement).

Quelle est la meilleure façon de mettre en œuvre cette fonctionnalité?

Une idée que j'avais était d'avoir une colonne de bits « supprimé » dans ma table, alors seulement afficher les enregistrements WHERE Hide=0. Cependant, cela signifierait avoir à se rappeler de mettre cette condition en place chaque fois que je SELECT de la table.

Une autre idée que je devais était d'avoir une deuxième table où les enregistrements seraient déplacés quand supprimés. Cependant, j'ai beaucoup de tables utilisées dans mon site Web, cela signifierait doubler le nombre de tables, et ayant des structures de table en double (ce qui pourrait causer des problèmes de cohérence dans l'avenir).

Idéalement je voudrais avoir une table « RecycleBin » que tous les dossiers sont déplacés, mais cela pourrait contenir 100s de colonnes pour pouvoir stocker des données de toutes les différentes tables.

Si quelqu'un a d'autres idées, il serait le plus apprécié.

Merci.

Était-ce utile?

La solution

La plupart des implémentations je sais utiliser une colonne deleted (pas un booléen, mais un horodatage, de sorte que vous pouvez dire quand il a été supprimé). Oui, vous devrez ajouter à toutes vos questions, mais peut-être que vous utilisez une couche ORM, donc il suffit d'ajouter une fois? Je suggère d'aller ainsi.

Wikipédia utilise plusieurs tables pour le courant et les versions archivées de leurs articles, mais parce qu'ils sont hors de la ligue énorme, et les versions actuelles sont beaucoup plus souvent demandé que les anciennes versions.

Si vous souhaitez utiliser une table de RecycleBin, vous voudrez peut-être envisager de sérialisation les lignes et les mettre dans une colonne de value au lieu de stocker toutes les colonnes individuelles. Bien sûr, cela ne fonctionne que si vous n'avez pas besoin d'interroger sur le contenu des différentes colonnes des éléments supprimés, car ce sera très coûteux.

Autres conseils

En utilisant une colonne isDeleted est une bonne technique.

Vous pouvez combiner cela avec une suppression au lieu de déclenchement qui utilisera le drapeau au lieu d'une opération de suppression régulière. Vous pouvez également envelopper la table avec des vues, de sorte que seules les lignes non-suppression sont exposées dans la vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top