Tabelle mit nur einer Spalte oder einen numerischen Primärschlüssel hinzufügen?

8

Nehmen wir an, ich brauche eine einfache Tabelle mit Konto-ID und keine weiteren Informationen. Es gibt zwei Möglichkeiten, dies zu tun:

%Vor%

Oder um einen numerischen Primärschlüssel hinzuzufügen:

%Vor%

Was sind die Vorteile / Nachteile beider Ansätze und welche würden Sie wählen und warum?

Welche Auswirkungen hat die erste Lösung auf die Wartbarkeit (was ist, wenn wir die ID für eine einzelne Zeile ändern müssen) und für die Leistung?

    
Richard Knop 07.12.2012, 10:56
quelle

3 Antworten

9

Dies läuft auf den Schlüssel Ersatzschlüssel gegenüber natürlichem Schlüssel in der Datenbankwelt hinaus. Siehe zum Beispiel hier , hier und hier für Texte zum Thema. Ich denke, dass beide Optionen gültig sind, aber in diesem Fall würde ich AccountID als einen natürlichen Schlüssel wählen (vorausgesetzt, dass AccountID für jedes Konto einzigartig ist, nicht null ist und keinen Änderungen unterliegt), weil es bedeutet weniger Overhead. In diesem Fall sehe ich keinen Mehrwert für einen Ersatzschlüssel.

Natürliche Schlüssel:

  • hat eine Bedeutung für den Benutzer
  • sind bei Bedarf schwer zu ändern
  • kann dazu führen, dass weniger Joins in Abfragen benötigt werden

Ersatzschlüssel:

  • bedeutet nichts für den Benutzer
  • unterliegt keinen Änderungen
  • kann dazu führen, dass mehr Joins in Abfragen benötigt werden
  • kann zusätzliche oder größere Indizes erfordern
Josien 07.12.2012, 11:28
quelle
2

Der Unterschied besteht darin, dass die PRIMARY KEY-Einschränkung eine NOT NULL CONSTRAINT impliziert / erzwingt. Im ersten Beispiel wird varchar(255) effektiv in varchar(255) NOT NULL

umgewandelt %Vor%

Ergebnis:

%Vor%

Die erste Einfügung schlägt wegen der PK-Bedingung (- & gt; & gt; NOT NULL) fehl; der zweite gelingt.

    
wildplasser 07.12.2012 11:15
quelle
1

Wenn der Inhalt dieser Spalte eindeutig ist (was bei IDs der Fall zu sein scheint), dann machen Sie weiter und machen Sie ihn zum Primärschlüssel. andernfalls erstellen Sie eine weitere numerische Spalte als Primärschlüssel.

Grüße,

    
CME64 07.12.2012 11:00
quelle