MySQL-Datenbank-Design optisch planen
Vor einigen Jahren führte ich eine Datenbank mit all den Büchern, die ich in unseren Büchergestellen zu Hause untergebracht habe. Die Inhalte habe ich damals im Internet veröffentlicht. Leider pflegte ich irgendwann diese Daten nicht mehr weiter und heute sind sie so veraltet, dass sie praktisch wertlos sind. Mindestens mit Büchern, die technischen Inhalt aufweisen oder sonst in das Linux-Umfeld passen, möchte ich gerne wieder eine Sammlung der Daten erstellen und diese zugänglich machen. Deswegen plante ich ein einfaches Datenbank-Design, damit ich diejenigen Daten mit den Relationen abbilden kann, die ich gerne aufzeigen und verbinden möchte. Natürlich will ich das gerne mit MySQL und PHP realisieren. Eine Alternative wäre für diese geringe Datenmenge SQLite.
Um solche Sachen zu entwickeln nutze ich in der ersten Phase gerne meinen Ubuntu-Server zu Hause, der von aussen nicht zu erreichen ist – mindestens bilde ich mir das ein. Dort habe ich per PHPMyAdmin die nötige Datenbank und die dazugehörigen Tabellen erstellt, die Rechte gerichtet und kontrolliert, ob alles in Ordnung ist.

Damit ist aber nur die halbe Arbeit – nebst dem Abfüllen der Daten – erledigt, denn die Relationen per SQL-Statement abzuholen, macht mir immer noch grosse Mühe. Ungefähr vor zwei Jahren habe ich hier beschrieben, wie ich diese Herausforderung unter Zuhilfenahme von Access aus dem Hause Microsoft und dem ODBC-Connector von MySQL löse. Dazu fahre ich ein virtuelles XP hoch und verbinde mich via ODBC-Connector unter Access mit dem MySQL-Server. Dort stehen dann grafische Elemente zur Verfügung, mit denen ich die Relationen zusammenklicken kann.

Wären da nur 1:n-Relationen zu lösen, brächte ich das noch halbwegs ohne diese Hilfe zustande. Aber bei meiner Herausforderung kann ja jedes Buch mehr als ein Autor haben. Jeder Autor könnte also theoretisch für jeden Titel geschrieben haben. Damit entsteht bei einer schlauen Normalisierung eine n:n-Verbindung zwischen den Tabellen Buch und Autor. Und eine n:n-Relation lässt sich ja bekanntlich nicht in einem Schritt auflösen, sondern muss über eine Zwischentabelle in zwei 1:n oder n:1-Relationen umgewandelt werden. Damit wird es für mein Gehirn schon etwas komplex. Und hier eilt mir in diesem Moment jene Lösung mit Access zu Hilfe. Dort klicke ich die Abfrage zusammen und exportiere dann die SQL-Anweisung.
Wahrscheinlich liesse sich das Ganze auch mit Mitteln aus der Linux-Welt lösen. OpenOffice Base und der ODBC-Connector stehen ja zur Verfügung; probiert habe ich es aber nicht.
Mich interessiert brennend, wie Ihr solche Sachen löst. Zum Beispiel Roland, der ja immerzu solche Datenbank-Dinger baut, hat sicherlich einen Ansatz bereit, um es anders und besser zu bewerkstelligen. Gibt es Frameworks, die SQL-Abfragen grafisch darstellen? Meine Herausforderung ist nicht das Verständnis der Abfrage an sich, sondern das abschliessende Wandeln in eine valide SQL-Anweisungen. Danke für die Hinweise und das Feedback!


13. Januar 2010 um 07:24 Uhr
Ich habe vor 2-3 Jahren mal DBDesigner getestet. War damals leider nicht so einfach unter Linux zu installieren. Weiß daher nicht, wie es aktuell aussieht.
http://www.fabforce.net/dbdesigner4/
Aber es gibt auch MySQL Workbench, mit dem sollte man lt. Homepage auch ER-Diagramme zeichnen können:
http://dev.mysql.com/downloads/workbench/5.1.html
13. Januar 2010 um 07:38 Uhr
Interessanter Ansatz, aber wäre da der Designer von PhpMyAdmin nicht eine einfachere Alternative?
http://www.ubuntu-center.de/13.....hpmyadmin/
Oder hat dein Ansatz irgendwelche Vorzüge demgegenüber?
13. Januar 2010 um 07:55 Uhr
soviel ich verstanden habe, soll die Datenbank vor der Anlage grafisch dargestellt werden. Von dieser Grafik sollen dann auch die SQL-Statements generiert werden.
Das ist eben genau das wofür ER-Diagramme da sind.
Bei dem Designer von phpMyAdmin kann man ja nur im Designer Relationen definieren oder täusche ich mich?
13. Januar 2010 um 08:32 Uhr
Und wenn es bei den verschiedenen Statements hapert, benutz doch ein Framework. Dort sind eigtl. immer Table Gateways integriert (die dir dann deine validen Abfragen erstellen). Wenn es gleich mit möglichst viel Komfort und performant sein soll, würde ich dir Doctrine (oder Propel) ans Herz legen.
Am meisten Performance erreichste aber einfach, wenn du einfach natives SQL lernst
grüße
13. Januar 2010 um 08:36 Uhr
Du kannst auch SQLDeveloper von Oracle probieren, was auch MySQL unterstützt und kostenlos zu beziehen ist:
http://www.oracle.com/technolo.....index.html
Dank java läuft es auch unter Linux.
13. Januar 2010 um 08:50 Uhr
Zum designen von DB Strukturen verwende ich Navicat, hat eigentlich alles was ich brauche.
http://navicat.com
13. Januar 2010 um 08:50 Uhr
@Basti
moderne Datenbanken optimieren deine SQL Satements eh so, dass was ganz anderes rauskommt, als du eingegeben hast, also ists egal, ob du selbst SQL eingibst, oder das ein Tool für dich macht.
Man spart auch einiges an Zeit, wenn man sich die Struktur generieren lässt.
13. Januar 2010 um 08:50 Uhr
Mysql Workbench kannst du auch probieren. Es ist in der Community Edition kostenlos:
http://www.mysql.de/products/workbench/
…und läuft auch überall!
13. Januar 2010 um 08:56 Uhr
Ich verwende auch MySQL Workbench für das modellieren von Datenbanken. Ist ein cooles Tool und läuft problemlos unter Ubuntu. Die community edition reicht völlig.
13. Januar 2010 um 09:18 Uhr
@ all: Wow! Vielen Dank für die Tipps. Da finde ich bestimmt mindestens eine Lösung, die mir behagt.
@Basti: Das hast Du wohl Recht, was das Lernen von SQL betrifft. Ist halt eine Frage der Zeit, die man investieren will und auch der Grad des Interesses daran ist ausschlaggebend.
13. Januar 2010 um 09:18 Uhr
Würde MySQL Workbench nehmen. Gibt es als Linux Version und erspart das Zweckentfremden von Access.
13. Januar 2010 um 09:49 Uhr
Hi,
ich modelliere meine Applikationen mit Enterprise Architect.
Da ich nicht nur mein DB Design sondern auch meine Anwendungsfälle und Klassendiagramme modeliere ist da alles in einem Tool drin.
Das Tool generiert mir dann auch die notwendigen SQL Gerüste.
Es handelt sich um Kaufsoftware die so um 120€ kostet.
Für den Funktionsumfang finde ich den Preis mehr als legitim.
Für deinen Anwendungsfall würde ich jedoch auch lieber auf die schon besprochenen Tools gehen.
Grüße
Roland
13. Januar 2010 um 09:50 Uhr
Ich erstelle jetzt seit rund 10 Jahren MySQL Datenbanken… Anfangs habe ich auch Access zur Gestaltung verwendet… Heute nehme ich nur noch die MySQL Workbench. Weil es einfach alles kann was man brauch… Von Design zur Erstellung bis hin zur Pflege der Datenbank.
13. Januar 2010 um 10:59 Uhr
@Roman:
Warte bitte einmal mit dem Umsetzen, es sei denn, Du machst es um zu lernen.
Ich kenne eine Webanwendung, die das alles schon integriert. Wo Du auch nur eine ISBN eintragen musst und die restlichen Daten werden von Amazon geholt.
13. Januar 2010 um 11:13 Uhr
wwwsqldesigner – Visual web-based SQL modelling tool, finde ich cool
http://code.google.com/p/wwwsqldesigner/
live demo
http://ondras.zarovi.cz/sql/demo/?keyword=default
13. Januar 2010 um 11:25 Uhr
@Dirk: Ich glaube, davon habe ich schon mal gehört. Bin gespannt.
Die übrigen Tools schaue ich mir trotzdem an, schaden tut das in keinem Fall
@b23: Das sieht ganz gut aus! Werde ich mir auch gerne genauer ansehen.
13. Januar 2010 um 11:37 Uhr
@Roman:
Für Gnome gibt es Alexandria und für KDE Tellico. Wegen der Webanwendung habe ich eine Mail an meinen ehemaligen Arbeitskollegen geschickt.
13. Januar 2010 um 11:50 Uhr
Ja, Alexandria kenne ich. Da kann man auch einen HTML-Export machen. Allerdings reichen mir jene Angaben und Funktionen bei Weitem nicht. Ich brauche Kategorien, ein Bewertungssystem, Kommentare, eine Links-Veraltung sowie eine losgelöste Tabelle mit den Autoren und deren Verweise zu den Titeln. Ausserdem eine losgelöste Tabelle mit den Verlagen und den Verweisen zu den Autoren und Büchern. Also keine NullAchtFünfzehn-Lösung
13. Januar 2010 um 11:51 Uhr
Huiuiui, da schießt Du mit Wasserpistolen auf Spatzen
Ich nutze entweder den Quantum DB Designer oder MySQL Workbench. Wenn Du nur eine Bücher DB brauchst, schau Dir http://www.librarything.de an. Wenn’s es dir um die Programmiererei geht, versuch es mit Ruby on Rails ( oder einem PHP Framework http://cakephp.org/). Du mußt zwar in das Framework einsteigen, aber wenn Du einmal drin bist, sparst Du viel Arbeit, Zeit und Nerven.
13. Januar 2010 um 15:18 Uhr
@ #7 Barristan: Table gateways/ORM tools nutzen oftmals PDO, an sich schon langsamer.
Per se ist es auf keinen Fall so, dass mysql alles gleich optimiert, was du so generieren läßt (auch nicht bei Oracle, …).
Mal ein paar Beispiele:
Ein Subselelect bei Mysql in der Where Condition ist ein absoluter Performance Killer (da kein cache mehr verwendet wird und kein Index), ein Inner Join, der das gleiche Ergebnis liefert, dagegen viel schneller.
Für MSSql macht das oben beschriebene Beispiel keinen Unterschied.
Oder vergleiche doch mal die Count- Geschwindigkeit von InnoDb vs MyIsam.
13. Januar 2010 um 16:47 Uhr
Hallo Roman,
GCstar wäre auch eine Empfehlung als fertige Lösungen. Schau mal hier: http://www.ubuntu-center.de/10.....stern-asm/ Ich nutze die auch für meine Bücher, Vidoes und MusikCDs und bekomme von Amazon fast alle Daten plus Coverbild!
Was den Designer von PHPMyAdmin betrifft – mein Artikel dazu wurde ja schon erwähnt – ich habe mit dem Designer nur 1:n-Verknüpfungen getestet. Den Quellcode sehe ich erst, wenn ich einen Datensatz einfüge. Vorteil ist aber, dass bei Verwendung von PHPMyAdmin für die Dateneingabe, Auswahllisten für verknüpfte Tabellen bereit stehen. Wie es bei n:n-Relationen aussieht kann ich nicht sagen. Wäre aber bestimmt interessant zu wissen, ob auch das geht.
13. Januar 2010 um 17:39 Uhr
MySQL Workbench …
13. Januar 2010 um 18:06 Uhr
Hallo,
also ich wage mal zu bezweifeln, dass eine 1:n Beziehung einfacher umzusetzen ist. Ganz im Gegenteil muss man bei einer solchen ja immer “überlegen”, welche Tabelle man um den Fremdschlüssel zur anderen erweitert (und ggf. noch die Attribute hinzufügt). Bei einer n:m-Beziehung muss man eh eine eigene Tabelle erstellen und somit auch nicht groß “überlegen”.
Ich würde Dir mal empfehlen, Dir ein ORM (Object Relational Mapper) anzugucken. Ich hoffe so etwas gibt es auch für PHP (auch wenn ich von dieser Sprache so gar nichts halte!). Damit kann man Queries oftmals relativ einfach zusammenbasteln.
Ansonsten würde ich Dir dringend zu SQLite raten. Wozu auf nen Client-Server-Ansatz setzen, wenn das ganze doch nur von einer Webapplikation präsentiert wird und ohne parallelen Schreibzugriff abläuft?
13. Januar 2010 um 18:08 Uhr
Was ich noch vergaß: Ich entwerfe auch zuerst fast immer ein ER-Diagramm; daraus kann man dsann relativ einfach die Struktur der Tabellen ableiten. Als Tool verwende ich “dia”. Das hat einen Symbol-Satz für ERD.
13. Januar 2010 um 19:35 Uhr
@Lysander: Danke für die Tipps! Es sollen auch Kommentare möglich sein, ebenso ein Hit-Zähler. Es soll also auch geschrieben werden (können).
@Turicon: Schaue ich mir gerne an, danke!
@schmiddi: cakephp habe ich am Barcamp in Vaduz bei Rolands Session gesehen. Das macht einen ordentlichen Eindruck, ja.
13. Januar 2010 um 20:03 Uhr
@Bernd: So wie ich den Designer verstehe, lässt sich damit kein SQL-Statement erzeugen. Ich denke, dass Du mit Deiner Vermutung Recht hast.
14. Januar 2010 um 13:09 Uhr
Gerade im Bereich PHP-Frameworks kann ich dir auch das Zend Framework ans Herzen legen. Ist zwar etwas hart um es wirklich zu lernen aber extrem stark wenn man es beherscht. Ausserdem steht ja Zend selber auch dahinter (hat z.B. einige Entwickler die sich um nichts anderes kümmern) und das Ganze ist super dokumentiert.
Ansonsten denke ich wie dirk gesagt hat, so en PHP-Tool gibt es auf jeden Fall schon, da bin ich mir nahezu sicher.
14. Januar 2010 um 22:19 Uhr
http://sourceforge.net/projects/mogwai/ wäre noch eine Alternative für die, die ER Designer suchen.
15. Januar 2010 um 22:31 Uhr
@Bernd Jo, hast recht – SQL-Statements generieren kann der PhpMyAdmin soweit ich weiß nicht.
Die graphische Darstellung und hilfen beim Befüllen der DB sind aber vorhanden.
Wenn die DB nicht zu komplex ist (und man etwas Ahnung in SQL hat) lassen sich die Statements für die Abfragen ja relativ gut aus der graphischen Darstellung ableiten.
Zum generieren werde ich mir aber mal den Workbench anschauen.
Danke an alle für die Tipps.
20. Januar 2010 um 13:12 Uhr
@Roman:
Mein Kollege hat geantwortet und ich möchte das nur nachliefern. Mir gefällt Deines wesentlich besser.
http://opendb.iamvegan.net/
20. Januar 2010 um 13:40 Uhr
Danke, Dirk! Ist aber auch eine spannende Applikation, so um mal schnell eine DB bereitzustellen. Wenn man selber etwas strickt, ist man halt oft freier in der Gestaltung, dafür können andere Hürden und Einwegstrassen auftauchen.
22. Januar 2010 um 07:16 Uhr
[...] diesen Beitrag konnte ich sehr viel lernen, denn die Kommentare sind gespickt mit guten Werkzeugen, um sich an die [...]
10. Februar 2010 um 16:51 Uhr
Hallo
Der Designer funktioniert bestens. Nur werden bei mir die Verbindungslinien zwischen den einzelnen Tabellen nicht angezeigt! Weiß jemand warum nicht?
Grüße Otto