Fragt man einen eingefleischten Datenbankadministrator heute nach seinen bevorzugten Arbeitshilfsmitteln, wird man meist wohl die Kommandozeile genannt bekommen. Obwohl diese einen direkten Zugang zum Server ermöglicht, lässt sie sich nur sehr schwer für Entwurf, Wartung und Dokumentation von Datenbankschemas verwenden. Für den privaten Anwender, der eine handvoll Tabellen auf seiner Homepage zu verwalten hat, mag eine solche Planung vielleicht noch Overkill sein, der berufliche Anwender hingegen benötigt ein Entwurfstool, das es ihm erlaubt, systematisch eine Schemastruktur aufzubauen und diese auch zu dokumentieren. Für diese Nutzer wurde die MySQL Workbench konzipiert [1]. Jeder Datenbankexperte wird bestätigen, dass Datenbankdesign eine Kunst ist und auf den direkten Zusammenhang von Struktur und Performance eines Schemas verweisen. Aber selbst wenn die Performance nicht das eigentliche Problem ist, so kann man doch sehr leicht den Überblick in komplexeren Strukturen verlieren.
Wurzelgeflechte
Die MySQL Workbench (oder kurz: Workbench) reiht sich nahtlos in die Reihe der existierenden Schemadesigntools ein, wie z.B. PowerDesigner, ERwin, Rational Data Architect, Embarcadero DT/Studio, Oracle Designer, ist im Vergleich zu diesen aber frei erhältlich. Sie entstammt von der Idee und dem Grundaufbau her einem sehr ähnlichen Produkt: dem DBDesigner4 von Mike Zinner [2], der auch beim Entwurf und der Implementierung der Workbench federführend mitgewirkt hat. Beim Vergleich der beiden Programme zeigt sich, dass einige wesentliche Elemente in die Workbench übernommen wurden, jedoch auch eine ganze Reihe neuer Features hinzugekommen sind.Fundament
Die Aufgaben der Workbench teilen sich in zwei Bereiche. Zum einen ist sie ein Designwerkzeug und arbeitet mit dem EER-(Extended Entity Relationship)Modell zur Erstellung kleiner und großer Modelle. In dieser Funktion erlaubt sie den Import existierender Schemas (Reverse Engineering) und beherrscht die Zweiwegesynchronisation, also Update eines Schemas nach Änderung des Modells und umgekehrt. Eventuell auftretende Konflikte müssen dabei aber manuell gelöst werden, indem man einer der beiden Seiten Vorrang einräumt. Der zweite Aufgabenaspekt ist die Dokumentation. Auch hier spielt das Reverse Engineering eine Rolle. Des Weiteren kann man Fremdschlüsselbeziehungen dokumentieren und Teile des Modells in andere Dokumente übernehmen. Jedoch ist die Workbench weder ein universelles ER-Modelling-Tool (z.B. OmniGraffle) noch ein UML Designer (z.B. Umbrello). Ebenso wenig ist die Applikation geeignet, um Datenabfragen oder -manipulationen durchzuführen. Für diese Aufgaben wurden Tools wie der MySQL Administrator [5] und der MySQL Query Browser geschaffen [6].
Zielgruppe
Der primäre Nutzerkreis der MySQL Workbench sind die Datenbankapplikationsentwickler. Ihnen kann die Workbench bei folgenden Aufgaben helfen:- Initialer Applikationsentwurf/Planungsphase
- Datenbankprogrammierung
- Bessere Dokumentation
- Forward Engineering (Export von Create SQL Skripts)
- Reverse Engineering vorhandener Applikationen/Schemas
- Wartung (Synchronisation zwischen Schema und Modell)
- Skripte und Kommandozeilenzugriff zum Schema
- Plug-ins für Erweiterungen
Innereien
Abbildung 2 veranschaulicht den prinzipiellen Aufbau der Workbench. Das unter der GPL-Open-Source-Lizenz stehende Produkt setzt für seine Arbeit gleichfalls auf vorhandenen Open-Source-Bibliotheken auf, wie zum Beispiel libxml, glib, freetype, zlib u.a. Verfügbar ist das Tool auf den Plattformen Windows, Linux und Mac OS X. Dazu wurden alle gemeinsamen Bibliotheksfunktionen in C- und C++-Module gepackt, die auf jeder unterstützten Plattform durch eine native Oberfläche (UI) komplettiert werden. Zum Einsatz kommen auf Mac OS X Objective C mit Cocoa, auf Linux C++ (gcc) mit GTKmm und auf Windows Borland Delphi mit dessen VCL (Visual Component Library). Diese Art der Implementierung hat den Vorteil, dass für die Applikationen alle auf der jeweiligen Plattform verfügbaren Features verwenden können und sich die UI nicht wie ein Fremdkörper anfühlt, erhöht aber natürlich auch den Entwicklungsaufwand. Durch weitgehende Zentralisierung aller Funktionen in portable Bibliotheken konnte jedoch die Entwicklungszeit bis zur ersten Beta auf weniger als ein Mannjahr begrenzt werden.
Ablage
Die Datenhaltung der Workbench erfolgt ausschließlich in der Generic Runtime (GRT) Environment. Diese Bibliothek besteht im Wesentlichen aus einem Objektbaum, der hierarchisch verschachtelt die Daten enthält und einer großen Zahl von Funktionen, die diesen Baum bearbeiten. Die GRT findet schon im MySQL Migration Toolkit Einsatz [4] und bietet eine gute Flexibilität hinsichtlich erlaubter Datentypen, Manipulationsmöglichkeiten und Erweiterbarkeit über externe Module. Außerdem beinhaltet die GRT eine Schnittstelle für Scripting (GRT Shell). Dieses Interface erlaubt die Verwendung von Lua oder Python, um damit die gesamte Anwendung in all ihren Aspekten (bis hin zum Userinterface) zu steuern. Plug-in-Module erlauben die Addition von zusätzlicher Funktionalität, z.B. Erzwingung von firmenspezifischen Namenskonventionen. Die GRT benutzt ebenfalls XML und speichert alle Daten in diesem Format. So sind auch die Workbench-Modelle nichts anderes als spezielle XML-Dateien. Das erleichtert deren Verarbeitung, sowohl in der Applikation selbst als auch in eventuellen Third-Party-Tools.Workflow
Beim ersten Start der Workbench fällt ihre Schlichtheit auf. Das Hauptfenster wird von der Zeichenfläche (dem Generic Canvas) dominiert, die nach dem Start nur das (abschaltbare) Hintergrundgitter zeigt. Man kann nun entweder ein vorhandenes Modell laden oder sofort mit dem Entwurf eines neuen beginnen. Alternativ besteht die Möglichkeit, ein vorhandenes Schema zu untersuchen und automatisch ein initiales Modell zu erstellen (Reverse Engineering).
Rückwärtsgang
Da das Reverse Engineering eines Schemas das schnellste Ergebnis verspricht, soll dieses als erstes vorgestellt werden. Dazu starten wir den Reverse-Engineering-Assistenten über den Menüpunkt DATABASE | REVERSE ENGINEERING. Nutzer des MySQL Migration Toolkits werden sich in diesem Wizard sofort zu Hause fühlen, entspricht er doch in weiten Teilen genau jenem im Migration Toolkit. Sogar die verschiedenen Datenbanksysteme (z.B. MS Access, Oracle usw.) erscheinen in der Auswahl. Allerdings wird derzeit nur MySQL unterstützt, die anderen Systeme sollen später noch integriert werden. Nach Auswahl einer Verbindung und Klicken auf [NEXT>] verbindet sich der Assistent zum Server und holt eine Liste von Schemas, aus der man auf der nächsten Seite einen oder mehrere Einträge auswählen kann. Hier könnte man das Referenzschema "Sakila" wählen, das MySQL AB speziell für solche Zwecke entwickelt hat (und immer noch entwickelt). Download und andere Informationen sind unter [9] erhältlich.Evolution
Nach Auswahl des Schemas, Reverse Engineering und Platzierung der Objekte erhält man zunächst ein ziemliches Durcheinander, da nicht nur alle Objekte (Tabellen, Views, Stored Procedures) angelegt, sondern auch der Fremdschlüsselbeziehungen untereinander dargestellt werden. Jetzt ist also erst einmal Kernerarbeit angesagt. Das bedeutet: Objekte so anordnen, dass man auch etwas erkennen kann. Wer sich ein wenig in Adobe Photoshop auskennt, kann jetzt von diesem Wissen profitieren, da einige sehr nützliche Tastenkombinationen und -funktionen von dort in die Workbench übernommen wurden. Dazu gehört z.B. die Möglichkeit, mittels Leertaste und Dragging (linke Maustaste) den Canvas an jede beliebige Stelle zu positionieren. Weitere typische Aktionen sind CONTROL+LEERTASTE+LINKSKLICK für Hineinzoomen, ALT+LEERTASTE+LINKSKLICK für Herauszoomen (auch über CONTROL+NUMPAD+ bzw. NUMPAD- erreichbar), das Mausrad für vertikales Scrolling, in Verbindung mit CONTROL oder ALT auch Zoomänderungen u.v.m. Die Positionierung einzelner Elemente erfolgt gewöhnlich durch Drag and Drop des Headers. Ein Klick selektiert das Element, mit SHIFT und CONTROL kann man die Selektion verändern. Die so selektierten Elemente kann man nun mithilfe der Alignmentpalette (sie befindet sich am oberen Rand) aneinander ausrichten. Zieht man ein nicht selektiertes Element, dann wird auch nur dieses bewegt, unabhängig davon, ob es eine Selektion gibt oder nicht. Zieht man hingegen ein selektiertes Element, dann folgen auch alle anderen in der Selektion enthaltenen Elemente. Platziert man jetzt einen Layer auf dem Canvas, dann gruppiert dieser automatisch all jene Elemente, die vollständig innerhalb der Layerbegrenzung sind (ausgenommen Relationships). Neben der Möglichkeit, das jeweilige Tool über die am linken Rand befindliche Toolbar zu aktivieren, kann man dies auch durch Drücken der Taste mit dem jeweiligen Anfangsbuchstaben erreichen. Drückt man die "L"-Taste wird das Layertool zum aktiven Werkzeug. Mit der Maus zieht man danach ein Rechteck auf, das daraufhin die Größe des anzulegenden Layers bestimmt. Im Layersbaum in der rechten unteren Ecke sieht man jetzt nicht nur die einzelnen Elemente, sondern zusätzlich den neuen Layer, der eventuell automatisch gruppierte Untereinträge enthält.




