Marko: Tabelle ohne Primary Key

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

  1. 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

  2. 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

  3. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau