Questo è un esempio di tabella per la gestione utenti che uso nelle mie applicazioni
codice:
CREATE TABLE utenti (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
email VARCHAR(60) UNIQUE NOT NULL,
username VARCHAR(30) UNIQUE NOT NULL,
password VARCHAR(32) NOT NULL,
nome VARCHAR(100) NOT NULL,
cognome VARCHAR(100) NOT NULL,
indirizzo VARCHAR(150) NOT NULL,
//e così via tutti i dati che vuoi che l'utente dichiari
conferma SET('0','1') NOT NULL,
regdate VARCHAR(11) NOT NULL,
uid VARCHAR(32) NOT NULL,
permesso INT DEFAULT 2 NOT NULL,
PRIMARY KEY(id)
);
"id" è banalmente un numero incrementale da usare come chiave primaria
"conferma" mi dice se un utente ha confermato tramite email la registrazione, 0 no, 1 si
"regdate" è la data di registrazione, oltre all'informazione che si può volere per sapere quando un utente si è registrato, io la uso anche per controllare se un utente si è registrato, ma dopo tot tempo non ha confermato la registrazione, se è passato questo tot tempo lo elimino (vuol dire che ha deciso di non completare la registrazione, oppure era un bot che cercava di registrarsi automaticamente)
"uid" è un user id di 32 caratteri che genero a random per ogni utente che si registra, questo codice lo mando all'utente in un'email appeso ad un link come parametro in modo che cliccando sul link arrivi sullo script di conferma il quale legge l'uid come parametro GET, fa una query sul db e vede se tale uid è presente, in caso affermativo modifica il campo "conferma" da 0 a 1 e l'utente è confermato.
"permesso" questo lo uso per distinguere i vari livelli di utenti, superadmin, admin, mod, utente normale... a seconda delle esigenze dell'applicazione.
Le password le salvo nel db codificate con md5 o sha1.