Datenbank: Primaer-Schluessel und Fremd-Schluessel

Primär-Schlüssel und Fremd-Schlüssel



Eine Datenbank besteht aus mehreren Tabellen.
Eine Tabelle besteht aus Zeilen und Spalten.
Die Spalten nennt man auch Attribute oder Felder.
Zeilen nennt man auch Tupel.

Beispiel:

+----------------+-------------+-----------+
| USER_ID | Name | Vorname |
+----------------+-------------+-----------+
| 15 | Maier | Horst |
| 16 | Schmidt | Susanne |
| 18 | Schmidt | Frank |
+----------------+-------------+-----------+

Tabelle mit Mitarbeitern: "tabelle_mitarbeiter"

Das Feld USER_ID ist ein sog. Primär-Schlüssel. Mit Primär-Schlüsseln kann jede Zeile der Tabelle eindeutig indentifiziert werden.

Die Tabelle tabelle_mitarbeiter besteht aus den drei Feldern:

  • USER_ID

  • Name

  • Vorname


Wie kann ich nun auf einzelne Zeilen eindeutig zugreifen? Es könnte mehrere Mitarbeiter mit demselben Familiennamen geben, z.B. es gibt mehr als einen Schmidt in der Tabelle. Der Familienname ist also nicht eindeutig. Selbst der Vorname und Familienname könnte mehrfach vorkommen. Es könnte z.B. mehrere Harald Schmidt in unserere Tabelle tabelle_mitarbeiter geben.

Die Lösung ist einfach eine eindeutige Mitarbeiter Nummer.
Jeder Mitarbeiter bekommt unabhängig von seinem Namen eine eindeutige Nummer. Diese eindeutige Nummer nennt man Primär-Schlüssel. Da diese Nummer der Identifizierung dient, nennt man diese Felder gerne identifier bzw. einfach nur kurz: id.
Ein neuer Mitarbeiter, den wir in die Datenbank aufnehmen, bekommt dann einfach die bisher höchste Nummer 18 + 1, also
USER_ID = 19
Der nächste die USER_ID 20 usw.




+----+---------+------------------------------+
| ID | USER_ID | eMail |
+----+---------+------------------------------+
| 2 | 15 | horst.maier@mustermann-ag.de |
| 3 | 15 | abt-1@mustermann-ag.de |
| 4 | 15 | abt-1@mustermann-ag.de |
| 5 | 15 | abt-1@mustermann-ag.de |
+----+---------+------------------------------+

Tabelle mit Mails: "tabelle_mails"

(ID ist Primär-Schlüssel, USER_ID ist Fremd-Schlüssel)

In der zweiten Tabelle, der tabelle_mail ist das Feld ID der Primär-Schlüssel (ähnlich einer eindeutigen Zeilen-Nummer). Das Feld USER_ID ist in der Tabelle tabelle_mail ein sog. Fremd-Schlüssel. Mit der USER_ID bekommt man inder Tabelle tabelle_mitarbeiter den Namen und Vornamen des Mitarbeiters heraus.

Da man sich bei jeder neuen Tabelle auch einen neuen Primär-Schlüssel einfallen lassen muss, hat man das automatisiert: Die meisten Datenbanken, z.B. MySQL bieten automatisch fortlaufende Nummern sog. Autowert oder auch Sequenznummer (auch als Surrogatschlüssel bezeichnet von surrogatum = der Ersatz, vom lateinischen Verb surrogare = sub-rogare = jemanden anstelle eines anderen auswählen).

Der SQL Befehl für Autowerte lautet: AUTO_INCREMENT

(von inkrementieren, also hochzählen, im Gegensatz zu dekrementieren, also herunterzählen)

Beispiele für Surrogate:

- Kornkaffee, Malzkaffee, Getreidekaffee oder Zichorienkaffee als Ersatz für echten Bohnen-Kaffee (auch Muckefuck genannt, im französischen: "l'ersatz")
- Curry-Wurst als Ersatz für Wurst mit Senf (Senf war Mangelware im Krieg, Curry-Pulver war noch verfügbar)

Beispiele für Primär-Schlüssel:

- Domainnamen sind Primär-Schlüssel für Webseiten im Internet wie www.linkmatrix.de. Primär-Schlüssel dürfen nicht doppelt vergeben werden, sondern müssen immer eindeutig sein. Damit zwei Webseiten nicht den gleichen Domainnamen (Primär-Schlüssel) bekommen, überwacht die Namensvergabe in Deutschland (also alle ".de" Domains) die www.DENIC.de. Alle Provider, die de-Domains vergeben, arbeiten mit der DENIC zusammen, um die Eindeutigkeit zu gewährleisten.

In der Tabelle tabelle_mails ist das erste Feld "ID" der Primär-Schlüssel (ein Surrogat-Schlüssel der einfach bei jedem neuem Datensatz um eins hochgezählt wird, ein neuer Datensatz bekäme dann die neue ID 6). Das zweite Feld, "USER_ID" ist ein Fremd-Schlüssel innerhalb der Tabelle tabelle_mails. Er dient zum Zugriff in die Tabelle tabelle_mitarbeiter auf die jeweiligen Namen der Mitarbeiter. Das Feld mit dem Bezeichner "USER_ID" gibt es also zweimal, einmal in der Tabelle tabelle_mitarbeiter (hier ist es der Primär-Schlüssel) und in der Tabelle tabelle_mails (hier ist es ein Fremd-Schlüssel).

Der SQL-Befehl um unsere obige Tabelle "tabelle_mitarbeiter" anzulegen lautet wie folgt:

SQL-Befehl:

CREATE TABLE `tabelle_mitarbeiter`
(
`USER_ID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR( 25 ) NOT NULL ,
`Vorname` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( `USER_ID` )
);

Also eine Tabelle mit dem Namen "tabelle_mitarbeiter" mit drei Feldern mit den Bezeichnern

  • USER_ID

  • Name und

  • Vorname.


Danach folgt der jeweilige Datentyp des Feldes.

  • INT steht für INTEGER also Ganzzahl

  • VARCHAR für variable Character also Zeichenfolgen mit maximal 25 Buchstaben (auch oft als Strings bezeichnet)

  • NOT NULL heisst es muss in das Feld ein Eintrag erfolgen, das Feld darf nicht leer gelassen werden. Ein Eintrag ohne Familienname macht keinen Sinn und somit können im obigen Tabellen-Design Leereinträge ausgeschlossen werden. Bei Versuchen, leere Familiennamen einzutragen erfolgt eine Fehlermeldung und der neue Datensatz wird nicht eingetragen

  • PRIMARY KEY ist der Primär-Schlüssel, in der Tabellel tabelle_mitarbeiter ist der Primär-Schlüssel das Feld USER_ID


Siehe auch:
de.wikipedia.org/wiki/SQL
de.wikipedia.org/wiki/Surrogatschl%C3%BCssel
www.hosting-agency.de/214.0.html

SPEED (CACHED): 29.756 ms - 2017-10-24 03:58:02