Der Buchhalter: Trigger-Tricks

Beitrag lesen

Moin,

ich bastel an einer sport-bezogenen Datenbank-Anwendung mit PDO und Sqlite. Hierbei werden ganz normale (Fußball-)Ergebnisse zu einer nicht ganz üblichen Punkte-Wertung verarbeitet. In Anlehnung an Wettquoten erhält ein Favorit bei einem Sieg weniger Punkte, als der Außenseiter für einen Sieg in demselben Spiel erhalten hätte. Wie dies im einzelnen berechnet wird, sollte m. E. keine Rolle spielen.

Ich trage das Spiel-Resultat in eine Tabelle für Ergebnisse ein. An dieser Tabelle hängt ein Trigger, welcher die Punkte pro Spieler ausrechnet und in eine andere Tabelle für Punkte einträgt. In dieser zweiten Tabelle gibt es nicht einen Eintrag pro Spiel, sondern je einen Eintrag pro beteiligtem Spieler.

Und hier beginnt mein Problem. Denn die Tabelle, in der ich die Punkte eintrage, fließt auch gleichzeitig in die Berechnung dieser Punkte ein. Ich habe also eine Art Zirkelbezug. Der Trigger trägt die Punkte des ersten Spielers ein und in dem Moment, wo der Trigger den zweiten Spieler berechnet, ist die Berechnungsgrundlage bereits verändert.

Ich behelfe mir zurzeit mit einer zusätzlichen Tabelle, welche ich hier mal Journal nenne. Wenn ich ein Spiel-Ergebnis in die ganz normale Ergebnis-Tabelle eintrage, reagiert ein Trigger und schreibt alle zur weiteren Berechnung benötigten Daten in das Journal. An dem Journal hängt ein weiterer Trigger, welcher nun die Punkte pro Spieler (anhand der festgeschriebenen Daten im Journal) berechnet und in die entsprechenden Einträge in die Punkte-Tabelle vornimmt.

Dies funktioniert so weit gut und hat auch den Vorteil, dass ich jederzeit im Journal nachschauen kann, auf welcher Datengrundlage eine Berechnung stattgefunden hat. Dennoch frage ich mich, ob es einen direkteren Weg ohne Journal und mit nur einem Trigger gibt.

Gäbe es z. B. Variablen in einem Sqlite-Statement, könnte ich die Werte (innerhalb des Triggers) temporär speichern und bräuchte keine Hilfs-Tabelle. Ich hoffe mal, dass mein Problem trotz der Abstrahierung auch für Außenstehende verständlich ist. Ansonsten liefere ich gern weitere Details.

Welche Möglichkeiten habe ich sonst diese Problematik anzugehen? Böte eine andere DB-Struktur vielleicht Möglichkeiten, die ich nicht sehe? Oder kann man eventuell eine Transaction für meine Zwecke umbiegen?

Gruß der Buchhalter

akzeptierte Antworten