Surrogat-vs natürlicher Schlüssel: harte zahlen auf performance-Unterschiede?

Gibt es eine gesunde Debatte gibt zwischen Surrogat-und untertasten:

SO Post 1

ALSO Post 2

Meiner Meinung nach, das scheint zu sein, im Einklang mit der Mehrheit (es ist eine knappe Mehrheit), ist, dass Sie sollten die Verwendung von Ersatzschlüsseln, es sei denn, ein natürlicher Schlüssel ist völlig klar, und garantiert nicht ändern. Dann sollten Sie Eindeutigkeit auf die natürlichen Schlüssel. Was bedeutet, dass Ersatzschlüssel fast alle der Zeit.

Beispiel der beiden Ansätze, beginnend mit einer Tabelle Firma:

1: Ersatzschlüssel: Tabelle hat ein Feld ID, das ist die PK (und eine Identität). Die Namen der Unternehmen sind erforderlich, um eindeutig zu sein, durch den Staat, so gibt es eine unique-Einschränkung vorhanden.

2: Natürlicher Schlüssel: Tabelle verwendet CompanyName und Staat als die PK -- erfüllt sowohl die PK und Einzigartigkeit.

Lassen Sie uns sagen, dass die Firma PK verwendet wird, in 10 anderen Tabellen. Meine Hypothese, mit keine zahlen, um es wieder auf, ist, dass der Ersatzschlüssel Ansatz wäre viel schneller hier.

Das einzige überzeugende argument, das ich erlebt habe, natürlicher Schlüssel ist für eine m: N-Tabelle, die verwendet die beiden Fremdschlüssel als Natürliche Schlüssel. Ich denke in diesem Fall macht es Sinn. Aber Sie können in Schwierigkeiten geraten, wenn Sie benötigen, zu überarbeiten; das ist außerhalb des Rahmens dieser post denke ich.

Hat jemand gesehen ein Artikel, der vergleicht performance-Unterschiede auf eine Reihe von Tabellen, die Verwendung Ersatzschlüssel vs. den gleichen Satz von Tabellen mit Natürliche Schlüssel? Auf der Suche rund um auf SO und Google hat nicht nachgegeben wird, nichts Wert, nur eine Menge von theorycrafting.


Wichtiges Update: ich habe begonnen, eine Satz von test-Tabellen, die diese Frage beantworten. Es sieht wie folgt aus:

  • PartNatural - Teile-Tabelle, die verwendet
    die eindeutige Bauteilnummer als PK
  • PartSurrogate - Teile-Tabelle,
    verwendet wird eine ID (int, Identität) als PK und
    hat einen eindeutigen index auf die Vergleichsnummer
  • Pflanze - ID (int, Identität) als PK
  • Ingenieur - ID (int, Identität) als PK

Jedem Teil verbunden ist, auf eine pflanze und jeder Instanz, in der ein Teil an eine Anlage angeschlossen ist ein Ingenieur. Wenn jemand ein Problem mit diesem testbed, jetzt ist die Zeit.

  • Es hängt wahrscheinlich von der Daten-Typ des Ersatz-und untertasten, und wie Sie sind indiziert, etc., etc.
  • Gegeben, die Menschen benutzen, Ersatzschlüssel, weil Sie logisch notwendig, die performance-Unterschiede zwischen damals und natürlichen Schlüssel (sollten solche Unterschiede bestehen) nust unerheblich sein - Sie kann nicht ersetzen eine mit dem anderen.
  • Ich denke, dass Natürliche Schlüssel in der Regel mit varchar-Felder und Ersatzschlüssel sind fast immer mit int-Werten. Du hast Recht, aber ich hoffe, dass alles, was mythische Studie/whitepaper, das ich Suche, werde diese Adresse.
  • Natürliche Schlüssel beinhalten, was natürlich ist. Surrogat-Schlüssel für ints, bigints, GUID, etc.
  • Ich bin mir nicht sicher, ich Stimme mit den logisch notwendigen Teil. Von dem, was ich gelesen habe, nutzen viele Menschen Ersatzschlüssel, auch wenn eine Natürliche Schlüssel sein könnte zur Verfügung, für eine Vielzahl von Gründen.
  • Nicht zu Beginn dieser Debatte hier, sondern Surrogat-Schlüssel verwendet werden soll, ob es ein natürlicher Schlüssel ist oder nicht (und es fast immer ist). Und beachten Sie meine Verwendung des Ausdrucks "Gegeben, dass..."
  • Ich bin damit einverstanden. Und ich werde zu aktualisieren, die OP zu Adresse, feinen Unterschied. Ich bin der Hoffnung, um zu sehen, einige echte zahlen unterstützen meine Meinung.
  • Ersatzschlüssel sind NICHT "logisch notwendig". wie wäre es mit einer log-Tabelle, die Datum und Zeit (dargestellt mit ausreichender Genauigkeit) ist eine vollkommen akzeptable Natürliche Schlüssel.

InformationsquelleAutor jcollum | 2009-08-04
Schreibe einen Kommentar