Ben orijinal soruyu cevaplamak için deneriz. Sadece toplamak için kişisel bilgilerin bir sürü yoksa tek bir tabloda tüm olması gayet iyi. Bu durumda onu bölmek için mantıklı olabilir. Bu karar ile ilgileniyor ve ne sıklıkla erişilen gereken konum kişisel bilgilerin miktarına göre yapılmalıdır.
Ben tek bir tabloda böyle bir şey yapardı çoğu zaman söylemek istiyorum:
UserID, FirstName, LastName, Email, Password, TempPassword
Ama ... sen bundan çok daha fazla bir araya eğer. Eğer, telefon, faks, doğum tarihi, biyografi, vb topluyoruz Ve bu bilgilerin çoğu nadiren erişilen eğer o zaman ben muhtemelen kendi tablosunda ve bir-bir ilişkisi ile bağlamak koymak istiyorum söylüyorlar. Sonuçta, daha az sütun bir tablo üzerinde olması, bu tabloya karşı hızlı sorgular olacaktır. Ve bazen en çok erişilen tabloları basitleştirmek için mantıklı. Göz önünde bulundurmanız gerekir bu kişisel bilgilere erişmek gerekiyor rağmen her JOIN, böylece bir şey ile bir performans isabet vardır.
EDIT - Ben sadece bir şey düşündüm, biliyorum. Eğer kullanıcı adı veya e-posta alanına (hangisi tercih) bir dizin oluşturursanız, neredeyse tamamen bir kullanıcı tabloda pek çok sütun oluşturma performans dezavantajı ortadan kaldırmak gerekir. Ben WHERE yan tümcesi giriş ne zaman, çünkü aslında bir dizin var ve bu tablodaki 100 sütun varsa önemli değil eğer kullanıcı adı bulmak için son derece hızlı olacağını söylüyorlar. So I've changed my opinion. I'd put it all in one table. ;)
Güvenlik popüler bir konu gibi görünüyor çünkü her iki durumda da, şifre karma değeri olmalıdır. (Eğer bu konuda gerçekten endişeleriniz varsa veya SHA256) Ben SHA1 öneririm. TempPassword da bir karma kullanmak gerekir ve o şifremi unuttum işlevselliği için sadece orada bulunuyor. Açıkçası bir karma ile şifresini ve kullanıcı özgün parolasını gönderemezsiniz. Yani bunun yerine onlar ile giriş yapabilirsiniz geçici bir şifre oluşturmak ve ardından giriş yaptıktan sonra tekrar kendi parolasını değiştirmek için zorlamak.