Hauptmenü

Untermenü

MySQL - Grundlagen - Schlüssel

1. Das grundsätzliche Problem

Damit eine Datenbank sauber funktioniert, müssen ihre Inhalte in sich stimmig sein. Da ich zu den Details später komme, will ich erst mal nur auf eine Sache hinweisen. Dazu greifen wir noch mal auf die kleine Adress-Datenbank zurück.


+-------+----------+--------------+-----+-----------+
|vorname|namen     |strasse       |plz  |ort        |
+-------+----------+--------------+-----+-----------+
|Claudia|Mustermann|Musterstraße 0|12345|Musterstadt|
|Dieter |Hinz      |Hinzweg 0     |45678|Hinzdorf   |
|Peter  |Kunz      |Kunzpfad 0    |67890|Kunzdorf   |
+-------+----------+--------------+-----+-----------+

Anhand welches Kriteriums können wir nun einen Datensatz eindeutig identifizieren? Über den kompletten Namen? Nein, denn wir können nicht wissen, ob es nicht zum Beispiel irgendwo in Deutschland Leute mit demselben Namen gibt. Der Name, die Straße und der Ort? In inzestuösen Regionen innerhalb unseres schönen Landes werdet ihr auch da Probleme bekommen können. Gut vielleicht nicht praktisch, aber theoretisch(!) wäre es möglich. Und genau darum geht es.

2. Einfacher hochzählender Schlüssel in einem Feld

Beim Erstellen einer Tabelle weist man MySQL darauf hin, dass eine bestimmte Spalte vom Typ Ganzzahl ist und über folgende zusätzliche Eigenschaften verfügen soll:

Zu den Details, speziell zu NULL, komme ich später. Bis dato braucht ihr für das grundsätzliche Verständnis erst mal nur diese Informationen. NOT NULL bedeutet, dass immer etwas in das jeweilige Feld geschrieben wird. Da der Datentyp eine Ganzzahl ist, wäre das also mindestens eine Null (eine echte, also 0). Um aber zu verhindern dass die immer wieder in ein Feld geschrieben wird, gibt es AUTO_INCREMENT.

Dabei passiert das. MySQL hält nach dem höchsten bereits existierenden Wert dieser Spalte Ausschau, zählt einen drauf und schreibt den Wert dann in das entsprechende Feld des neuen Datensatzes. Und der ist damit eindeutig zu identifizieren. Noch etwas. Darum muss man sich nicht selber kümmern, das wird ganz automatisch gemacht.

Das große Missverständnis

Viele Anfänger stören sich daran, dass beim Löschen von Datensätzen plötzlich Lücken bei der Zahlenreihenfolge entstehen. Das ist aber ganz bewusst so vorgesehen, da ein Neusortieren der Zahlenwerte viel zu aufwendig ist. Besonders, wenn dann noch so genannte Relationen ins Spiel kommen. Darum sehen dann Tabellen auch sehr schnell so aus (auf die Spalte id achten):


+--+-------+----------+--------------+-----+-----------+
|id|vorname|namen     |strasse       |plz  |ort        |
+--+-------+----------+--------------+-----+-----------+
| 1|Claudia|Mustermann|Musterstraße 0|12345|Musterstadt|
| 5|Dieter |Hinz      |Hinzweg 0     |45678|Hinzdorf   |
| 9|Peter  |Kunz      |Kunzpfad 0    |67890|Kunzdorf   |
+--+-------+----------+--------------+-----+-----------+

3. Schlüssel aus mehreren Feldern

Manchmal bietet es sich an, einen eindeutigen Schlüssel aus mehreren Feldern zu bilden, ohne dafür ein eigenes Feld mit den obigen Eigenschaften zu erstellen. Um das mal genauer zu erläutern, greife ich auf folgendes Beispiel zu. Eure Kontodaten! Ich hoffe, die sind noch nicht bei irgendeinem zweifelhaften Dienstleister gelandet ;-).

Damit zum Beispiel eine Überweisung (klingt besser als Abbuchung) auf euer Konto erfolgen kann, müssen zwei Dinge bekannt sein. Die eindeutige Bankleitzahl (BLZ) und die eindeutige Kontonummer. Und zwar in Kombination.

Hä?

Ja, genau. Hä! Ein BLZ ist immer eindeutig. Aber eine Kontonummer? Die nicht. Warum? Wegen der Länge. Meine zum Beispiel besteht aus 10 Ziffern. Das entspricht einem Wert im einstelligen Milliardenbereich. Da es weltweit mit Sicherheit mehr Konten gibt (besonders in der Schweiz), ist das mit der Eindeutigkeit so eine Sache. Aber zusammen mit der BLZ ist das todsicher.


+--------+----------+
|BLZ     |Kto.-Nr.  |
+--------+----------+
|30020012|2407745128|
|30025070|1509457845|
|30040020|2407745128|
+--------+----------+

4. Schlüsseltypen

Unique

Hier hätten wir zunächst mal den "eindeutigen" Schlüssel. Er zeichnet sich dadurch aus, dass die Werte in einer(!) Spalte eindeutig sind. Es ist also nicht möglich darin doppelte Einträge anzulegen. Ein schönes Beispiel ist obige Bankverbindung. Man belegt die BLZ mit einem UNIQUE KEY. So ergibt sich aus der Kombination mit der Kontonummer (Kto-Nr.) ein eindeutiger Schlüssel.

Primary

Der Primärschlüssel unterscheidet sich vom eindeutigen dadurch, dass der KEY einzigartig ist und nicht der Wert. Im Klartext bedeutet es, dass eine Spalte mit UNIQUE KEY einmalig den Wert NULL haben darf, bei PRIMARY KEY dagegen nicht. Der Unterschied ist ehrlich gesagt marginal. Daher werde ich auf die Feinheiten später eingehen. Hier geht es erst mal nur ums Prinzip.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt