Best Practices: Speichern einer workflow-Zustand eines Elements in einer Datenbank?

Ich habe eine Frage zu best practices in Bezug auf, wie sollte man Vorgehen speichern von komplexen workflow-Staaten für die Bearbeitung der Aufgaben in einer Datenbank. Ich habe online-Suche keinen Erfolg, so dass ich dachte, ich würde bitten die community, was Sie dachte, war am besten.

Diese Frage kommt aus der gleichen "BoxItem" ein Beispiel gab ich in einer vorherigen Frage. Diese "BoxItem" verfolgt wird in meinem system als verschiedene Aufgaben werden auf Sie. Die Aufgabe kann über mehrere Tage und mit der menschlichen Interaktion, also dem Stand der BoxItem muss beibehalten werden. Wer hat die Aufgabe (falls zutreffend), und wenn die Aufgabe erledigt wurde, muss auch verfolgt werden.

Zuerst, ich näherte mich dies, indem Sie drei Felder der "BoxItems" Tabelle für jedes Mensch-interaktive Aufgabe, die getan werden musste:

IstTaskNameKomplette

DatumTaskNameKomplette

BenutzerTaskNameKomplette

Diese funktionierte, wenn der workflow war einfach... aber jetzt, dass es hat sich zu einem komplexen Prozess (> 10 möglichen menschlichen Interaktionen, die in der Strömung... über die Hälfte davon sind optional, und kann oder kann nicht getan werden für die BoxItem, die führten mich Anfang hinzufügen "TunTaskName" Felder als auch für diejenigen, die optionalen Aufgaben), habe ich gefunden, dass das, was haben sollte gewesen, eine einfache Tabelle hat nun 40 oder so in den Bereich widmet sich ganz der Beibehaltung dieses Status-Informationen.

Frage ich mich, ob es nicht einen besseren Weg, es zu tun... aber ich bin ratlos.

Mein Erster Gedanke war es, einen generischen "BoxItemTasks" - Tabelle, die definiert die Aufgaben, die getan werden kann auf einem bestimmten Feld, aber ich würde noch brauchen, speichern Sie die Datums-und Benutzer-Informationen individuell, so dass es nicht wirklich helfen.

Mein zweiter Gedanke war, dass es vielleicht nicht egal, und ich sollte nicht sorgen, wenn diese Tabelle hat 40 oder mehr Felder gewidmet Zustand behalten... und vielleicht bin ich auch nur paranoid. Aber es fühlt sich wie eine Menge von Informationen zu behalten.

Na ja, ich bin an einem Verlust so weit wie das, was eine Dritte option sein könnte, oder wenn eine der beiden oben genannten Optionen ist eigentlich vernünftig. Ich kann sehen, dass dieser workflow möglicherweise noch komplexer, in die Zukunft, und für jede neue Aufgabe, die ich werde brauchen, um hinzuzufügen, 3-4 Felder nur zur Unterstützung der Verfolgung von es... es fühlt sich an wie es ist außer Kontrolle geraten.

Was würden Sie in dieser situation tun?

Sollte ich beachten Sie, dass dies die Wartung eines bestehenden Systems, eine, die gebaut wurde, ohne ein ORM, also ich kann nicht einfach lassen Sie es bis zu den ORM zu kümmern.

EDIT:

Kev, sprechen Sie über etwas wie das zu tun:

BoxItems

(PK) BoxItemID

(Andere irrelevante Sachen)

BoxItemActions

(PK) BoxItemID

(PK) BoxItemTaskID

IsCompleted

DateCompleted

UserCompleted

BoxItemTasks

(PK) TaskType

Beschreibung (wenn auch notwendig)

Hmm..., das würde funktionieren... es würde darstellen eine Notwendigkeit, Sie zu ändern, wie ich derzeit-Ansatz tut SQL-Abfragen, um zu sehen, welche Elemente in welchem Staat, aber auf lange Sicht so etwas wie dieses sieht wie es besser funktionieren würde (ohne dass eine grundlegende design-änderung, wie die Serialisierung Idee darstellt... obwohl, wenn ich die Zeit hätte, ich würde es gerne spielen, wie ich denke.).

So ist es das, was Sie waren, zu erwähnen, Kin, oder bin ich aus?

EDIT: Ah, ich sehe deine Idee mit der "Letzten Aktion" ermitteln Sie den aktuellen Status... ich mag es! Ich denke, dass könnte für mich arbeiten... ich habe vielleicht ändern Sie es ein wenig (weil irgendwann Aufgaben gleichzeitig passieren), aber die Idee scheint eine gute zu sein!

EDIT FINAL: Also in Summe, wenn sich jemand anderes suchen, dieses in der Zukunft mit der gleichen Frage... es klingt wie die Serialisierungs-Ansatz wäre nützlich, wenn Ihr system die information pre-loaded in einer Schnittstelle, wo es queryable (also nicht direkt dem Aufruf der Datenbank selbst, als ad-hoc-system an dem ich arbeite), aber wenn Sie das nicht haben, die zusätzlichen Tabellen, die Idee scheint, wie es gut funktionieren sollte! Danke Euch allen für Eure Antworten!

InformationsquelleAutor EdgarVerona | 2008-09-22
Schreibe einen Kommentar