2017-04-17 1 views
-2

J'ai dans mon système de nombreux documents tels que des factures de commandes, des demandes d'achat, etc. Pour suivre leur flux d'approbation, j'ai une table commune dans laquelle j'ai les colonnes suivantes.Dois-je dénormaliser à une jointure avec un bit ajouté, ou quoi?

WFID ActionDate DocInstancetype DocinstanceID iscurrent status 
1  2017-04-04  PO    58   0  Submitted 
2  2017-04-05  PO    58   1  Approved 
3  2017-04-04  PR    74   1  Submitted 

Dans mes rapports, je dois habituellement considérer uniquement les documents approuvés. Est-ce une bonne idée d'ajouter un bit IsApproved dans la table Documents Master (dans les tables PR et PO) et de le synchroniser à l'aide d'un trigger afin d'éviter une jointure avec une table de workflow chaque fois que je n'ai besoin que de documents approuvés?

Toute autre meilleure suggestion serait également appréciée.

+2

Il est difficile de donner des conseils, car il manque beaucoup d'informations ici. À quoi ressemblent les tableaux PO et PR, quelle est la signification du contenu de chaque table, comment les trois tableaux sont-ils reliés les uns aux autres? Une suggestion en ce moment, si vous avez besoin de "synchroniser" les tables, les chances sont que la table à synchroniser devrait vraiment être une vue. – stakx

+2

Mieux vaut utiliser la vue; Si la vitesse est une préoccupation, vous pouvez même utiliser matérialisée. Les déclencheurs peuvent devenir difficiles et enclins à l'impasse. – Arvo

Répondre

0

La table du document doit contenir le statut (non approuvé) car vous devrez peut-être filtrer le document en fonction de l'état du document à l'avenir, mais votre besoin se limite à status = "approved". Dans votre cas, l'historique des changements d'état devrait être maintenu dans une autre table qui est workflow mais je suggérerais que `document_status_tracking 'ou simplement' document_tracking 'serait un meilleur nom pour la table.