Das Auge isst mit

Datenbankdesign mit MySQL Workbench
Kommentare

MySQL produziert neben seinem Datenbankserver eine ganze Reihe weiterer Werkzeuge, angefangen von Datenbankschnittstellen bis hin zu graphischen Werkzeugen. In diesem Artikel soll mit MySQL Workbench eines dieser Tools zum visuellen Entwurf von Datenbankschemas vorgestellt werden.

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].
Abb. 1: Visual Schemadesign
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
Aber auch Datenbankadministratoren können von der Workbench profitieren. Für sie stehen eher andere Aspekte im Vordergrund, wie z.B. geskriptete Schematransformationen oder (in einer späteren Ausbaustufe) auch erweiterte Migrationen zu MySQL. Nicht zuletzt ist auch die Dokumentationsfunktion für DBAs interessant und nützlich.
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.
Abb. 2: Die Struktur der Workbench
Im Kern besteht die Workbench aus den beiden Bibliotheken Generic Runtime (GRT) Environment und Generic Canvas (GC) sowie der Nutzerschnittstelle; also die klassische Umsetzung des Model-View-Controller Patterns. Der Generic Canvas ist hierbei der visuelle Teil und basiert auf dem OpenGL API, das auf nahezu allen heute verbreiteten Systemen verfügbar ist (ausgenommen portable Geräte) und der Workbench die nötigen „Muskeln“ für ihre (visuelle) Arbeit bereitstellt, da sie die volle Hardwarebeschleunigung der Grafikkarte ausnutzen kann. Deshalb sollte man für die Workbench eine einigermaßen aktuelle Grafikkarte besitzen. Die Implementierung der Bibliothek wurde bewusst neutral und eigenständig gehalten, sodass der Generic Canvas auch außerhalb der Workbench eingesetzt werden kann. Tatsächlich arbeitet das MySQL-GUI-Team schon an einer weiteren (nicht datenbankorientierten) Anwendung, die Gebrauch vom Generic Canvas macht und bald auf der neuen MySQL-Forge-Webseite [3] veröffentlicht wird. Der Canvas beherrscht die Darstellung von verschachtelten Elementen, die über einen speziellen XML-Dialekt frei bestimmbar sind. Dabei definiert man eine Reihe von Templates in XML, die bei der Erstellung der visuellen Objekte (Figures) über einen Namen zur Konstruktion herangezogen werden. Mit solchen Definitionen kann man unter anderem festlegen, wie Kindelemente (Figure Elements) in einem Containerelement angeordnet werden sollen (z.B. Zeile, Spalte), welcher Mausevent eine bestimmte Aktion triggern soll (z.B. dragging und expand/collapse), Caption-Eigenschaften von Figure Elements (z.B. Bidi Modus und Alignment) und vieles mehr. Auch auf niederer Ebene setzt sich diese flexible Definitionsstruktur fort. Jedes Figure-Element kann optional einen Stil haben (ähnlich dem CSS), der im Detail beschreibt, wie das Element auszusehen hat (Grafikprimitiven, wie Linien, Kreise usw., Transparenz, Farbe, Textur und anderes). Das dabei verwendete XML-Format ist eine Untermenge von SVG [7]. Man kann also seine Stile mit einem SVG-Editor erstellen und dann für die Verwendung in der Workbench exportieren, was die Erstellung auch komplexerer Elemente ermöglicht. Komplettiert wird diese Definitionsstruktur durch zusätzliche Angaben für jedes Figure, die eine Gruppierung in Klassen erlaubt, die wiederum verschiedene Darstellungsformen des gleichen Objekts ermöglichen, sowie einem Attribut, das es erlaubt, die Existenz einzelner Figure Elements und die Wirksamkeit individueller Aktionen sowie jedes Triggers für jede implementierte Plattform zu spezifizieren. So kann man z.B. einen Aktionstrigger auf Windows mittels ALT+RECHTE MAUSTASTE festlegen, auf Mac OS X jedoch APFELTASTE+MAUSKLICK.
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).
Abb. 3: Das Hauptfenster der MySQL Workbench
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.
Abb. 4: Reverse Engineering eines Schemas mit der Workbench
Ansichten
Am oberen Rand des Canvas‘ befindet sich ein Tabulator mit der Bezeichnung MAIN VIEW. Dies gibt schon einen Hinweis darauf, dass man mehr als einen View (eine Ansicht) für das Modell erstellen kann. Hierbei handelt es sich aber immer um eine Ansicht der gleichen Daten und nicht etwa um ein weiteres Modell. Gerade bei komplexen Modellen ist es ratsam, nicht alle Objekte auf einer View zu platzieren. Stattdessen gruppiert man besser die Elemente semantisch und erstellt für jede Gruppe eine eigene View. Natürlich dürfen Elemente beliebig oft auf beliebig vielen Views erscheinen. Der Overview-Modus dient dazu, eine „eagle’s eye“-Ansicht über das Modell zu erlangen. Mittels SHIFT+LEERTASTE schaltet man zwischen Overview und normale Ansicht hin und her. Alternativ kann man auch den OVERVIEW-Button auf der Toolbar verwenden. Im Overview-Modus wird neben den Elementen auch noch ein Marker eingeblendet, dessen Größe direkt proportional zur Größe der normalen Ansicht ist. Somit sieht man genau, welchen Ausschnitt aus dem gesamten Modell man gerade in dieser Ansicht bearbeitet. Der Marker lässt sich mittels LEERTASTE+DRAGGING an eine neue Stelle verschieben. Lässt man ihn los, dann kehrt die Workbench in die normale Ansicht zurück, nun aber an der zuvor ausgewählten Stelle. Um ein Element aus der Datensammlung zu platzieren, öffnet man den Object Tree am rechten Rand und zieht einfach von dort das Element auf den Canvas. Die Workbench erstellt automatisch Verbindungslinien, wenn Objekte platziert werden, die über einen Fremdschlüssel verbunden sind. Natürlich kann man auch neue Objekte hinzufügen, wie etwa eine View oder Stored Procedure. Das Editieren eines Elements erreicht man durch einen Doppelklick auf dessen Header oder man benutzt das EDIT-Symbol. Zum Löschen selektiert man das Element und betätigt CONTROL+ENTFERNEN.
Fazit
Mit der MySQL Workbench versucht MySQL AB, ein anspruchsvolles Werkzeug für Datenbankapplikationsentwickler, Administratoren, Dokumentationsteams usw. zu schaffen. Noch immer mit einigen Fehlern und rauen Kanten behaftet (schließlich ist die Anwendung immer noch im Betastadium), bietet das Tool einen bemerkenswerten Umfang an Möglichkeiten für die Erstellung und Synchronisation von Datenbanken und Modellen davon. Die MySQL Workbench bietet durch spezielle Features wie z.B. Hardwarebeschleunigung der Grafikausgabe auf allen unterstützten Plattformen weitgehende Skripting-Fähigkeiten, umfangreiche Erweiterungsmöglichkeiten, leichte Bedienbarkeit und die Verfügbarkeit unter der General Public License.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -