Wir stellen in 2 Niederlassungen Rechnungen aus.
In der ersten Niederlassung soll beim Einfügen/Löschen/Ändern einer Rechnungsposition in einer Lager-Tabelle der Bestand des Artikels aktualisiert werden.
In der zweiten Niederlassung ist dies nicht nötig. D.h. die Lager-Tabelle wird dort nicht benutzt.
Dazu fallen mir zwei Lösungen ein:
a) Die Rechnungspositionen-Tabelle hat mehrere Trigger (AfterInsert, AfterDelete, AfterUpdate) die, die Lager-Tabell aktualsieren. In jedem Trigger wird geprüft, ob die Lager Lager-Tabelle geändert werden soll oder nicht. Dazu wird ein Flag in einer Einstellungs-Tabelle geprüft. Das ist in der einen Niederlassung gesetzt und in der anderen Niederlassung nicht. Nachteil: In der Niederlassung, wo die Lager-Tabelle nicht genutzt werden soll, werden die Trigger ständig aufgerufen und das Flag per select abgefragt. Das bremst die
DB ja aus, was nicht sein muss.
b) Statt der Trigger verwenden ich die OnAfterInsert, OnAfterDelete, OnAfterPost Events der Datenbank-Komponenten direkt im Programm-Code. Vorteil: Ich muss das Flag nicht ständig "aufwändig" mit einem select abfragen sonder kann es die ganze Programmlaufzeit in einem Boolean vorhalten. Auch können hier weitere Dinge berücksitigt werden, auf die es in den Triggern keinen Zugriff gibt (z.B. eingeloggte User). Nachteil: Wenn diese Events nicht ausgelöst werden (weil es z.B. Updates per
SQL, an den Komponenten vorbei, gibt) wird die Lager-Tabelle nicht aktualisiert. Darauf muss man dann immer achten.
Welche Lösung würdet ihr nehmen und warum? Gibt es evtl. noch eine weitere Möglichkeit? Habe ich weitere Vor-/Nachteile der beiden Lösungen übersehen?