Ich möchte wissen, warum ich einen int als Primärschlüssel einer Nachschlagetabelle verwenden sollte, anstatt nur den Nachschlagewert als Primärschlüssel zu verwenden (was in den meisten Fällen eine Zeichenfolge wäre).
Ich verstehe, dass die Verwendung eines nvarchar (50) anstelle eines int viel mehr Platz beansprucht, wenn es mit einer Tabelle mit vielen Datensätzen verknüpft ist.
Wenn Sie den Nachschlagewert jedoch direkt verwenden, sparen Sie sich im Grunde genommen das Ausführen eines Joins. Ich kann mir vorstellen, dass dies eine große Einsparung wäre, wenn der Join immer benötigt wird (wir arbeiten an einer Web-App, das zählt also ziemlich viel).
Was sind die Vorteile der Verwendung eines int-Primärschlüssels (speziell für eine Nachschlagetabelle), außer dass dies "der Standard" ist?
quelle
Antworten:
Die Antwort auf Ihre Frage ist logisch und nicht physisch. Der Wert, den Sie nachschlagen, kann sich aus geschäftlichen Gründen ändern. Was passiert beispielsweise, wenn Sie Ihre Kunden nach E-Mail-Adresse indizieren, wenn sich eine E-Mail-Adresse ändert? Dies gilt natürlich nicht für alle Ihre Nachschlagetabellen, aber der Vorteil der gleichen Vorgehensweise in der gesamten Anwendung besteht darin, dass der Code einfacher wird. Wenn intern alles Integer → Integer-Relationen ist, sind Sie abgesichert.
Lies Sandy einfach deinen Kommentar vor - in diesem Fall ist das, was du wirklich willst, eine Check-Einschränkung , keine Fremdschlüssel- / Nachschlagetabelle, zB:
Führen Sie dies aus und Sie erhalten:
Dies ist eine effiziente und leistungsstarke Methode, aber der Nachteil ist natürlich, dass das Hinzufügen einer neuen Version eine Codeänderung bedeutet. Ich würde davon abraten, dies in der Anwendung zu tun - da Sie dies dann in jeder App tun müssen, die eine Verbindung zu dieser Datenbank herstellt, ist dies das sauberste Design, da es nur einen einzigen Codepfad für die Validierung gibt.
quelle
"Nachschlagewert direkt verwenden" - ist etwas widersprüchlich zum eigentlichen Zweck der Nachschlagetabelle. Warum halten Sie so einen Tisch? Wenn es kein Nachschlagen ist.
Vielleicht habe ich deine Frage falsch verstanden. Hier ist eine Nachschlagetabellendefinition von msdn
Können Sie den Zweck Ihrer Nachschlagetabelle erläutern? Wird es verwendet, um einige statische Daten wie die folgenden zu speichern, und diese Datensätze sind keine Eingabe anderer Tabellendatensätze?
Flavor Tisch
Wenn oben Ihre Situation ist, würde ich empfehlen, keine Nachschlagetabelle zu verwenden. Diese Listenwerte werden wahrscheinlich in Ihrer Webanwendung fest codiert. Auf diese Weise können Sie unnötige Datenbankabfragen vermeiden.
quelle
Da Sie Ihre Frage mit "speziell für eine Nachschlagetabelle" qualifiziert haben, wird die Antwort wahrscheinlich auf "platzsparend" vereinfacht.
Ich denke, wenn Sie dieses Qualifikationsmerkmal entfernen, lautet Ihre Frage "Warum Ersatzschlüssel anstelle von natürlichen Schlüsseln verwenden?". Ich habe Folgendes zur Unterstützung von Ersatzschlüsseln geschrieben:
"Die Migration eines ganzzahligen Werts anstelle eines breiteren zusammengesetzten Schlüssels bietet zahlreiche Vorteile. Sie bietet eine gute Konsistenz im gesamten physischen Modell und spart im Vergleich zur Migration von zusammengesetzten Schlüsseln mehr Platz als Kosten und verringert die E / A-Kosten. "Normalisiertes Modell. Darüber hinaus vereinfachen sie das Verständnis eines Modells und der Abfrageverknüpfungen."
Dies ist größtenteils der Grund, warum es "zum Standard geworden ist". Das unglückliche Nebenprodukt ist, dass die Leute einen Ersatzschlüssel aufsetzen und nicht darüber nachdenken, was die Kandidatenschlüssel sind ... Aber jetzt kommen wir außerhalb Ihrer Frage :)
quelle
Einer der Gründe, die ich immer benutze, ist, dass es sehr einfach ist, den Wert in der Nachschlagetabelle zu ändern, wenn jemand einen Wert in der Nachschlagetabelle falsch geschrieben hat, z. B. Oraneg anstelle von Orange.
Für die Nachschlagetabelle mit einem Nummernprimärschlüssel muss nur der Wert in der Nachschlagetabelle geändert werden.
Die Nachschlagetabelle, die die Werte als Primärschlüssel verwendet, muss in der Nachschlagetabelle und in jedem Datensatz in der Haupttabelle, in der sie verwendet wurde, geändert werden.
quelle
Wenn Sie eine ID definieren, können Sie auch die Eindeutigkeit garantieren. Wenn Sie jedoch beispielsweise E-Mails als eindeutige Kennung verwenden, verlagern Sie die Verantwortung für die Eindeutigkeit auf die nicht vertrauenswürdige dritte Seite.
quelle