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):
- 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.
In der Workbench legst du die Fremdschlüssel so fest: Object Browser > Datenbank > Tables > die betreffende Detailtabelle > Alter Table. Im Register ForeignKeys vergibst du dem Fremdschlüssel einen passenden Namen (am besten etwas wie: Detailtabelle_Spalte_FK oder Detailtabelle_Spalte_Primärtabelle). Unter "Referenced Table" wählst du die Primärtabelle aus, im rechten Teilfenster ordnest du dem Feld aus der Detailtabelle (im Beispiel Schueler_ID) das passende Feld der Primärtabelle zu. Mit Apply wird das gespeichert.
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
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.
[b]Base und MySQL:[/b] 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.)
[b]MyISAM und InnoDB [/b]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 [b]Workbench, phpmyadmin[/b] oder das Konsolenprogramm [b]mysql [/b]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 [b]Workbench [/b]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 [b]Erzeugung der Fremdschlüssel.[/b] (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 [url=http://de.openoffice.info/viewtopic.php?f=8&t=58458]Beziehungen bei Base funktionieren nicht[/url] und berichtigt):
[list][*]Tabelle [i]Schueler [/i]hat das Feld [i]ID [/i]vom Typ INTEGER als Primärschlüssel (am besten auch gleich AutoIncrement)
[*]Tabelle [i]Termine [/i]hat ein Feld [i]ID [/i]vom Typ INTEGER als Primärschlüssel (am besten auch gleich AutoIncrement) und außerdem ein Feld [i]Schueler_ID[/i] ebenfalls vom Typ INTEGER.
[*]Tabelle [i]Termine [/i]verknüpft über einen Fremdschlüssel die Felder [i]Termine.Schueler_ID[/i] und [i]Schueler.ID[/i].[/list]
In der Workbench legst du die Fremdschlüssel so fest: Object Browser > Datenbank > Tables > die betreffende Detailtabelle > Alter Table. Im Register ForeignKeys vergibst du dem Fremdschlüssel einen passenden Namen (am besten etwas wie: Detailtabelle_Spalte_FK oder Detailtabelle_Spalte_Primärtabelle). Unter "Referenced Table" wählst du die Primärtabelle aus, im rechten Teilfenster ordnest du dem Feld aus der Detailtabelle (im Beispiel Schueler_ID) das passende Feld der Primärtabelle zu. Mit Apply wird das gespeichert.
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 [url=http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_Fremdschl%C3%BCssel-Beziehungen]Einführung in SQL[/url]. Gruß Jürgen