Beziehungen auf MySQL erstellen?
Moderator: Moderatoren
Beziehungen auf MySQL erstellen?
Hallo,
folgendes verwende ich:
LibreOffice 3.5.4.2 (Ubuntu)
externe MySQL Datenbank (all-inkl)
JDBC
den ganzen Tag schon, versuche ich Beziehungen zwischen meinen Tabellen aufzubauen. Primärschlüssel habe ich vergeben, doch da ich mehrere Tabellen habe, muss ich ja noch Beziehungen erstellen. Sorry schon mal für die Newbiesprache, bin mich noch am einlesen.
Wenn ich die Beziehungen in Base über Beziehungen einfach per Maus rüberschiebe, passiert nichts. Ich habe mir schon zig Videos angeguckt, wo das alles ganz easy geht, bei mir geht da auch nach 4 Stunden rumexperimentieren nichts.
Dann habe ich mir MySQL Workbench installiert. Mich da auch wieder eingelesen, ich verbinde mich zu meiner Datenbank, sobald ich dann jedoch ein neues EER Diagramm erstelle, ist meine Datenbank nicht mehr vorhanden. Ich kann sie also nicht einbeziehen.
Durch längeres suchen bin ich auf MyISAM und InnoDB gestoßen. In phpMyAdmin wird mir ersteres angezeigt. Hat das was damit zu tun?
folgendes verwende ich:
LibreOffice 3.5.4.2 (Ubuntu)
externe MySQL Datenbank (all-inkl)
JDBC
den ganzen Tag schon, versuche ich Beziehungen zwischen meinen Tabellen aufzubauen. Primärschlüssel habe ich vergeben, doch da ich mehrere Tabellen habe, muss ich ja noch Beziehungen erstellen. Sorry schon mal für die Newbiesprache, bin mich noch am einlesen.
Wenn ich die Beziehungen in Base über Beziehungen einfach per Maus rüberschiebe, passiert nichts. Ich habe mir schon zig Videos angeguckt, wo das alles ganz easy geht, bei mir geht da auch nach 4 Stunden rumexperimentieren nichts.
Dann habe ich mir MySQL Workbench installiert. Mich da auch wieder eingelesen, ich verbinde mich zu meiner Datenbank, sobald ich dann jedoch ein neues EER Diagramm erstelle, ist meine Datenbank nicht mehr vorhanden. Ich kann sie also nicht einbeziehen.
Durch längeres suchen bin ich auf MyISAM und InnoDB gestoßen. In phpMyAdmin wird mir ersteres angezeigt. Hat das was damit zu tun?
Re: Beziehungen auf MySQL erstellen?
Hallo, du solltest dich auf ein Verfahren festlegen und nicht hin- und herspringen. Das wird dann nicht nur für dich selbst, sondern auch für potenzielle Helfer unübersichtlich. Deshalb zunächst ein paar Hinweise.
Base und MySQL: Die Fremdschlüssel sind Festlegungen der Datenbank selbst, also von MySQL. Base ist die Schnittstelle zwischen der Datenbank und der Benutzeroberfläche, also von Abfragen, Formularen und Berichten. Du kannst Fremdschlüssel in Base anlegen, indem du über Extras > SQL einen ALTER TABLE-Befehl abschickst. (Ich weiß nicht, ob der Weg über Extras > Beziehungen nur die vorhandenen Verknüpfungen anzeigen kann oder sie auch anlegen.)
MyISAM und InnoDB haben damit etwas zu tun, wie MySQL die Datenbanken physikalisch auf der Festplatte speichert und intern organisiert. Das hat nichts mit den SQL-Befehlen, den Fremdschlüsseln oder der Zusammenarbeit mit Base zu tun.
Die Workbench, phpmyadmin oder das Konsolenprogramm mysql sind unterschiedliche Wege, um mit der Datenbank zu kommunizieren. Das Ergebnis ist in allen Fällen gleich: Entweder etwas funktioniert, oder es funktioniert nicht.
Die Workbench ist allerdings viel mehr als ein SQL-Hilfsprogramm, sie dient nämlich auch zur Konzeption von Datenbanken. Für den Einstieg solltest du dich auf den SQL-Editor beschränken - aus dem Startfenster heraus mit Strg-U aufzurufen (vorausgesetzt, dass unter Ubuntu der gleiche ShortCut gilt).
Soweit die Vorrede, jetzt konkret zur Erzeugung der Fremdschlüssel. (Ich beschränke mich auf zwei Tabellen, die miteinander verknüpft werden sollen, und die dafür nötigen Spalten.) Voraussetzung ist, dass die Spalten und die Datentypen des Primärschlüssels in der Primärtabelle übereinstimmen mit den Spalten und Datentypen des Fremdschlüssels in der Detailtabelle. Beispiel (übernommen aus Beziehungen bei Base funktionieren nicht und berichtigt):
Aus dem Kontext-Menü heraus kannst du mit Send to SQL Editor > Create Statement prüfen, wie MySQL den Foreign Key erzeugt hat. Das kannst du auch direkt als SQL-Befehl - in der Regel mit ALTER TABLE - manuell machen.
Es ist möglich, auch andere Felder für Primär- und Fremdschlüssel vorzusehen. Davon ist aber in aller Regel abzuraten. Die ID und damit auch ein Fremdschlüsseln sollte nur die Funktion haben, dass die Datenbank selbst einen Datensatz eindeutig identifizieren kann, aber keine sonstige Bedeutung für den Anwender.
Mehr zu Fremdschlüsseln findest du beispielsweise in der Einführung in SQL. Gruß Jürgen
Base und MySQL: Die Fremdschlüssel sind Festlegungen der Datenbank selbst, also von MySQL. Base ist die Schnittstelle zwischen der Datenbank und der Benutzeroberfläche, also von Abfragen, Formularen und Berichten. Du kannst Fremdschlüssel in Base anlegen, indem du über Extras > SQL einen ALTER TABLE-Befehl abschickst. (Ich weiß nicht, ob der Weg über Extras > Beziehungen nur die vorhandenen Verknüpfungen anzeigen kann oder sie auch anlegen.)
MyISAM und InnoDB haben damit etwas zu tun, wie MySQL die Datenbanken physikalisch auf der Festplatte speichert und intern organisiert. Das hat nichts mit den SQL-Befehlen, den Fremdschlüsseln oder der Zusammenarbeit mit Base zu tun.
Die Workbench, phpmyadmin oder das Konsolenprogramm mysql sind unterschiedliche Wege, um mit der Datenbank zu kommunizieren. Das Ergebnis ist in allen Fällen gleich: Entweder etwas funktioniert, oder es funktioniert nicht.

Die Workbench ist allerdings viel mehr als ein SQL-Hilfsprogramm, sie dient nämlich auch zur Konzeption von Datenbanken. Für den Einstieg solltest du dich auf den SQL-Editor beschränken - aus dem Startfenster heraus mit Strg-U aufzurufen (vorausgesetzt, dass unter Ubuntu der gleiche ShortCut gilt).
Soweit die Vorrede, jetzt konkret zur Erzeugung der Fremdschlüssel. (Ich beschränke mich auf zwei Tabellen, die miteinander verknüpft werden sollen, und die dafür nötigen Spalten.) Voraussetzung ist, dass die Spalten und die Datentypen des Primärschlüssels in der Primärtabelle übereinstimmen mit den Spalten und Datentypen des Fremdschlüssels in der Detailtabelle. Beispiel (übernommen aus Beziehungen bei Base funktionieren nicht und berichtigt):
- Tabelle Schueler hat das Feld ID vom Typ INTEGER als Primärschlüssel (am besten auch gleich AutoIncrement)
- Tabelle Termine hat ein Feld ID vom Typ INTEGER als Primärschlüssel (am besten auch gleich AutoIncrement) und außerdem ein Feld Schueler_ID ebenfalls vom Typ INTEGER.
- Tabelle Termine verknüpft über einen Fremdschlüssel die Felder Termine.Schueler_ID und Schueler.ID.
Aus dem Kontext-Menü heraus kannst du mit Send to SQL Editor > Create Statement prüfen, wie MySQL den Foreign Key erzeugt hat. Das kannst du auch direkt als SQL-Befehl - in der Regel mit ALTER TABLE - manuell machen.
Es ist möglich, auch andere Felder für Primär- und Fremdschlüssel vorzusehen. Davon ist aber in aller Regel abzuraten. Die ID und damit auch ein Fremdschlüsseln sollte nur die Funktion haben, dass die Datenbank selbst einen Datensatz eindeutig identifizieren kann, aber keine sonstige Bedeutung für den Anwender.
Mehr zu Fremdschlüsseln findest du beispielsweise in der Einführung in SQL. Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Beziehungen auf MySQL erstellen?
Hallo Freaky,
ich habe noch nicht getestet, ob Base in der Lage ist, die Beziehungen von Tabellen in MySQL auch über die GUI zu erstellen. Eine Grundlage solltest Du aber beachten: Fremdschlüsseldefinitionen werden nur bei Tabellen des Typs INNODB unterstützt. Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... -keys.html
Du musst allerdings nicht mit den Beziehungsdefinitionen der Datenbank arbeiten. Wenn Du eine Datenbank sauber erstellst, dann wird die Beziehung über die Formulare gesichert. Dann darf allerdings niemand einfach an den Tabellen mit Werten für Fremdschlüsselfeldern arbeiten, die gar kein Gegenüber haben.
Gruß
Robert
ich habe noch nicht getestet, ob Base in der Lage ist, die Beziehungen von Tabellen in MySQL auch über die GUI zu erstellen. Eine Grundlage solltest Du aber beachten: Fremdschlüsseldefinitionen werden nur bei Tabellen des Typs INNODB unterstützt. Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... -keys.html
Du musst allerdings nicht mit den Beziehungsdefinitionen der Datenbank arbeiten. Wenn Du eine Datenbank sauber erstellst, dann wird die Beziehung über die Formulare gesichert. Dann darf allerdings niemand einfach an den Tabellen mit Werten für Fremdschlüsselfeldern arbeiten, die gar kein Gegenüber haben.
Gruß
Robert
Re: Beziehungen auf MySQL erstellen?
Ach du meine Güte. Noch ein Grund, warum MySQL von manchen Leuten nicht als vollwertige Datenbank angesehen wird und InnoDB bei neu angelegten Datenbanken als Standard vorgesehen ist, siehe InnoDB as default engine. JürgenRobertG hat geschrieben:Eine Grundlage solltest Du aber beachten: Fremdschlüsseldefinitionen werden nur bei Tabellen des Typs INNODB unterstützt. Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... -keys.html
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Beziehungen auf MySQL erstellen?
Deshalb bin ich ja überhaupt darauf gekommen und frage nach. Bei mir ist der Standard nämlich MyISAM.juetho hat geschrieben:Ach du meine Güte. Noch ein Grund, warum MySQL von manchen Leuten nicht als vollwertige Datenbank angesehen wird und InnoDB bei neu angelegten Datenbanken als Standard vorgesehen ist, siehe InnoDB as default engine. JürgenRobertG hat geschrieben:Eine Grundlage solltest Du aber beachten: Fremdschlüsseldefinitionen werden nur bei Tabellen des Typs INNODB unterstützt. Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... -keys.html
Vielen Dank erst mal für Eure Antworten. Das ist erstmal wieder Input um mich weiter durch zu lesen.
Offtopic:
Wollt Ihr eventuell mal auf meine Übersicht gucken ob das okay aussieht?
Wenn ich da im übrigen Tabellen verbinde und speicher, sind sie wieder weg wenn ich sie neu öffne.
- Dateianhänge
-
- Auswahl_163.jpeg (56.48 KiB) 5855 mal betrachtet
Re: Beziehungen auf MySQL erstellen?
Hallo Freaky,
scheint mir irgendwie logisch, dass die Tabellenansicht nachher nicht mehr da ist. Ich nehme an, dass Base die aus der Datenbank ausliest. Woher soll diese Ansicht sonst auch kommen. Und da keine Beziehungen definiert sind, brauchen da auch keine Tabellen zu stehen.
Ich habe das gerade einmal bei meiner MySQL-Datenbank getestet (LO 3.3.4, MySQL-Native-Treiber). Wenn Du InnoDB-Tabellen nimmst, dann kannst Du die Verbindungen ziehen. Sie bleiben auch stehen. In PHPMyAdmin werden die Verbindungen auch angezeigt.
In Deiner Übersicht hat die Tabelle "artikel" zwei Primärschlüssel. Warum?
Gruß
Robert
scheint mir irgendwie logisch, dass die Tabellenansicht nachher nicht mehr da ist. Ich nehme an, dass Base die aus der Datenbank ausliest. Woher soll diese Ansicht sonst auch kommen. Und da keine Beziehungen definiert sind, brauchen da auch keine Tabellen zu stehen.
Ich habe das gerade einmal bei meiner MySQL-Datenbank getestet (LO 3.3.4, MySQL-Native-Treiber). Wenn Du InnoDB-Tabellen nimmst, dann kannst Du die Verbindungen ziehen. Sie bleiben auch stehen. In PHPMyAdmin werden die Verbindungen auch angezeigt.
In Deiner Übersicht hat die Tabelle "artikel" zwei Primärschlüssel. Warum?
Gruß
Robert
Re: Beziehungen auf MySQL erstellen?
Also die Tabellen stehen da hinterher schon noch so. Nur die angelegten Beziehungen werden nicht gespeichert.
Warum in der Tabelle zwei Primärschlüssel sind, weiß ich nicht, lässt sich auch nicht mehr entfernen, muss ich noch mal löschen und neu anlegen.
Ich kann ja in PHPMyAdmin nachträglich auf InnoDB stellen. Kann ich das einfach machen oder kommt Base dann durcheinander?
Warum in der Tabelle zwei Primärschlüssel sind, weiß ich nicht, lässt sich auch nicht mehr entfernen, muss ich noch mal löschen und neu anlegen.
Ich kann ja in PHPMyAdmin nachträglich auf InnoDB stellen. Kann ich das einfach machen oder kommt Base dann durcheinander?
Re: Beziehungen auf MySQL erstellen?
Hallo Freaky,
ich würde das mit der Tabellenformatsänderung einfach versuchen. Eigentlich liest ja Base nur die Tabellennamen und andere Informationen aus. Da dürfte eigentlich kein Problem auftauchen - außer, dass Du eventuell die Tabellen in der Beziehungsdefinition entfernen und wieder neu laden musst. Als ich nämlich die beiden Tabellen mit InnoDB dabei hatte war Base erst einmal bei der Erstellung des Bildschirms für die Beziehungsdefinitionen mächtig am Rotieren - vielleicht, weil da ein paar mehr Datenbanken liegen und bei allen geklärt werden musste, ob InnoDB dabei ist oder nicht ...
Gruß
Robert
ich würde das mit der Tabellenformatsänderung einfach versuchen. Eigentlich liest ja Base nur die Tabellennamen und andere Informationen aus. Da dürfte eigentlich kein Problem auftauchen - außer, dass Du eventuell die Tabellen in der Beziehungsdefinition entfernen und wieder neu laden musst. Als ich nämlich die beiden Tabellen mit InnoDB dabei hatte war Base erst einmal bei der Erstellung des Bildschirms für die Beziehungsdefinitionen mächtig am Rotieren - vielleicht, weil da ein paar mehr Datenbanken liegen und bei allen geklärt werden musste, ob InnoDB dabei ist oder nicht ...
Gruß
Robert
Re: Beziehungen auf MySQL erstellen?
Guten Morgen!
Das umstellen per PHPMyAdmin hat problemlos geklappt.
Nach ein paar Stunden Schlaf ist mir nun auch der Rest gelungen und quasi im Traum eingefallen.
Die IDs hatten mehrfach Auto-Werte, und einige Tabellen waren zum testen schon ein wenig befüllt.
Jetzt klappen alle Beziehungen, auch 1:n.
Wahnsinn was Schlaf bringt!
Das umstellen per PHPMyAdmin hat problemlos geklappt.
Nach ein paar Stunden Schlaf ist mir nun auch der Rest gelungen und quasi im Traum eingefallen.
Die IDs hatten mehrfach Auto-Werte, und einige Tabellen waren zum testen schon ein wenig befüllt.
Jetzt klappen alle Beziehungen, auch 1:n.
Wahnsinn was Schlaf bringt!
Re: Beziehungen auf MySQL erstellen?
Eine Frage habe ich dennoch.
Meine Beziehungen sehen jetzt so aus: Dann müsste doch, wenn ich einen Artikel anlege, die automatisch generierte ID auch in der Tabelle "Medien" erscheinen oder?
Tut sie aber nicht.
Hier die beiden Tabellen: Habe mir schon Beispielprojekte angeschaut, da ist es auch so, soweit ich das gesehen habe.
Meine Beziehungen sehen jetzt so aus: Dann müsste doch, wenn ich einen Artikel anlege, die automatisch generierte ID auch in der Tabelle "Medien" erscheinen oder?
Tut sie aber nicht.
Hier die beiden Tabellen: Habe mir schon Beispielprojekte angeschaut, da ist es auch so, soweit ich das gesehen habe.
Re: Beziehungen auf MySQL erstellen?
Hallo Freaky,
In Base wird der Übertrag über Formular und Subformular geregelt. Die Tabelle "artikel" gehört ins Hauptformular, die Tabelle "medien" ins Subformular. Ist ein "artikel" eingegeben, dann existiert eine "artikel"."id". Die wird übergeben an die "medien"."id".
Gruß
Robert
Die automatisch generierte ID erscheint nicht in "medien". Sie muss dort eingetragen werden. Es darf nur zu jedem Artikel ein Medium existieren - aber auch gar keines.Freaky hat geschrieben: Dann müsste doch, wenn ich einen Artikel anlege, die automatisch generierte ID auch in der Tabelle "Medien" erscheinen oder?
In Base wird der Übertrag über Formular und Subformular geregelt. Die Tabelle "artikel" gehört ins Hauptformular, die Tabelle "medien" ins Subformular. Ist ein "artikel" eingegeben, dann existiert eine "artikel"."id". Die wird übergeben an die "medien"."id".
Gruß
Robert