Was ist der Unterschied zwischen Primärschlüssel und Gesamtschlüssel?

3 Antworten

Jeder Schlüssel – auch jeder Primärschlüssel – kann aus mehreren Atrributen bestehen. Nur wer, in konkreter Situation, betonen möchte, dass er wirklich alle meint, verwendet das Wort "Gesamtschlüssel" (es bedeutet: "der komplette Schlüssel").

Ansonsten ist dieses Wort einfach nur überflüssig.

Der Primärschlüssel einer Tabelle beinhaltet die (und nur die) Felder, die jeden Datensatz in der Tabelle eindeutig identifizieren. Es kann nur jeweils einen Eintrag mit denselben Werten im Primärschlüssel geben.

Nehmen wir an, Du hast eine Tabelle "Rechnung", dann ist die Rechnungsnummer ein guter Primärschlüssel, denn die Rechnungsnummer muss eindeutig sein und sie identifiziert jede Rechnung zweifelsfrei.

Wenn Du jetzt zu einer Rechnung aber verschiedene Positionen in der Tabelle "Rechnungsposition" hast, dann benötigt die ein weiteres Feld im Primärschlüssel, beispielsweise die Artikelnummer (mit diesem Beispiel fahre ich gleich fort) oder eine Positionsnummer (was sinnvoller wäre, denn jede Rechnung kann ja jeden Artikel mehrfach beinhalten) - ansonsten könnte jede Rechnung nur eine Position haben, was nicht sonderlich sinnvoll ist.

Für dieses Beispiel sagen wir mal, dass jede Rechnungsposition durch die Rechnungsnummer und die Artikelnummer eindeutig identifiziert wird - das ist also der Primärschlüssel dieser Tabelle.

Du kannst also jetzt über die Rechnungsnummer eine Liste der Positionen herausfinden.

Wenn Du jetzt auch noch Artikelinformationen benötigst, dann hast Du natürlich eine Artikeltabelle. In dieser ist die Artikelnummer der Primärschlüssel - klar, denn jeder Artikel ist über die Artikelnummer eindeutig identifiziert.

Was, wenn Du jetzt zu jeder Rechnungsposition noch Informationen zum Artikel möchtest? Dann erstellst Du eine Relation zwischen der Rechnungsposition-Tabelle und der Artikeltabelle. Da aber der Artikeltabelle die Rechnungsnummer völlig egal ist, findet diese Relation nur auf einem Teil des Primärschlüssels der Rechnungsposition-Tabelle statt.

Die Artikelnummer ist also nur ein Teil des Gesamtschlüssels der Rechnungsposition-Tabelle.

Zu allem Überfluss kann es durchaus sein und kommt in der Praxis sehr oft vor , dass die Relation zur Artikeltabelle über ein Feld hergestellt wird, welches gar nicht Teil des Primärschlüssels der Rechnungsposition-Tabelle ist. Damit sind wir wieder bei dem Beispiel, dass eine Positionsnummer Teil des Primärschlüssels der Rechnungsposition-Tabelle ist, und nicht die Artikelnummer.


ohwehohach  29.01.2020, 00:24

Beispiel 1 illustriert:

Rechnung           Rechnungsposition     Artikel
-------------      -----------------     -----------
P RechnungsNr  ->  P RechnungsNr       
Feld 1             P ArtikelNr       ->  P ArtikelNr
Feld 2             Feld 1                Feld 1
Feld 3             Feld 2                Feld 1

Beispiel 2 illustriert:

Rechnung           Rechnungsposition     Artikel
-------------      -----------------     -----------
P RechnungsNr  ->  P RechnungsNr       
Feld 1             P Position         
Feld 2             ArtikelNr          -> P ArtikelNR
Feld 3             Feld 2                Feld 1
0

Primärschlüssel sind unique.

Gesamtschlüssel:

https://www.tutorials.de/threads/normalformen.230312/post-1199912


grtgrt  29.01.2020, 00:18

Eine Tabelle kann mehrere Schlüssel haben, die man als Primärschlüssel nutzen kann.

SQL aber verlangt, dass man einen von ihnen (und wirklich nur einen) als Primärschlüssel auszeichnet. Unique ist er also nur aus Sicht des in SQL formulierten Datenschemas.

0
ohwehohach  29.01.2020, 00:25
@grtgrt

Und es kann unique Schlüssel geben, die nicht der Primärschlüssel sind.

2
grtgrt  29.01.2020, 00:36
@ohwehohach

Jede einen Schlüssel darstellende Attributmenge ist "unique" (denn sonst könnte sie ja nicht Schlüssel sein).

1