Я попытаюсь ответить на ваш оригинальный вопрос. Хорошо иметь все это в одной таблице, если только у вас нет много личной информации для сбора. В этом случае может иметь смысл разделить его. Это решение должно приниматься исходя из объема личной информации, с которой вы имеете дело, и того, как часто к ней нужно обращаться.
Я бы сказал, что большую часть времени я буду делать что-то подобное в одной таблице:
UserID, FirstName, LastName, Email, Password, TempPassword
Но ... если вы собираете намного больше, чем это. Допустим, вы собираете телефон, факс, дату рождения, биографию и т. Д. И т. Д. И если к большей части этой информации редко обращаются, я, вероятно, поместил бы ее в свою таблицу и связал бы ее с отношениями один-к-одному. В конце концов, чем меньше у вас столбцов в таблице, тем быстрее будут выполняться запросы к этой таблице. И иногда имеет смысл упростить таблицы, к которым чаще всего обращаются. Вместе с JOIN наблюдается снижение производительности, хотя всякий раз, когда вам необходим доступ к этой личной информации, вы должны учитывать это.
РЕДАКТИРОВАТЬ - Вы знаете, что я только что подумал. Если вы создадите индекс для имени пользователя или поля электронной почты (в зависимости от того, что вы предпочитаете), это почти полностью устранит недостаток производительности, связанный с созданием такого количества столбцов в пользовательской таблице. Я говорю это потому, что всякий раз, когда вы входите в систему, предложение WHERE будет очень быстро находить имя пользователя, если у него есть индекс, и не будет иметь значения, если у вас есть 100 столбцов в этой таблице. Так что я изменил свое мнение. Я бы положил все это в один стол. ;)
В любом случае, поскольку безопасность кажется популярной темой, пароль должен быть хеш-значением. Я бы предложил SHA1 (или SHA256, если вы действительно обеспокоены этим). TempPassword также должен использовать хэш, и он существует только для функции забытого пароля. Очевидно, что с помощью хэша вы не сможете расшифровать и отправить пользователю свой оригинальный пароль. Поэтому вместо этого вы генерируете временный пароль, с помощью которого они могут войти в систему, а затем вынуждают их снова сменить пароль после входа в систему.