Ich entwickle eine Art von Webshop in Symfony3/Doctrine. Um die Dinge zu vereinfachen, lassen Sie uns sagen, ich habe eine Tabelle Repairs
und eine Parts
. Teile haben einen Namen und einen Preis, und eine Reparatur kann viele Teile verwenden, sowie verschiedene Teile können in verschiedenen Reparaturen (Viele-zu-viele) verwendet werden. Der Preis einer Reparatur ist die Summe der Preise der Teile und einiger anderer Faktoren.Doktrin: Tracking-Verlauf von sich langsam ändernden Dimensionen
langsam veränderliche Dimensionen
Nun sollte es möglich sein, den Preis von einem Part
, zu ändern und dies sollte den Preis der Zukunft Repairs
ändern. Alle in der Datenbank vorhandenen Repairs
sollten jedoch nicht geändert werden, da sie für die Buchhaltung, Fakturierung und dergleichen verwendet werden.
"Soft aktualisierbar"
Löschen eines Part
ist leicht mit SoftDeleteable gelöst. Dies hält die Beziehungen zwischen Parts
und Repairs
intakt. Ähnliches sollte beim Aktualisieren von Entitäten passieren. Nur wenn sich etwas Wichtiges (wie der Preis) ändert, sollte die Entität in der Datenbank aktualisiert werden. Es scheint jedoch keinen fertigen Code zu geben.
Ich habe folgendes versucht:
- einfach das alte Entity zu löschen und eine Kopie auf jedes Update zu speichern, die Code-intensiv, ineffizient und läßt viele Junk in der Datenbank. Ich
- EntityAudit verwenden, aber das doesn auch
- Versionable, aber das funktioniert nicht auf many-to-many-Einheiten
- Loggable, aber die Änderungen in einer separaten Log-Tabelle schreibt, nicht in der Tabelle tu was ich will und kann nicht auf viele zu manies verwendet werden.
Nähern Sie sich dem Problem anders?
Ich habe asked für die Hilfe bei meinen technischen Lösungen before, aber da ich, dass das Problem glauben, ein allgemeines ist, ich bin zu denken beginnen, dass der Mangel an einfachen, fertigen Lösungen bedeutet, dass ich bin das Problem falsch angehen. Vielleicht sollte ich einfach eine statische Tabelle für die Buchhaltung mit statischen Werten in ihnen gespeichert halten (aber das würde nicht erlauben, den Namen einer bestimmten Reparatur zu ändern, während der Preis beibehalten wird)? Oder?