Würden Sie jemals eine Beziehung zu einer natürlichen ID erstellen oder eine interne ID verwenden und die natürliche ID Beziehung emulieren? [Duplikat]

StackOverflow https://stackoverflow.com/questions/2095388

Frage

  

Mögliche Duplizieren:
   Surrogate Vs. Natural / Business-Keys

Wenn zwei Tabellen, Ebene 1 [ID, Titel, Nummer] Level2 [ID, FKID ???, Titel, Nummer]

Ein Benutzer des Systems versteht, dass Level2 auf Ebene 1 im Zusammenhang mit basierend auf Ebene 1 der Zahl, meine Frage an Sie ist, würden Sie die Beziehung auf der internen ID und „emulieren“ die Beziehung mit „Number“ basiert machen oder würden Sie das Feld „Nummer“ einfach verwenden und mit ihr geschehen?

War es hilfreich?

Lösung

Die beiden Standards Gründe in Bezug auf Datenbank-ID statt natürlicher ID sind:

  1. Es ist schwer zu garantieren, dass die natürliche ID wird nie unter keinen Umständen
  2. ändern
  3. Im Allgemeinen wird eine natürliche ID nimmt mehr Platz und ist nicht so effizient zu Index wie die Datenbank-ID (wenn auch natürlich nicht hart und schnell - es hängt von den Daten Ihrer natürliche ID darstellen). Durch die Verwendung der Datenbank-ID, können Sie Duplizierung von Geschäftsdaten vermeiden.

Andere Tipps

Diese Diskussion wurde hier zu Tode geprügelt. Nur wenige Menschen verteidigen natürlichen Schlüssel nur und die meisten fördern Ersatzschlüssel Nutzung. Einige sagen, Sie beide haben können, was wahr ist, natürlich (natürliche Schlüssel verwenden, um Geschäftsregeln durchgesetzt werden.)

Ich neige dazu, zweimal zu denken, wenn der natürliche Schlüssel ist wirklich ein Schlüssel (die meiste Zeit ist es nicht.). Wenn ja, dann benutze ich es.

Aber auch hier, die meisten natürlichen Schlüssel in Wirklichkeit sind keine Schlüssel und Duplikate aus verschiedenen Gründen haben. Zum Beispiel in Ländern, in denen nationalen ID-Karten ausgegeben werden, ist es nicht ungewöhnlich, zwei Menschen mit der gleichen ID-Nummer zu finden.

sagte, dass, wenn ich den Ersatzschlüssel Weg gehen würde, würde ich die Tabellen wie diese

einrichten
Level1 [ID, Title, Number] Level2 [ID, FKID references Level1]

Keine Notwendigkeit, zweimal den Titel und die Nummer zu speichern.

Ich denke, das oft bedeckt ist.

Es ist fast immer sicherer eine Identity / Autowert als Fremdschlüssel zu verwenden.

Die meisten natürlichen Schlüssel können (auch wenn in Fehler) dupliziert werden.

In meinem Land haben wir auch Probleme mit Personal-ID-Nummern von Menschen X -).

Wenn die ‚Nummer‘ Spalte verwendet werden kann, die beiden Tabellen auf natürliche Weise zu korrelieren, würde ich die Beziehung nicht erzwingen, basierend auf einer internen (Surrogat) drücken.

Auf der einen Seite die ‚Nummer‘ Spalte könnte gut genug sein, so dass Sie nicht Raum mit der ID-Spalte verschwenden würde. Auf der anderen Seite, wenn die Spalte ‚Nummer‘ nicht die richtigen Eigenschaften (könnte sich ändern, könnte zu indizieren hart, etc), dann könnte das Surrogat-ID eine bessere Option sein.

Es läuft alles auf die Semantik der ‚Nummer‘ Spalte nach unten.

  • Manchmal ist es am besten, eine natürliche zu verwenden Taste , wenn (zB SSN oder Mitarbeiter-ID), die Sie von Schlüssel gesichert Stabilität.

  • Mit Ersatzschlüssel, ein FK ist im wesentlichen die Beziehung von einer System erzeugten #, auf ein anderes System erzeugt #. Im Extremfall, wie eine künstliche Beziehung kann sein vollständig aus Synchronisierung mit der Realität.

  • Andere Plakate haben auf das Chaos kommentiert, was geschieht, wenn ein natürlicher Schlüssel zur Veränderung hat. Sicher, das ist ein Problem. Aber es lohnt sich untersuchen, wie häufig diese Ausnahmen für Sie passieren wird - sollte der Schwanz (Ausnahmen) Wag the Dog (Ihr Design) - in jedem Fall

  • Ich bin darüber nicht fanatisch, aber ich stimme seine unbequem innerhalb der gleichen db unterschiedlichen Konventionen zu haben, mit einer Mischung aus natürlichem und Ersatzschlüssel.

  • Wenn die natürlichen Schlüssel mehr Felder sind , Sagen DateOfBirth + Name + Abteilung (oder so wierd Sache), dann sind Sie besser dran mit Künstliche Schlüssel.

Alle oben genannten Argumente sind in der logischen Ebene eines Datenmodells. Auf der physischen Ebene Ihre Situation, Server und Leistungseinschränkungen Ihre Entscheidungen diktieren. Seine besten nicht vorzeitig zu optimieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top