phpbar.de logo

Mailinglisten-Archive

AW: Unterschied zwischen Primärschlüssel und Fremdschlüssel ?

AW: Unterschied zwischen Primärschlüssel und Fremdschlüssel ?

Tim Hildebrandt TConnect at gmx.net
Mit Mai 26 18:23:46 CEST 2004


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