2010-05-30 4 views

Répondre

6

C'est à peu près tout - un champ booléen pour indiquer que l'enregistrement est supprimé. Les quelques fois que j'ai utilisé cela, j'ai appelé ce champ IsDeleted.

Ceci est souvent appelé Logical Delete. C'est à vous de respecter ce champ dans vos rapports, ce qui veut dire d'exclure tous les enregistrements IsDeleted = true. Ces requêtes peuvent être un peu compliquées si vous avez beaucoup de tables et de relations. En outre, vous pouvez rencontrer des problèmes si vous avez des contraintes uniques sur une table. Par exemple, si dans une table utilisateur un utilisateur a IsDeleted = true et que la colonne e-mail est unique, il ne sera pas possible d'ajouter un nouvel utilisateur avec la même adresse e-mail.

Certains ORM prennent en compte ces champs - par exemple, SubSonic 2.2 ne supprimera pas un enregistrement s'il existe une colonne nommée 'Supprimé' ou 'IsDeleted', mais définira ce champ à true.

Quelques ressources connexes:

Comme alternative à cela, vous pouvez ajouter des tables d'audit.

1

Je pense que c'est une bonne solution. Une autre approche consiste à déplacer les données vers une autre table, une sorte de table d'historique, de sorte qu'il sera plus rapide de rechercher des données dans la table contenant les données actives. Mais cela dépend de votre situation.

2

J'utilise habituellement IsDeleted.

S'il y a plusieurs états (par exemple normal, archive, supprimé), je pourrais utiliser un Enum (ou Int si non disponible) pour représenter l'état. Habituellement, je nommerais le champ Statut ou État dans ce cas.

1

Dans le secteur bancaire, il est considéré comme une bonne pratique de stocker toutes les modifications (pas seulement les suppressions). Habituellement, il est fait dans "tables de log" avec le DDL presque le même que l'original plus quelques drapeaux pour indiquer le type d'opération, date & temps, utilisateur, etc. MAIS (TRES important) les tables de journal sont définies sans touches uniques!

1

J'utiliserais datetime, null pour alive, timstamp pour "deleted on".

Il est parfait pour

if(timestamp) {} 

car sa valeur par défaut null.

Questions connexes