Ich weiß, Ersatz-Primärschlüssel werden im Allgemeinen über natürliche Primärschlüssel empfohlen, aber gibt es Argumente für Ersatz-Primärschlüssel, wenn es um Benutzernamen geht?Sind Benutzernamen ein gültiger Kandidat für einen Primärschlüssel?
Antwort
Wenn Sie keine doppelten Benutzernamen erhalten möchten, erstellen Sie eine UNIQUE constraint
.
Was ist, wenn DWong1145
den Benutzernamen ändern möchte? Wollen Sie, dass alle Datenbankbeziehungen UPDATE CASCADE
sind?
Vom Standpunkt des Kunden aus, wetten Sie. Ich möchte nicht, dass mein Benutzername DWong1145 ist.
NO, Sie sollten Benutzernamen nur als eindeutigen Schlüssel/Konstante verwenden. Benutzername kann geändert werden, nur und Beispiel: Es kann eine Marke sein und der Besitzer fordert Sie auf, sie fallen zu lassen.
Klingt ein wenig knapp;) Sie * sind * aber richtig. Ich hasse Systeme, auf denen Sie Ihren Benutzernamen nicht ändern können - aber das OP sagte in den Kommentaren, dass er nicht geändert werden soll, also ... –
Es ist ein guter Kandidat in gewissem Sinne, aber Sie müssen überlegen, ob Sie es wirklich tun wollen. Wenn Sie beispielsweise einen Benutzer mit einem bestimmten Benutzernamen haben, wird der Benutzer "gelöscht" (oder als gelöscht markiert). Es gibt also eigentlich keinen Grund, nicht zuzulassen, dass ein anderer Benutzer mit demselben Benutzernamen erstellt wird, aber es ist bereits "genommen", da es sich um einen Primärschlüssel handelt.
Ein großer Nachteil einer Zeichenfolge als Primärschlüssel, unabhängig davon, ob es ein Benutzername oder etwas anderes ist, ist, dass alle Fremdschlüsselspalten, die auf die Tabelle verweisen, auch Zeichenfolgen sein müssen, was sowohl langsamer ist als auch mehr Speicherplatz verschwendet.
muss es nicht langsamer sein. Eine gute Datenbank-Engine könnte alle Zeichenfolgenwerte vorrashen. Darüber hinaus wird die Verwendung von natürlichen Schlüsseln wahrscheinlich viele Joins in der Anwendung überflüssig machen und somit Abfragen schneller machen. Ich akzeptiere, dass natürliche Schlüssel im Allgemeinen mehr Raum verbrauchen, aber ehrlich, Raum ist billig und reichlich. –
- 1. Ist das ein Kandidat Key?
- 2. Sicherheit über einen Benutzernamen/ein Passwort hinaus?
- 3. Wie fügt man mehrere Zeilen für einen einzelnen Primärschlüssel ein?
- 4. Regex übereinstimmen einen Benutzernamen
- 5. Ist das ein guter Kandidat für eine Fabrik?
- 6. ist dies ein Kandidat für eine sql groupby Abfrage?
- 7. Kann eine virtuelle Funktion ein Kandidat für RVO sein (Rückgabewertoptimierung)?
- 8. was ist ein idealer Kandidat für asp.net mvc
- 9. Einen Benutzernamen generieren
- 10. django Charfield geeignet für einen Primärschlüssel?
- 11. CDN für Angular 2 Release-Kandidat
- 12. Ist * * * * *? ein gültiger Cron-Job?
- 13. Ist das ein gültiger XPath?
- 14. Ist dies ein gültiger JSON?
- 15. Was sind Kandidat Schlüssel, alternative Schlüssel, zusammengesetzte Schlüssel in SQL?
- 16. RegEx für Benutzernamen Validierung
- 17. Ist 'en-EU' ein gültiger Wert für HTML-Attribut 'lang'?
- 18. Sind Primärschlüssel in nicht gruppierten Indizes verfügbar?
- 19. Activiti Kandidat Gruppenzuordnung Implementierung
- 20. Kandidat Schlüssel SQL
- 21. Gültiger Anwendungsfall für django admin?
- 22. ist `date` ein gültiger mysql-Spaltenname?
- 23. Erhalten Sie den vollständigen Benutzernamen einen neuen Benutzernamen
- 24. Update zu eckigen2 Release-Kandidat
- 25. Was ist ein gültiger PostgreSQL-Datenbankname?
- 26. "defau1t:" (NICHT "default:") ist ein gültiger Wert für Label?
- 27. Ist dies ein gültiger Anwendungsfall für das Schließen von JavaScript?
- 28. Verwenden Sie Svnant ohne einen Benutzernamen oder ein Passwort
- 29. PHP Parse-Textblock für Benutzernamen
- 30. MySQL Query: Wie oft hat ein Kandidat eine Wahl gewonnen?
Meine Frage ist im Kontext eines Authentifizierungssystems, das nicht funktioniert Erlaube Benutzernamenänderungen. Ich hätte das erwähnen sollen. –
@Emanuil - um Jeff Goldblum in Jurassic Park zu zitieren, "Das Leben findet einen Weg." Wenn Sie Ihren Benutzernamen eines Tages ändern müssen, bereut Sie vielleicht gerade diesen Moment ... –
"' Information' sollte nicht als Schlüssel verwendet werden; 'data' kann"; "Daten" müssen nicht geändert werden, als ob sie immer von einem Programm verstanden werden sollen. Was passiert, wenn ich SO anrufe und um die Änderung meines Benutzers bit_id_ bitte? Ich kann das nicht, aber ich kann meinen Benutzer _name_ ändern. –