Ich sehe keine Antwort, die auf den wirklich grundlegenden Punkt hinweist (was ich als solchen betrachte) - nämlich, dass ein Primärschlüssel garantiert, dass Sie nicht zwei Einträge in der Tabelle für dieselbe reale Entität erhalten (as in der Datenbank modelliert). Diese Beobachtung hilft festzustellen, was gute und was schlechte Entscheidungen für den Primärschlüssel sind.
Beispielsweise könnte in einer Tabelle mit (US-) Statusnamen und -codes entweder der Name oder der Code der Primärschlüssel sein - sie bilden zwei verschiedene Kandidatenschlüssel, und einer von ihnen (normalerweise der kürzere - der Code) wird als der ausgewählt Primärschlüssel. In der Theorie der funktionalen Abhängigkeiten (und der Verknüpfungsabhängigkeiten - 1NF bis 5NF - sind die Kandidatenschlüssel entscheidend und nicht ein Primärschlüssel.
Als Gegenbeispiel treffen menschliche Namen im Allgemeinen eine schlechte Wahl für den Primärschlüssel. Es gibt viele Leute, die den Namen "John Smith" oder ähnliche Namen tragen; Selbst wenn man den zweiten Vornamen berücksichtigt (denken Sie daran: Nicht jeder hat einen - zum Beispiel nicht ich), gibt es viel Spielraum für Vervielfältigungen. Folglich verwenden Personen keine Namen als Primärschlüssel. Sie erfinden künstliche Schlüssel wie die Sozialversicherungsnummer (SSN) oder die Mitarbeiternummer und verwenden sie zur Bezeichnung der Person.
Ein idealer Primärschlüssel ist kurz, einzigartig, einprägsam und natürlich. Von diesen Merkmalen ist die Eindeutigkeit obligatorisch; Der Rest muss sich angesichts der Einschränkungen der Daten der realen Welt biegen.
Wenn Sie den Primärschlüssel einer bestimmten Tabelle bestimmen möchten, müssen Sie sich daher ansehen, was diese Tabelle darstellt. Welche Menge oder Sätze von Spaltenwerten in der Tabelle identifiziert jede Zeile in der Tabelle eindeutig? Das sind die Kandidatenschlüssel. Wenn jeder Kandidatenschlüssel aus 4 oder 5 Spalten besteht, können Sie entscheiden, dass diese zu ungeschickt sind, um einen guten Primärschlüssel zu erstellen (hauptsächlich aus Gründen der Kürze). Unter diesen Umständen können Sie einen Ersatzschlüssel einführen - eine künstlich generierte Zahl. Sehr oft (aber nicht immer) reicht eine einfache 32-Bit-Ganzzahl für den Ersatzschlüssel aus. Anschließend legen Sie diesen Ersatzschlüssel als Primärschlüssel fest.
Sie müssen jedoch weiterhin sicherstellen, dass die anderen Kandidatenschlüssel (denn der Ersatzschlüssel ist auch ein Kandidatenschlüssel sowie der ausgewählte Primärschlüssel) alle als eindeutige Kennung beibehalten werden - normalerweise, indem Sie diesen Spaltengruppen eine eindeutige Einschränkung auferlegen.
Manchmal fällt es den Leuten schwer zu identifizieren, was eine Zeile einzigartig macht, aber es sollte etwas zu tun geben, weil das einfache Wiederholen einer Information sie nicht mehr wahr macht. Und wenn Sie nicht aufpassen und zwei (oder mehr) Zeilen erhalten, die angeblich dieselben Informationen speichern, und Sie dann die Informationen aktualisieren müssen, besteht die Gefahr (insbesondere wenn Sie Cursor verwenden), dass Sie nur eine Zeile aktualisieren anstatt jeder Zeile, daher sind die Zeilen nicht synchron und niemand weiß, welche Zeile die richtigen Informationen enthält.
Dies ist in mancher Hinsicht eine ziemlich harte Sichtweise.
Ich habe kein besonderes Problem mit der Verwendung einer GUID, wenn sie benötigt werden, aber sie sind in der Regel groß (wie in 16-64 Bytes) und werden zu oft verwendet. Sehr oft würde ein perfekter 4-Byte-Wert ausreichen. Die Verwendung einer GUID, bei der ein 4-Byte-Wert ausreichen würde, verschwendet Speicherplatz und verlangsamt sogar den indizierten Zugriff auf die Daten, da weniger Werte pro Indexseite vorhanden sind, sodass der Index tiefer ist und mehr Seiten gelesen werden müssen, um zum zu gelangen Information.