J'ai plusieurs tables où les données doivent être "marquées pour suppression" mais pas effacées, ou basculer entre les données publiées et cachées.Création de tables pour les données supprimées
La manière la plus intuitive de gérer ces cas est d'ajouter une colonne dans la base de données deleted int(1)
ou public int(1)
. Cela soulève le souci de ne pas oublier de spécifier WHERE deleted=0
pour chaque fois que cette table est en cours d'accès. J'ai pensé à surmonter cela en créant des tables dupliquées pour les données supprimées/non publiées telles que article
=>article_deleted
et en déplaçant les données au lieu de les supprimer. Cela fournit 2 numéros:
- contraintes clés étrangères finissent par être extrêmement ennuyeux pour maintenir
- Nombre de tables avec le contenu caché double (dans mon cas ~ 20 Devient ~ 40 tables)
Ma dernière idée est de créer une copie de la base de données entière appelée unreleased
et de migrer des données là-bas.
Ma question ne porte pas sur safety de la gestion des données, mais plus de - quelle est la bonne façon de le faire depuis le début?
C'est la douleur supplémentaire que vous prenez pour un problème très commun. Avoir une colonne supplémentaire 'deleted' est beaucoup plus simple. Je recommande contre la table en double. – Nishant
Je serais reconnaissant à MySQL d'avoir une colonne intégrée parmi les lignes de 'DNR_ON_SELECT' (ne pas retourner), et si une telle colonne existe et est définie sur 1, alors explicitement' SELECT IGNORE_DNR ...'est nécessaire – Mikhail
Une suggestion mineure, mais j'aurais pensé qu'il serait légèrement plus logique d'avoir un champ' active' plutôt qu'un 'deleted'. (Peut-être que c'est juste moi, mais il semble plus naturel d'inclure automatiquement une clause 'WHERE ... active = 1'.) –