Mailinglisten-Archive |
Hallo, ich denke, der Unterschied zwischen Primär- und Fremdschlüssel kann am besten mit einem kleinen Beispiel verdeutlicht werden. Wie Du sicherlich weißt, gibt es unterschiedliche Möglichkeiten, Informationen miteinander zu kombinieren. Wie Norbert es schon erwähnt hat, ist das Ziel einer "guten" Datenbankstruktur eine sog. Normierung. Dies bedeutet, dass jedes Quäntchen Information möglichst nur ein einziges Mal gespeichert werden sollte und nicht in verschiedenen Tabellen doppelt mitgeschliffen wird. Angenommen, Du möchtest ein kleines Portal eröffnen, in denen Benutzer Forumsbeiträge schreiben können. Dann benötigst Du - im einfachsten Fall - zwei Tabellen: 1. Tabelle mit Nutzerdaten 2. Tabelle mit Forumsdaten Während Tabelle 1 in der Regel die komplette Adresse inklusive EMail etc. enthält, so werden in Tabelle 2 nur die von den Benutzern erzeugten Beiträge gespeichert. Trotzdem soll es ja möglich sein, jeden Beitrag später auch wieder seinem Erzeuger zuordnen zu können! Ohne diese Möglichkeit wäre das ganze ad absurdum geführt. Also macht man sich an die Erstellung der Tabellen. Dabei sollte man sich bereits in der Planungsphase überlegen, welche Primärschlüssel notwendig sind. Wie gesagt, Primärschlüssel indizieren genau *eine* Zeile und sind in der gesamten Tabelle eindeutig. Angenmmen, wir gehen davon aus, dass auch jede EMail Adresse weltweit eindeutig ist, dann könnte man ggf. die EMail Adresse der Benutzer als Primärschlüssel für die Adressdaten verwenden... (andre Möglichkeiten gibt es natürlich über die Definition einer autoincrementen ID) Tabelle 1 habe also die Spalten: email (primary), nachname, vorname In der Tabelle 2 ist eine numerische ID sinnvoll. Hier speichern wir die Forumsbeiträge: id (primary), betreff, text Was in der bisherigen Darstellung noch fehlt ist die Zuordnung der Beiträge zu den jeweiligen Benutzern. Die Spalte des Forign-Keys fehlt. Also fügen wir diese noch schnell hinzu: id (primary), email (indiziert), betreff, text Vorteil dieser Abbildung ist, dass wir nicht in jedem Beitrag die kompletten Adressdaten des jeweiligen Teilnehmers mitspeichern müssen, sondern dass wir diese Daten durch die Referenz der Spalte "email" aus Tabelle 2 problemlos aus Tabelle 1 herleiten können. Grundsätzlich gilt, dass man immer dort, wo es eindeutige Aufgabenverteilungen (von Informationen) gibt, Informationsblöcke in mehrere Tabellen aufsplitten kann und sollte. Die Verbindung zwischen den jeweiligen Tabellen wird durch den Fremdschlüssel realisiert, der auf den jeweiligen Primärschlüssel der "Eltern"-Tabelle zeigt. Grüße Tim PS: Könntest Du bitte für dieses Forum Deine Outlook-Sendebestätigung abstellen? Danke.
php::bar PHP Wiki - Listenarchive