2010-10-12 12 views
1

Nous avons une grande application de gestion et nous faisons beaucoup de journalisation pour chaque action, par exemple, qui a fait quoi et à quelle heure.NHibernate, une colonne deux significations, positive/négative

Cependant, nous avons de plus en plus de systèmes automatiques que nous aimerions différencier.

Dans toutes nos tables, nous avons une colonne appelée PerformedBy qui est un int. Cela a toujours été une référence à une table appelée employés qui ont alors un nom correspondant. Cependant, nous aimerions maintenant avoir quelques utilisateurs du système (par exemple serveur de paiement en ligne, réservation en ligne, etc.). Nous pourrions créer ces éléments dans la table des employés, mais cela semble incorrect et nous ne serions pas certains des ID (c'est un système commercial, donc nous avons 200 bases de données qui devraient être mises à jour.)

Je voudrais vraiment faire est de faire une cartographie de sorte que si un ID est positif, il correspond à un employé qui est chargé à partir de la base de données. Cependant, si elle est négative, je voudrais avoir des classes statiques qui dérivent de l'employé un pour chaque type d'utilisateur du système.

Quelque chose comme:

class OnlineBooking : Employee 
{ 
} 

est quelque chose comme ceci possible avec NHibernate ou que quelqu'un a une autre grande solution? Je ne souhaite pas ajouter de colonnes supplémentaires à TOUTES les tables qui ont des journaux.

+1

Vous devriez vraiment créer une autre colonne qui indique juste le type de la personne ... Ids positifs et négatifs ... C'est un coup de feu dans votre propre pied. – Pedro

+0

Si vous utilisez des relations lors de l'audit, je suppose que vous n'autorisez pas la suppression de données telles qu'une ligne dans la table Employees, sinon vous invaliderez un segment important de vos audits. Je suppose que vous faites des suppressions logiques ou quelque chose. – cdmdotnet

+0

Dans le même temps, comment pouvez-vous répondre aux changements de données, tels que le nom d'un employé. Je n'ai aucune idée de ce qu'est votre système, mais dans la plupart des systèmes que j'ai transmis aux utilisateurs, ils ne créent pas toujours de nouveaux utilisateurs, ils ne font que renommer les anciens lorsque les gens quittent l'entreprise et que de nouveaux utilisateurs rejoignent. Avoir votre nom contre quelque chose que vous n'avez pas fait, c'est plutôt la personne devant vous, ce n'est pas une bonne piste de vérification. – cdmdotnet

Répondre

0

Une colonne/deux significations est une odeur de base de données classique. Vous voulez vraiment diviser cela en deux colonnes.

Vous ne pourrez pas activer les contraintes de clé étrangère avec l'approche positive/négative que vous décrivez.

http://www.agiledata.org/essays/databaseRefactoringSmells.html

Cela simplifie aussi grandement la cartographie. Ajout d'une colonne peut sembler beaucoup de travail supplémentaire, mais cela en vaut la peine à long terme.