Voy a intentar responder a su pregunta original. Tener todo en una sola mesa está bien a menos que solo tenga mucha información personal para reunir. En ese caso, puede tener sentido dividirlo. Esa decisión debe tomarse en función de la cantidad de información personal con la que está tratando y la frecuencia con la que debe accederse.
yo diría que la mayoría de las veces que me gustaría hacer algo como esto en una sola tabla:
UserID, FirstName, LastName, Email, Password, TempPassword
... Pero si usted está reuniendo mucho más que eso. Digamos que está reuniendo teléfono, fax, fecha de nacimiento, biografía, etc., etc. Y si la mayoría de esa información rara vez se accede, probablemente la pondría en su propia mesa y la conectaría con una relación de uno a uno. Después de todo, cuantas menos columnas tenga en una tabla, más rápidas serán sus consultas contra esa tabla. Y a veces tiene sentido simplificar las tablas a las que más se accede. Sin embargo, hay un golpe de rendimiento con el JOIN cada vez que necesitas acceder a esa información personal, así que eso es algo que deberás considerar.
EDITAR - Sabes qué, solo pensé en algo. Si crea un índice en el campo de nombre de usuario o correo electrónico (lo que prefiera), eliminará casi por completo el inconveniente de rendimiento de crear tantas columnas en una tabla de usuario. Lo digo porque cada vez que inicies sesión, la cláusula WHERE será extremadamente rápida para encontrar el nombre de usuario si tiene un índice y no importará si tienes 100 columnas en esa tabla. Así que he cambiado mi opinión. Lo pondría todo en una mesa.;)
En cualquier caso, dado que la seguridad parece ser un tema popular, la contraseña debe ser un valor hash. Sugeriría SHA1 (o SHA256 si realmente te preocupa). TempPassword también debe usar un hash y solo está ahí para la funcionalidad de contraseña olvidada. Obviamente, con un hash no puede descifrar y enviar al usuario su contraseña original. En su lugar, generan una contraseña temporal con la que pueden iniciar sesión y luego les obligan a cambiar su contraseña nuevamente después de iniciar sesión.
Solo para aclarar; ¿Desea saber cómo almacenar correctamente las contraseñas en la base de datos, o simplemente desea saber si los datos del perfil de usuario deben separarse de los datos de la cuenta base? Respondí por el primero, pero al volver a leer la pregunta, pareces querer lo último. – Rob
La mayoría de las respuestas se centran en el método de contraseñas hashing y salar. Esta es información que vale la pena, pero no aborda la pregunta del OP. –
Sí, voy a guardar la contraseña usando sha1 y una salazón. – Tim