Tabelle ohne Primary Key
Marko
- datenbank
Hallo zusammen
Ich habe mal gehört, dass eine Tabelle ohne Primary Key etwas sei, das man vermeiden sollte. Wie ist das, ist es 'schlecht' wenn man keinen Primary Key setzt, wenn man keinen braucht? Und wenn ja, wieso genau?
Oder sollte man dann einen über alle Felder legen, denn es ist in meinem Beispiel schon so, dass es nicht zwei exakt gleiche Zeilen haben kann.
Gruss, Marko
Wie ist das, ist es 'schlecht' wenn man keinen Primary Key setzt, wenn man keinen braucht? Und wenn ja, wieso genau?
Stell dir folgendes vor:
Du hast eine Datenbank mit den Spalten Username und Passwort
Wenn du kein Primary Key (oder Unique) auf Username setzt, heisst das du kannst zweimal den gleichen Benutzernamen mit verschiedenen Passwörtern eintragen. Das wäre sicherlich ein Problem.
Andererseits kannst du natürlich solche Dinge außerhalb der Datenbank verhindern.
Es ist trotzdem sinnvoll bei der Entwicklung des Datenbankmodells zu überlegen welche Einschränkungen es gibt und die Bordmittel der Datenbank zu Nutzen um die Konsistenz zu garantieren. Falls es Probleme gibt bekommst du so auch leichter eine Idee woher das kommt (im obigen Beispiel würde die Datenbank das Anlegen des doppelten Benutzers zurückweisen und du hättest eine aussagekräftige Fehlermeldung)
Gruß,
Volker
Ergänzung:
Oder sollte man dann einen über alle Felder legen, denn es ist in meinem Beispiel schon so, dass es nicht zwei exakt gleiche Zeilen haben kann.
Besser ist das.
Ich glaube wenn du nichts angibst, verwendet die DB einen internen Schlüssel und es kann durchaus sein, dass du dann identische Zeilen einfügen kannst.
Gruß,
Volker
Hello,
das sind zwei verschiedene Schuhe.
Der Primary Key identifiziert den Datensatz und sollte frei von (cveränderlichen) Datenbezügen sein.
Man benötigt ihn, um zwischen wei Tabellen logische Verknüpfungen herstellen zu können.
Ein Primary Key (Eigenschlüssel, Hauptindex) korrespondiert dabei mit einem Foreign Key (Fremdschlüssel, Nebenindex)
Beispiel:
Tabelle USER Tabelle LOGIN
============ ================
ID_USER -------+ ID_LOGIN
------- | --------
VORNAME +------> ID_USER
NACHNAME LOGINNAME -- UNIQUE INDEX aus beiden nochmals
STRASSE PASSWORD -- einen UNIQUE
PLZ LASTLOGIN
ORT
TEL
Über den Fremdschlüssel LOGIN.ID_USER wird eine Inklusion zur Tabelle USER hergestellt.
Das bedeutet, dass ein User durchaus mehrere Loginnamen haben kann und auch mehrere Passworte.
Wenn der User nun sein Passort ändert, bleibt er doch immer noch derselbe User.
Er (sie) kann auch seinen (ihren) Namen ändern. Darum behält sie trotzdem dasselbe Login.
Ich hoffe, der Unterschied zwischen datenbasierendem Kombinationsschlüssel
(Loginname - Passwort darf nur einmal vorhanden sein!) und logischen Schlüsseln ist klar geworden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom