Ich bin gerade dabei für Knowledgeroot2 die Datenbank Dumps zu erstellen. Für PostgreSQL hab ich dies nun schon fast fertig. Über MySQL musste ich mich gestern mal wieder richtig ärgern.
In Knowledgeroot2 soll diesmal automatisch für Inhalte, Seiten und Dateien eine Historie mit geführt werden. Dies hab ich in PostgreSQL mittels Trigger und Stored Procedures gelöst. Es funktioniert und kann sicherlich noch optimiert werden. Nun wollte ich das gleiche in MySQL machen und musste feststellen, dass dies nun überhaupt nicht so geht wie ich dachte.
Für PostgreSQL habe ich folgendes Dump: https://github.com/lordlamer/knowledgeroot/blob/master/data/dumps/postgresql.sql
Anhand des Dumps kann man auch meine Idee sehen. Wenn ich einen Datensatz in die content/page/file Tabelle einfüge oder ändere wird mittels eines Triggers eine Funktion aufgerufen die dann auch einen Eintrag in die entsprechende Historie-Tabelle tätigt.
Soweit sogut. Jetzt kommt MySQL mit seinen Fesseln. Es sollte ja schon bekannt sein, dass ich in MySQL nur einen Trigger je event an eine Tabelle hängen kann. Dies ist für mich zum Glück kein Problem. Aber ein Problem ist, dass ich nicht in einem Rutsch einen Trigger für mehrere Events anlegen kann. Nein, hier muss ich für jedes Event dann einen Trigger anlegen. OK. Etwas mehr schreibarbeit. Damit kann man auch noch leben wenn man dann NEW und OLD an eine Funktion in MySQL durchreichen könnte. Aber falsch gedacht. Auch dies geht nicht…
Willkommen und schon müssen wir Code duplizieren.
Für mich zeigt dieser Umstand leider nur, dass man MySQL leider nicht in Umgebungen einsetzen kann und sollte wo viel mit Triggern und Stored Procedures gearbeitet wird.
Klar, es geht irgendwie auch in MySQL aber Spass macht das nicht! Hier besteht wirklich noch Nachholbedarf!
PS: Hier noch mein aktuelles Dump dann in MySQL: https://github.com/lordlamer/knowledgeroot/blob/master/data/dumps/mysql.sql – Verbesserungen nehme ich gerne entgegen