Mehrere Felder im Primärschlüssel?

mowl

Mitglied
Was ist eigentlich der Unterschied zwischen einem Primärschlüssel der auf mehreren numerischen Feldern sitzt und einem Primärschlüssel mit mehreren Index-Indexen, wann sollte man die Felder auf einen Primärschlüssel setzen und wann auf mehrere Indexe verteilen?
Ich hab alle Felder die einen Index benötigen zum Primärschlüssel zusammengeschlossen und es funktioniert soweit korrekt. Gehe ich richtig in der Annahme, dass der Primärschlüssel mit mehreren Feldern die Funktion hat eine Doppelkombination nicht zu zulassen? Beispiel: Die Werte 1, 2, 3, wenn ich diese Werte nochmals einfügen würde kommt ein Fehler oder?
 
Ein Primärschlüssel dient dazu, eine Zeile (Datensatz) einer Tabelle eindeutig zu identifizieren. D.h. wie Du schon richtig erkannt hast, ein Primärschlüssel ist immer eindeutig.
Wenn Du einen Primärschlüssel über drei Spalten verteilst, dann ist also die Kombination der Werte in den drei Spalten eindeutig!

Manchmal benötigt man aber weitere Indexe, die keine Primärschlüssel sind, z.B. bei Namen. Während es bspw. viele Heinz Müller geben wird, (Index auf Name und Vorname), so kann dennoch jeder eine eigene eindeutige Kundennummer (Primärschlüssel) haben (und das ist sehr sinnvoll).

Die Identifizierung einer Person wird dann über die Kundennummer vorgenommen und nicht etwa über Namen und Vornamen und zusätzlich einer Adresse (die sich dann auch noch alle paar Jahre ändern könnte)...

Hoffe, das hilft schon mal ein wenig weiter.
Schau doch mal in die Tutorials. Da solltest Du mehr zu Indexen finden..


vop
 
Primärschlüßel

Aus der Relationalen DB Sicht ist es zulässig Schlüßel aus mehreren natürlichen Attributen zu definieren.
Aber oft erleidet man hiermit Schiffbruch. Es ist wirklich oft ratsam, _einen_ künstlichen Schlüßel generiren zu lassen als PK.

Chris
 
Zuletzt bearbeitet:
Hallo,

hinzuzufügen wäre noch, dass es pro Tabelle nur einen Primärschlüssel geben darf und in vielen DBMS' muss es einen solchen geben.
Um ein Feld oder eine Kombination von Feldern als zwingend eindeutig festzulegen kann man auch einen UNIQUE-Index anlegen.

Ich persönlich habe mir angewöhnt, alle meine Tabellen mit dem Feld 'id' als auto_increment-Feld auszustatten welches als Primär-Index dient und alle weiteren (Nicht-Primär-)Indexe vergebe ich nach Bedarf.
Diese ID entspräche dem von XChris erwähnten "künstlichen Schlüssel" und dient einzig und allein als eindeutige Datensatznummer. Ich nehme diese auch nur in Ausnahmefällen als Referenz für Verweise - es könnte ja sein, dass z.B. bei einer Tabellen-Migration die IDs neu "durchnummeriert" werden.

Grüße,
Martin
 
Ich nehme diese auch nur in Ausnahmefällen als Referenz für Verweise - es könnte ja sein, dass z.B. bei einer Tabellen-Migration die IDs neu "durchnummeriert" werden

Ich benutze den PK auch in anderen Tabellen als FK und lasse Referenzen deswegen genierieren. Dies geht einwandfrei mit:

Code:
select @einFK := LAST_INSERT_ID();
insert ...... value (@einFK);

Dann stimmen auch nach einer neuen "Mischung" die FK's.

Chris
 
Zurück