Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum sollten wir eine ID-Spalte in der Benutzertabelle haben?

Selbst wenn Ihr Benutzername eindeutig ist, hat es nur wenige Vorteile, eine zusätzliche ID-Spalte zu haben, anstatt das Varchar als Primärschlüssel zu verwenden.

  • Einige Leute ziehen es vor, eine Integer-Spalte als Primärschlüssel zu verwenden, um als Ersatzschlüssel zu dienen, der sich nie ändern muss, selbst wenn andere Spalten Änderungen unterliegen. Obwohl nichts dagegen spricht, dass auch ein natürlicher Primärschlüssel geändert werden kann, müssten Sie kaskadierende Fremdschlüsselbeschränkungen verwenden, um sicherzustellen, dass die Fremdschlüssel in verwandten Tabellen synchron mit einer solchen Änderung aktualisiert werden.

  • Der Primärschlüssel, der eine 32-Bit-Ganzzahl anstelle eines Varchar ist, kann Platz sparen. Die Wahl zwischen einer int- oder einer varchar-Fremdschlüsselspalte in jeder anderen Tabelle, die auf Ihre Benutzertabelle verweist, kann ein guter Grund sein.

  • Das Einfügen in den Primärschlüsselindex ist etwas effizienter, wenn Sie neue Zeilen am Ende des Index hinzufügen, anstatt sie in die Mitte des Index zu quetschen. Indizes in MySQL-Tabellen sind normalerweise B+Tree-Datenstrukturen, und Sie können diese untersuchen, um zu verstehen, wie sie funktionieren.

  • Einige Anwendungsframeworks bevorzugen die Konvention, dass jede Tabelle in Ihrer Datenbank eine Primärschlüsselspalte namens id hat , anstatt natürliche Schlüssel oder zusammengesetzte Schlüssel zu verwenden. Das Befolgen solcher Konventionen kann bestimmte Programmieraufgaben vereinfachen.

Keines dieser Probleme ist ein Deal-Breaker. Und es gibt auch Vorteile bei der Verwendung natürlicher Schlüssel:

  • Wenn Sie Zeilen häufiger nach Benutzernamen als nach ID suchen, kann es besser sein, den Benutzernamen als Primärschlüssel zu wählen und die indexorganisierte Speicherung von InnoDB zu nutzen. Machen Sie Ihre primäre Lookup-Spalte nach Möglichkeit zum Primärschlüssel, da Primärschlüssel-Lookups in InnoDB effizienter sind (Sie sollten InnoDB in MySQL verwenden).

  • Wie Sie bemerkt haben, scheint es eine Verschwendung von Speicherplatz zu sein, wenn Sie bereits eine eindeutige Einschränkung für den Benutzernamen haben, eine zusätzliche ID-Spalte beizubehalten, die Sie nicht benötigen.

  • Die Verwendung eines natürlichen Schlüssels bedeutet, dass Fremdschlüssel einen für Menschen lesbaren Wert anstelle einer beliebigen ganzzahligen ID enthalten. Dadurch können Abfragen den Fremdschlüsselwert verwenden, ohne für den "echten" Wert wieder mit der übergeordneten Tabelle verknüpft werden zu müssen.

Der Punkt ist, dass es keine Regel gibt, die 100 % der Fälle abdeckt. Ich empfehle oft, dass Sie Ihre Optionen offen halten und natürliche Schlüssel, zusammengesetzte Schlüssel und Ersatzschlüssel sogar in einer einzigen Datenbank verwenden sollten.

Ich behandle einige Probleme mit Ersatzschlüsseln im Kapitel „ID erforderlich“ in meinem Buch SQL Antipatterns:Avoiding die Fallstricke der Datenbankprogrammierung .