Sto frequentando un corso chiamato "sistemi di database" e per il nostro progetto di classe devo progettare un sito web.Perché utilizzare una chiave primaria a incremento automatico quando esistono altri campi univoci?
Ecco un esempio di una tabella che ho creato:
CREATE TABLE users
(
uid INT NOT NULL AUTO_INCREMENT,
username VARCHAR(60),
passhash VARCHAR(255),
email VARCHAR(60),
rdate DATE,
PRIMARY KEY(uid)
);
Il professore mi ha detto "uid" (user id) è stato completamente inutile e non necessaria e ho dovuto usare il nome utente come chiave primaria, dal momento che nessun due utenti possono avere lo stesso nome utente.
Gli ho detto che per me era conveniente usare un id utente perché quando chiamo qualcosa come domain.com/viewuser?id=5 ho semplicemente controllato il parametro con: is_numeric($_GET['id'])
... inutile dire che non era convinto.
Dal momento che ho visto user_id e altri attributi simili (thread_id, comment_id, tra gli altri) su un sacco di tutorial e guardando lo schema del database del software popolare (ad esempio vbulletin) ci devono essere molti altri motivi (più forti) .
Quindi la mia domanda è: come giustificheresti la necessità di un id incrementale non nullo come chiave primaria rispetto a un altro attributo come il nome utente?
Joe Celko ha sempre emesso la stessa cosa, "Dovresti usare PK significativi quando possibile". – Brettski
il tuo professore è troppo letto nel libro di fumetti che legge PHP/MySQL? – klox
Il tuo professore sembra un purista. Relativamente, sì - se i nomi utente saranno unici, gli ID utente sono dati duplicati di un ordinamento, poiché il nome utente e l'ID utente hanno lo stesso significato. Ma nel mondo reale, sono utili per la maggior parte se non per tutti i motivi menzionati di seguito. – cHao