15 Stimmen

Vor- und Nachteile eines zusammengesetzten Primärschlüssels

Anstelle eines zusammengesetzten Primärschlüssels (diese Tabelle unterhält die Beziehung zwischen den beiden Tabellen, die zwei Entitäten [zwei Tabellen] darstellen), wird vorgeschlagen, dass der Entwurf identity Spalte als Primärschlüssel und die eindeutige Datenbeschränkung wird über zwei Spalten erzwungen, die die Daten aus dem Primärschlüssel der Entitäten darstellen.

Für mich ist eine Identitätsspalte für jede Beziehungstabelle ein Verstoß gegen die Normalisierungsregeln.

  • Was sind die Industriestandards?
  • Welche Überlegungen müssen angestellt werden, bevor eine Entscheidung über die Gestaltung getroffen wird?
  • Welcher Ansatz ist der richtige?

11voto

snowguy Punkte 899

Es gibt viele Tabellen, bei denen man eine Identitätsspalte als Primärschlüssel haben möchte. Im Falle der von Ihnen beschriebenen M:M-Beziehungstabelle ist es jedoch am besten, KEINE neue Identitätsspalte als Primärschlüssel zu verwenden.

Der Link von RThomas in seinem Kommentar liefert hervorragende Gründe, warum es sich empfiehlt, KEINE Identitätsspalte hinzuzufügen. Hier ist diese Verbindung .

Die Nachteile überwiegen in so gut wie jedem Fall, aber da Sie nach den Vor- und Nachteilen gefragt haben, füge ich auch ein paar unwahrscheinliche Vorteile hinzu.

Nachteile

  • Erhöht die Komplexität

  • Kann zu doppelten Beziehungen führen, es sei denn, Sie erzwingen die Eindeutigkeit der Beziehung (was bei einem Primärschlüssel standardmäßig der Fall wäre).

  • Wahrscheinlich langsamer: db muss zwei Indizes statt einem pflegen.

Profis

Alle Profis sind ziemlich skizzenhaft

  • In einer Situation, in der Sie den Primärschlüssel der Beziehungstabelle als Verknüpfung zu einer separaten Tabelle (z. B. einer Prüfungstabelle) verwenden müssen, wäre die Verknüpfung wahrscheinlich schneller. (Wie bereits erwähnt - das Hinzufügen und Entfernen von Datensätzen wird wahrscheinlich langsamer sein. Wenn Ihre Beziehungstabelle eine Beziehung zwischen Tabellen ist, die selbst eindeutige IDs verwenden, ist der Geschwindigkeitszuwachs durch die Verwendung einer Identitätsspalte in der Verknüpfung im Vergleich zu zwei Spalten minimal).

  • Die Anwendung kann der Einfachheit halber davon ausgehen, dass jede Tabelle, mit der sie arbeitet, eine eindeutige ID als Primärschlüssel hat. (Das ist ein schlechtes Design in der Anwendung, aber Sie haben vielleicht keine Kontrolle darüber.) Sie könnten sich ein Szenario vorstellen, in dem es besser ist, etwas zusätzliche Komplexität in die DB einzuführen als die zusätzliche Komplexität in eine solche Anwendung.

2voto

Rishi Punkte 149

Nachteile:

  • Zusammengesetzte Primärschlüssel müssen in alle referenzierenden Tabellen importiert werden. Das bedeutet größere Indizes und mehr zu schreibenden Code (z.B. die Joins, die Aktualisierungen). Wenn Sie systematisch mit zusammengesetzten Primärschlüsseln arbeiten Schlüssel systematisch verwenden, kann das sehr mühsam werden.
  • Sie können einen Teil des Primärschlüssels nicht aktualisieren. Wenn Sie z. B. university_id, student_id als Primärschlüssel in einer Tabelle der Universität Studenten, und ein Student wechselt die Universität, müssen Sie den und den Datensatz neu erstellen.

Vorteile:

  • Zusammengesetzte Primärschlüssel ermöglichen die Durchsetzung einer allgemeinen Art von Einschränkung auf eine leistungsfähige und nahtlose Weise durchzusetzen. Angenommen, Sie haben eine Tabelle UNIVERSITÄT, eine Tabelle STUDENT, eine Tabelle COURSE und eine Tabelle STUDENT_COURSE (welcher Student welchen Kurs besucht). Wenn es eine Einschränkung ist, die Sie immer immer Student der Universität A sein muss, um einen Kurs der Universität Universität A zu belegen, dann wird diese Einschränkung automatisch überprüft, wenn university_id ein Teil der zusammengesetzten Schlüssel von STUDENT und COURSE.

2voto

Ashish Sahu Punkte 177

Sie müssen alle Spalten in jeder Tabelle erstellen, wenn diese als Fremdschlüssel verwendet wird. Dies ist der größte Nachteil.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X