Weder SQL noch das relationale Modell werden durch Fremdschlüssel gestört, die auf einen natürlichen Schlüssel verweisen. Tatsächlich verbessert das Referenzieren von natürlichen Schlüsseln häufig die Leistung erheblich. Sie wären überrascht, wie oft die von Ihnen benötigten Informationen vollständig in einem natürlichen Schlüssel enthalten sind. Wenn Sie auf diesen Schlüssel verweisen, wird ein Join für eine breitere Tabelle getauscht (und folglich die Anzahl der Zeilen, die Sie auf einer Seite speichern können, verringert).
Per Definition sind die benötigten Informationen immer vollständig im natürlichen Schlüssel jeder Nachschlagetabelle enthalten. (Der Begriff Nachschlagetabelle ist informell. Im relationalen Modell sind alle Tabellen nur Tabellen. Eine Tabelle mit US-Postleitzahlen enthält möglicherweise folgende Zeilen: {AK, Alaska}, {AL, Alabama}, {AZ, Arizona} usw. Die meisten Leute würden das eine Nachschlagetabelle nennen.)
Auf großen Systemen ist es nicht ungewöhnlich, Tabellen mit mehr als einem Kandidatenschlüssel zu finden. Es ist auch nicht ungewöhnlich, dass Tabellen, die einen Teil des Unternehmens bedienen, auf einen Kandidatenschlüssel verweisen, und Tabellen, die einen anderen Teil des Unternehmens bedienen, auf einen anderen Kandidatenschlüssel verweisen. Dies ist eine der Stärken des relationalen Modells, und es ist Teil des relationalen Modells, das SQL ziemlich gut unterstützt.
Sie werden auf zwei Probleme stoßen, wenn Sie auf natürliche Schlüssel in Tabellen verweisen, die auch einen Ersatzschlüssel enthalten.
Zuerst wirst du die Leute überraschen. Obwohl ich mich normalerweise stark für das Prinzip der geringsten Überraschung engagiere , ist dies eine Situation, in der es mir nichts ausmacht, Menschen zu überraschen. Wenn das Problem darin besteht, dass Entwickler von der logischen Verwendung von Fremdschlüsseln überrascht sind, lautet die Lösung "Bildung" und nicht "Neugestaltung".
Zweitens orientieren sich ORMs im Allgemeinen nicht am relationalen Modell, und manchmal verkörpern sie Annahmen, die nicht die besten Praktiken widerspiegeln. (Tatsächlich scheinen sie oft so gestaltet zu sein, dass sie nie von einem Datenbankexperten eingegeben wurden.) Die Anforderung einer ID-Nummer in jeder Tabelle ist eine dieser Annahmen. Ein anderer geht davon aus, dass die ORM-Anwendung die Datenbank "besitzt". (Es ist also kostenlos, Tabellen und Spalten zu erstellen, zu löschen und umzubenennen.)
Ich habe an einem Datenbanksystem gearbeitet, das über einen Zeitraum von 30 Jahren Daten für Hunderte von Anwendungsprogrammen lieferte, die in mindestens zwei Dutzend Sprachen geschrieben waren. Diese Datenbank gehört dem Unternehmen, nicht einem ORM.
Eine Gabel, die Änderungen einführt, sollte ein Show-Stopper sein.
In einem Unternehmen, in dem ich früher gearbeitet habe, habe ich die Leistung sowohl mit natürlichen Schlüsseln als auch mit Ersatzschlüsseln gemessen. Es gibt einen Wendepunkt, an dem Ersatzschlüssel anfangen, natürliche Schlüssel zu übertreffen. (Unter der Annahme, dass keine zusätzlichen Anstrengungen unternommen werden, um die Leistung natürlicher Schlüssel hoch zu halten, wie Partitionierung, Teilindizes, funktionsbasierte Indizes, zusätzliche Tabellenbereiche, Verwendung von Solid-State-Datenträgern usw.) Nach meinen Schätzungen für dieses Unternehmen werden sie diesen Wendepunkt in erreichen um 2045. In der Zwischenzeit erzielen sie mit natürlichen Schlüsseln eine bessere Leistung.
Andere relevante Antworten: Im Datenbankschema Verwirrend