Cercherò di rispondere alla tua domanda originale. Avere tutto in una tabella va bene a meno che non si abbiano solo un sacco di informazioni personali da raccogliere. In tal caso potrebbe essere sensato dividerlo. Tale decisione dovrebbe essere presa in base alla quantità di informazioni personali con cui si ha a che fare e alla frequenza con cui è necessario accedervi.
direi che la maggior parte del tempo mi piacerebbe fare qualcosa di simile in una singola tabella:
UserID, FirstName, LastName, Email, Password, TempPassword
Ma ... se si sta raccogliendo molto di più. Supponiamo che tu stia raccogliendo telefono, fax, data di nascita, biografia, ecc. Ecc. E se la maggior parte di queste informazioni è raramente accessibile, probabilmente la inserirò nella sua tabella e la collegherò con una relazione uno a uno. Dopo tutto, meno colonne hai su un tavolo, più veloce sarà la tua query su quel tavolo. E a volte ha senso semplificare le tabelle a cui si accede maggiormente. C'è un riscontro di prestazioni con il JOIN anche se è necessario accedere a tali informazioni personali, quindi è qualcosa che devi considerare.
EDIT - Sai cosa, ho solo pensato a qualcosa. Se si crea un indice sul nome utente o sul campo di posta elettronica (a seconda di quale si preferisce), eliminerà quasi completamente l'inconveniente di prestazioni nella creazione di così tante colonne in una tabella utente. Dico questo perché ogni volta che accedi alla clausola WHERE sarà estremamente veloce trovare il nome utente se ha un indice e non importa se hai 100 colonne in quella tabella. Quindi ho cambiato la mia opinione. Metterei tutto in un solo tavolo.;)
In entrambi i casi, poiché la sicurezza sembra essere un argomento popolare, la password dovrebbe essere un valore hash. Suggerirei SHA1 (o SHA256 se ne sei veramente preoccupato). TempPassword dovrebbe anche usare un hash ed è solo lì per la funzionalità della password dimenticata. Ovviamente con un hash non è possibile decodificare e inviare all'utente la loro password originale. Quindi, invece, si genera una password temporanea con cui è possibile accedere e quindi si costringe a cambiare nuovamente la password dopo l'accesso.
fonte
2009-06-03 22:44:19
Giusto per chiarire; vuoi sapere come memorizzare correttamente le password nel database, o semplicemente vuoi sapere se i dati del profilo utente devono essere separati dai dati dell'account di base? Ho risposto per il primo, ma dopo aver riletto la domanda, sembra che tu voglia il secondo. – Rob
La maggior parte delle risposte si concentra sul metodo di hashing e salatura delle password. Questa è una buona informazione, ma non affronta la domanda dell'OP. –
Sì Memorizzerò la password usando sha1 e una salatura. – Tim