Verläufe aufzeichnen

Im Rahmen der Recherche für die Versionierung, kam auch noch ein anderer Anwendungsfall auf: Und zwar das Speichern eines Statusverlaufs zusätzlich zu einem Datensatz. Also, wenn ein Datensatz verschiedene Status durchläuft und gespeichert werden soll, wann welcher Status durchlaufen wurde.

Wie die beiden Tabellen aussehen sollen, seht ihr hier. Ich denke, dass ist an sich auch verständlich. Wichtig ist meiner Meinung nach die Spalte active, die die momentan aktiven Status kennzeichnet. Dieses ist wichtig, da es sonst nur mit einem Subselect möglich ist, den momentanen Status zu einer Liste von baseData zu bestimmen. Ist leider eine MySQL-Einschränkung mit Order und Group by in einem Statement (http://www.cafewebmaster.com/mysql-order-sort-group). Also active mit in die Join-Bedingung (ON baseData.id = status.baseData_id AND status.active = 1). Zusätzlich würde sich auch noch ein Before-Insert-Trigger auf die status Tabelle anbieten, der alle anderen Status der baseData auf 0 setzt.

Auch hier freu ich mich wieder über Anregungen und hoffe, es hat jemandem geholfen.

Therothisch lässt sich das natürlich auch allgemeingültiger (analog dem Proxy) definieren, indem man anstatt der baseData_id Tabelle zwei Spalten (Table und Id) einführt und so den Status für Datensätze mehrere Tabellen aufzeichnen kann.

Danke an Andreas für den Hinweis, dass es natürlich doch ohne active geht. Im Zweifel die Anfragen dann einfach und MAX(created) benutzen, um den aktuellen Status zu bekommen. Funktioniert mit Group By und Sort By zusammen einwandfrei. Noch schöner also. Und ohne Trigger und so.

GD Star Rating
loading...

Kommentar verfassen