Je dois d'abord préciser que la colonne d'état n'est pas destinée à refléter l'état d'un élément réel représenté par l'enregistrement (ligne) dans le tableau. Il vise plutôt à montrer l'état de l'enregistrement lui-même.
Il peut être aussi simple que actif / inactif ou compliqué comme approuvé / supprimé / Verrouillé / En attente / Rejeté, etc. L'état peut être stocké sur un booléen / courte colonne entière ou une colonne d'un seul caractère, avec correspondances comme true
/ 1
= active ou A
= Approuvé.
L'idée de base est d'avoir un support de récupération de type corbeille / corbeille dans l'application (et de le simuler dans la base de données). S'il existe une interface graphique frontale ou une autre interface qui peut soi-disant permettre à un utilisateur de "supprimer" des enregistrements, il ne supprime pas réellement l'enregistrement dans la table, mais modifie simplement l'état de l'enregistrement en Inactif ou Supprimé. Lorsque l'interface récupère des enregistrements, elle obtient toujours les enregistrements qui correspondent uniquement à la condition selon laquelle l'état est Actif ou Approuvé.
Si l'utilisateur fait une erreur et que l'enregistrement "supprimé" (du point de vue de l'utilisateur) doit être récupéré, un administrateur de base de données peut facilement corriger l'enregistrement en étant actif ou approuvé, ce qui serait mieux que de rechercher des sauvegardes et, espérons-le, de trouver l'enregistrement d'origine Là. Ou l'interface elle-même peut permettre à l'utilisateur d'afficher les enregistrements supprimés dans une vue distincte, et de les restaurer selon les besoins, ou même de les supprimer définitivement (suppression de l'enregistrement réel).
Mes questions:
- Est-ce une bonne ou une mauvaise pratique?
- Cela affecte-t-il la normalisation des données?
- Quels sont les pièges potentiels?
- Existe-t-il une autre méthode pour atteindre le même objectif? (voir la note)
- Comment pouvez-vous faire en sorte que la base de données applique des contraintes uniques sur les données pour un certain statut uniquement (mais autorise un nombre illimité de doublons pour d'autres statuts)?
- Pourquoi les bases de données ne fournissent-elles pas une fonctionnalité de type «corbeille» ou un suivi / récupération de table en mode natif, afin que nous puissions laisser les interfaces supprimer les enregistrements réels sans souci?
Remarque: J'ai lu sur la gestion d'une table d'historique distincte, mais cela semble pire en termes de stockage et d'avoir à générer des déclencheurs et à maintenir les déclencheurs à jour avec le schéma de la table suivie.