Wir haben ein graphische Darstellung des Datenbankmodells mit Hilfe der kostenlosen Software MySQL-Workbench (Download) erstellt. Die aktuelle Projektdatei mit unserem Datenmodell für MySQL-Workbench kann unter folgendem Link über Subversion geladen werden:
https://admidio.svn.sourceforge.net/svnroot/admidio/trunk/documentation/admidio.mwb
Zu folgenden Versionen kannst du das Datenmodell hier herunterladen:
Änderungen oder Erweiterungen zu dem Datenmodell müssen zuerst über die MySQL-Workbench in der admidio.mwb gepflegt werden! Erst danach sollen die Änderungen in die Installationsscripte von Admidio eingebaut und im Sourcecode verwendet werden.
Änderungen in der Datenbankstruktur müssen an zwei Stellen eingebaut werden. Einmal im Installationsscript, welches die Datenbank bei Neuinstallationen einrichtet und zum anderen im Updatescript, welches bestehende Datenbanken mit den Neuerungen anpasst.
Das Installationsscript greift im Ordern adm_program/installation/db_scripts auf die Datei db.sql zu. Diese beinhaltet die Struktur der kompletten Admidio-Datenbank und ist identisch mit dem Datenmodell aus der MySQL-Workbench. Hier müssen die Änderungen aus dem Datenmodell 1 zu 1 umgesetzt werden.
Für das Update gibt es bis einschließlich Version 2.x 2 Dateien im Ordner adm_program/installation/db_scripts zu. Es gibt eine SQL-Datei upd_2_4_0_db.sql in der nur SQL-Statements mit Semikolon getrennt eingetragen werden können. Die Datei muss ggf. mit der aktuellen Versionsnummer, in der die Änderungen eingebaut werden sollen, noch erstellt werden. Zusätzlich gibt es noch eine PHP-Datei upd_2_4_0_conv.php, welche z.B. Datenkonvertierungen ermöglichen soll oder weitere Logik beinhalten kann. Auch diese muss ggf. mit der aktuellen Versionsnummer noch erstellt werden.
Ab Version 3.0 gibt es nur nocht eine Dateien im Ordner adm_program/installation/db_scripts. Die beiden Dateien wurden durch eine flexiblere xml Datei ersetzt. Hierzu gibt es im nächsten Kapitel eine ausführliche Beschreibung.
Die XML-Datei wird auch in dem Ordner adm_program/installation/db_scripts abgelegt und folgt dem Namenschema update_Hauptversion_Unterversion.xml. Für Version 3.0.0 wäre das update_3_0.xml. Der XML-Aufbau sieht dann folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?> <update> <step id="10">1. SQL-Statement</step> <step id="20">2. SQL-Statement</step> <step id="30">usw...</step> <step>stop</step> </update>
Hieran kann man schon erkennen, wie das Update funktioniert. Es werden mit aufsteigender ID einfach jeweils ein Befehl in einen step geschrieben.
<step id="40">UPDATE %PREFIX%_organizations SET org_homepage = 'http://www.example.com' WHERE org_homepage IS NULL</step>
Bei Tabellen muss immer hier der Platzhalter %PREFIX% genutzt werden, damit die installationsspezifischen Tabellenpräfixe berücksichtigt werden. Wichtig ist auch der letzte step mit dem Inhalt stop. Hieran erkennt das System das das gewünschte Ende erreicht wurde und das Script nicht irgendwo abgebrochen ist.
Möchte man datenbankabhängige SQL-Befehle erstellen, welche nur auf einer bestimmten Datenbank ausgeführt werden sollen, so muss noch das Attribut database mit dem definierten Namen der Datenbank als Wert hinterlegt werden.
<step id="50" database="mysql">ALTER TABLE %PREFIX%_organizations ADD COLUMN org_example varchar(255)</step>
Zusätzlich zu den SQL-Befehlen ist es auch möglich PHP-Code ausführen zu lassen. Dies geschieht durch den Aufruf einer Methode aus der Klasse ComponentUpdate. Du kannst also dieser Klasse eine neue Methode hinzufügen, die einen Codeschnipsel enthält, der z.B. eine Schleife über alle Organisationen macht und dann ein SQL-Statement für jede Organisation ausführt. Aufrufen kann man diese Methode dann indem man in der XML-Datei im step diese Methode wie eine statische Methode aufruft
<step id="550">ComponentUpdate::updateStepDeleteDateRoles</step>