Datenbankschema aus XSD generieren

Der Softwareentwickler Asmir Mustafic hat mit xsd2php ein Projekt geschaffen, mit dem sich bequem aus der Schema-Beschreibung von XML-Daten ein PHP-Programmgerüst erstellen lässt.

Will man große Datenmengen für die weitere Verarbeitung und für Anwendungsfälle wie die Visualisierung, Durchschaubarkeit oder ähnliches in einer Datenbank zwischenspeichern, sind je nach Komplexität der Daten noch jede Menge händische Schritte notwendig.

  1. das Schema der Datenbank muss erstellt werden
  2. die Datenbanktabellen und Attribute müssen angelegt werden
  3. die Programm-Objekte müssen in die Datenbank gespeichert und daraus gelesen werden können (=klassische Aufgabe eines ORMs)

xsd2Php stellt uns schon fast alles nötige bereit um ein Datenbankschema aus dem Generierten Code beschreiben zu können.

Informationen aus Annotationen auswerten

Sowohl die Eigenschaften einzelner Attribute, als auch die Verbindungen der Daten untereinander, werden aus der XSD-Beschreibung übernommen:

/**

* EAN (European Articel Number) 13 digits

* @property string $ean

*/

 

Ein Beispiel für eine EAN zeigt, dass wir einen Zeichenkette bestehend aus 13 Ziffern zu erwarten haben. Wir können daraus in der Datenbank also entweder ein Integerwert, oder – um Informationen über eventuell führende Nullen nicht zu verlieren – eine Zeichenkette mit maximal 13 Zeichen, bei SQL also ein VARCHAR(13) oder BIGINT definieren.

Ebenso lässt sich aus der Programmstruktur auch die Datenstruktur ermitteln:

/**

* Sets a new Element

*

* @param \Example\ElementType[] $element

* @return self

*/

getElement(){return $this->element}

Wir wissen in diesem Beispiel, dass es sich bei dem Element um die Aufstellung anderer Objekte vom Typ ElementType handelt. In einer relationalen Datenbank ist das eine klassische Aufgabe für eine Verknüpfungstabelle.

Ähnlich wie die Annotationen des beliebten Doctrine-ORMs haben wir damit die Möglichkeit das Datenbankschema eindeutig zu definieren. Je genauer die Informationen aus der XSD-Datei sind, desto besser ist das Schema. Im Zweifel fallen wir auf TEXT-Felder zurück, die beliebige (serialisierte) Daten aufnehmen können. Je nach Bedarf lassen sich auch einfach BLOBs als Fallback definieren.

Da es sich bei Datenschnittstellen meistens um Daten aus einer wie auch immer ausgestalteten Geschäftslogik handelt, bietet es sich an, den programmatischen Zugriff Anhang der fachlichen Struktur dahinter zu orientieren. Die Stichworte dafür sind Domain-Driven Disign und das Entwurfsmuster von Repositories, worauf wir im Teil 2 näher eingehen werden.

Beispiel: Filmdatenbank verarbeiten

Für ein praktisches Beispiel haben wir das XML-Schema einer umfangreichen Medien-Datenbank vereinfacht und lassen daraus in einem kleinen Screencast das Datenbankschema anlegen:

In dem ersten Screencast wird gezeigt wie:

  1. mit Hilfe von xsd2php die PHP-Klassen erzeugt werden
  2. das Datenbankschema aus den erzeugten Klassen abgeleitet wird und
  3. eine MySQL-Datenbank damit bestückt wird.

Musik by Ian Sutherland (Attribution-ShareAlike 4.0 International (CC BY-SA 4.0))

Wer schon mal aus unseren Beispieldaten eine Datenbank erstellen lassen möchte kann schon mal einen Blick auf das Github-Archiv werfen.

Related Posts