Der Primärschlüssel gibt in Datenbanken eine Tabellenspalte an, die jeder Zeile eine eindeutige Identifikation zuweist.
Was ist ein Primärschlüssel?
Primärschlüssel kann man als Art IDs sehen, mit der man Objekte eindeutig identifizieren kann. In der Modellierung von Datenbanken sind Primärschlüssel maßgeblich, um mehrere Tabellen in einer Datenbank in Beziehung zu setzen.
Abgekürzt wird der Primärschlüssel meist mit PK für „Primary Key“. Dieser ist eine Regel für die Tabelle einer Datenbank, was als Constraint bezeichnet wird. Im Alltag begleiten uns überall Primärschlüssel: Die Steuer-ID, Führerscheinnummer, Matrikelnummer usw.
Hauptmerkmale eines Primärschlüssels
- In allen Zeilen der Spalte müssen unterschiedliche Werte stehen.
- Eine Primärschlüssel-Spalte darf keine NULL-Werte enthalten.
Praxisbeispiele
In der Praxis werden häufig einzigartige IDs vergeben. Möchte man z.B. in einem Unternehmen in der Tabelle „Mitarbeiter“ einen Primärschlüssel vergeben, muss man eine Spalte dazu definieren.
Die Nachname-Spalte eignet sich dafür nicht, da im Unternehmen sowohl Max Müller als auch Erika Müller arbeiten.
Die Grundbedingung für Primärschlüssel ist allerdings, dass es keine Dopplungen geben darf. Daher eignet es sich eher, eine neue Spalte namens „Mitarbeiter-ID“ zu erstellen und jedem Mitarbeiter eine individuelle ID zuzuordnen.
CREATE TABLE Mitarbeiter(
Mitarbeiter-ID INT PRIMARY KEY
Nachname VARCHAR(25)
Vorname VARCHAR(25)
Geburtsdatum DATE
);
Damit wird eine Tabelle erstellt, die den Namen „Mitarbeiter“ trägt und die folgenden Spalten enthält:
- „Mitarbeiter-ID“, welche aus Integern (ganze Zahlen) besteht und als Primärschlüssel definiert ist.
- Nachname und Vorname, welche jeweils aus einem 25 Zeichen langen String (Zeichenkette) bestehen.
- Das Geburtsdatum, welches in einem Datumsformat wiedergegeben wird.
Zusammengesetzte Primärschlüssel
In einer Bank kann z.B. die Sozialversicherungsnummer als Primärschlüssel ausgewählt werden. Problematisch wird es aber, wenn Kinder ein Bankkonto eröffnen möchten und diese noch keine Sozialversicherungsnummer besitzen. Sie würde den Bankkunden zwar eindeutig identifizieren, allerdings können NULL-Werte existieren. Damit fällt auch das als Primärschlüssel raus.
Unter diesen Bedingungen kann ein Primärschlüssel auch aus mehreren Spalten bestehen. In diesem Fall spricht man von einem zusammengesetztem Primärschlüssel.
Der Primärschlüssel kann nur bestehen, wenn die Werte in diesen Spalten in derselben Reihenfolge nicht doppelt vorkommen. In diesem Fall dürfen keine doppelten Zeilen mit identischen Werten in den Primärschlüsselspalten existieren.
Angenommen, wir teilen uns ein Bankkonto mit unserem Mann/unserer Frau. Hat man nur eine Tabelle für die Konten, wäre die Kontonummer als Primärschlüssel nicht sinnvoll, da man hier nur eine einzige Zeile pro Kontonummer haben kann.
Sind die Inhaber aber in der Tabelle gelistet, braucht man ggf. mehrere Zeilen. Hier können wir einfach Konto- und Kundennummer als zusammengesetzten Primärschlüssel nutzen.
CREATE TABLE Bestellungen (
Kontonummer INT,
Kundennummer INT,
PRIMARY KEY (Kontonummer, Kundennummer)
);
Auch in diesem Fall würde sich in der Mitarbeiter-Tabelle ein zusammengesetzter Primärschlüssel aus Vor- und Nachnamen nicht eignen.
Spätestens wenn der zweite Max Müller in das Unternehmen eintritt, wird die Datenbank eine Fehlermeldung ausgeben und er kann nicht eingefügt werden. Sein Name lässt sich nicht ändern und das gesamte Datenbanksystem für ihn umzuändern wird teuer für das Unternehmen.
Daher ist es im Vorhinein sinnvoll, einen Primärschlüssel auszuwählen, bei dem Dopplungen unmöglich sind.
2Kommentare
Brunni Baryla
Hallo Herr Aziz,
vielen Dank für diesen Beitrag. Können Sie mir bitte ein konkretes Beispiel aufführen für einen Primärschlüssel der aus mehreren Spalten besteht, also welchen Primärschlüssel auszuwählen sinnvoll wäre, bei dem eine Doppelung auch definitiv ausgeschlossen ist.
Liebe Grüße
Brunni
Yosef Aziz, Gründer von datamines.de
Hallo Brunni,
sehr gute Frage, die Anwendung von zusammengesetzten Primärschlüsseln ist nicht ganz intuitiv, da es einige Vor- und Nachteile gibt.
Beispiel 1:
Verlag für Jahrbücher. Es kann verschiedene Schulen geben, es kann aber auch verschiedene Jahre geben. Was nicht passieren kann, ist dass in der Tabelle eine Schule zweifach im selben Jahr gelistet ist.
Bsp.:
Schule | Abschlussjahr | Preis
——————————
Abc Schule | 2020 | 15€
Abc Schule | 2021 | 16€
Xyz Schule | 2020 | 20€
Xyz Schule | 2021 | 21€
Die Kombination aus Schule und Abschlussjahr wäre damit ein Beispiel für einen zusammengesetzten Primärschlüssel.
Beispiel 2:
Die Prüfungsliste einer Universität. Theoretisch könnte man die ID der Studenten benutzen, aber du darfst Prüfungen bis zu 3x schreiben. D.h. deine ID würde bis zu 3x vorkommen und wäre damit kein Primärschlüssel mehr. Um dem entgegen zu steuern, kannst du die Anzahl der Versuche mit auflisten:
Studenten_ID | Versuch | Note
—————————–
54321 | 1 | 2,3
12345 | 1 | 5,0
12345 | 2 | 5,0
12345 | 3 | 1,0
Ich hoffe das konnte dir weiterhelfen. Wenn du noch Fragen hast, kannst du gerne noch einmal hierunter kommentieren.
Danke dir!
Yosef