Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bestraft mich SQL Server 2005 für die Verwendung von nvarchar(50) als Primärschlüssel anstelle einer ganzen Zahl?

Sie haben einen der größten „Heiligen Kriege“ des Datenbankdesigns erlebt. Die Debatte, auf die Sie sich beziehen, ist das Argument „Ersatz oder natürlicher Schlüssel“, das so lange tobt, wie es RDBMSs gibt (soweit ich das beurteilen kann).

Die Debatte läuft im Wesentlichen darauf hinaus, ob ein repräsentativer Schlüssel (Ersatz, z. B. eine IDENTITY-Spalte) verwendet werden sollte, anstatt die tatsächlichen Daten zu verwenden, die einen Datensatz eindeutig beschreiben (natürlicher Schlüssel).

Ich werde sagen, dass es keine "richtige" Antwort gibt. Leistungsmessungen sind ein Artefakt der Plattform und sollten durch Experimentieren bewertet werden, aber die Leistung ist wahrscheinlich nicht das Hauptanliegen.

Was ich als Hauptargument für Ersatzschlüssel betrachte, ist die Unveränderlichkeit von Primärschlüsseln. Wenn Sie sich für die Verwendung eines natürlichen Schlüssels entscheiden, geben Sie die Möglichkeit auf, diesen Schlüssel zu ändern, nachdem er festgelegt wurde. Sie geben auch die Möglichkeit auf, dass es irgendwann in der Zukunft nicht mehr eindeutig sein könnte. Aus diesen Gründen verwende ich normalerweise (nicht immer) Ersatzschlüssel für die meisten meiner Tabellen.

Wie ich bereits erwähnt habe, gibt es jedoch eine sehr lange Debatte voller Diskussionen über Indizierungsstrategien und Einhaltung der Normalform, die Sie lesen sollten, wenn Sie dazu neigen.

Ich würde "Ersatzschlüssel vs. natürliche Schlüssel" googeln. Hier sind ein paar Links für den Einstieg:

Systemtechnik und RDBMS

Techrepublic

Tony Rogersons Blog

Hoffe das hilft.