So che le chiavi primarie surrogate sono generalmente raccomandate su chiavi primarie naturali, ma ci sono argomenti a favore delle chiavi primarie surrogate quando si tratta di nomi utente?I nomi utente sono candidati validi per una chiave primaria?
risposta
Se non si desidera ottenere nomi utente duplicati, creare uno UNIQUE constraint
.
Cosa succede se DWong1145
vuole cambiare il nome utente? Volete che tutte le relazioni del database siano UPDATE CASCADE
?
Dal punto di vista del cliente, si scommette. Non voglio che il mio nome utente sia DWong1145.
NO, si deve solo uso nome utente come chiave unica/costante. Il nome utente può essere modificato, solo ed esempio: potrebbe essere un marchio e il proprietario ti chiede di lasciarlo.
Suoni un po 'concisi;) Si * sono * giusti però. Odio i sistemi su cui non è possibile modificare il nome utente - tuttavia, l'OP ha detto nei commenti che non vuole che venga modificato, quindi ... –
È un buon candidato in un certo senso, tuttavia bisogna considerare se si vuole davvero farlo. Ad esempio, si dispone di un utente con un determinato nome utente, quindi l'utente viene "eliminato" (o contrassegnato come eliminato). Quindi, non c'è in realtà alcuna ragione per non permettere di creare un altro utente con lo stesso nome utente, ma è già "preso", poiché è una chiave primaria.
Un grande svantaggio di avere una stringa come chiave primaria, indipendentemente dal fatto che si tratti di un nome utente o qualcos'altro, è che tutte le colonne chiave esterne che fanno riferimento alla tabella dovranno essere anche stringhe, che sono entrambe più lente e sprecano più spazio.
non deve essere più lento. un buon motore di database può pre-hash qualsiasi valore di stringa. Inoltre, l'utilizzo di chiavi naturali probabilmente eliminerà la necessità di molti join nell'applicazione, rendendo quindi le query più veloci. Accetto che le chiavi naturali generalmente consumino più spazio, ma onestamente, lo spazio è economico e abbondante. –
- 1. Quali sono i nomi validi/non validi per i tag modulo HTML in jQuery?
- 2. I diritti non sono validi
- 3. Quali caratteri sono validi/non validi in un nome di chiave JSON?
- 4. RedBean richiede una chiave primaria "id"?
- 5. Chiave primaria contro chiave
- 6. NHibernate - Nome Vincolo chiave primaria?
- 7. Convenzione di denominazione e caratteri validi per una chiave Redis
- 8. cassandra, selezionare tramite una chiave non primaria
- 9. Una chiave esterna può agire come una chiave primaria?
- 10. Come misurare i candidati Pimpl?
- 11. I caratteri nulli in java.io.File sono validi per verificare l'esistenza?
- 12. GROUP BY chiave esterna o chiave primaria?
- 13. isinstance senza importare i candidati
- 14. modello utente django e campo chiave primaria personalizzato
- 15. I valori JSON sono validi JSON?
- 16. FluentNHibernate molti-a-uno Riferimenti dove chiave esterna non è quello di chiave primaria e nomi di colonna sono diversi
- 17. quali sono i colori validi per l'estensione colore di Mercurial?
- 18. Quali sono i caratteri validi per i nomi e i valori delle variabili di ambiente di Windows?
- 19. chiave esterna cakephp non la chiave primaria
- 20. tabella non dispone di una chiave primaria
- 21. Mappatura di una chiave primaria come chiave esterna nel database
- 22. SQLite aggiungi chiave primaria
- 23. Attributi che non sono identificatori Python validi
- 24. Quali sono i metodi di riordino validi per Java sincronizzati?
- 25. Quali sono i valori validi per un campo URL django?
- 26. Quali sono i valori validi per http Pragma
- 27. Chiave primaria multicolumn MySQL
- 28. Sospensione senza chiave primaria
- 29. Specifica di una chiave primaria su @ElementCollection
- 30. JPA entità per una tabella senza chiave primaria
La mia domanda è nel contesto di un sistema di autenticazione che non consentire modifiche al nome utente. Avrei dovuto dirlo. –
@Emanuil - per citare Jeff Goldblum in Jurassic Park, "La vita trova un modo". se hai bisogno di cambiare i tuoi nomi utente un giorno, potresti esserti pentito proprio in questo momento ... –
"Informazioni" non dovrebbe essere usato come chiave; "dati" può "; 'data' non ha bisogno di essere cambiato, come se fosse sempre inteso per essere compreso da un programma. Cosa succede se chiamo SO e per chiedere di cambiare il mio utente _id_? Non posso farlo, ma posso cambiare il mio utente _nome_. –