Spróbuję odpowiedzieć na twoje pierwotne pytanie. Posiadanie tego wszystkiego w jednym stole jest w porządku, chyba że po prostu masz dużo danych osobowych do zebrania. W takim przypadku może być sens podzielenie tego. Decyzję tę należy podjąć w oparciu o ilość danych osobowych, z którymi masz do czynienia i jak często muszą być one dostępne.
powiedziałbym większość czasu zrobiłbym coś takiego w jednej tabeli:
UserID, FirstName, LastName, Email, Password, TempPassword
Ale ... jeśli jesteś zbieranie znacznie więcej niż to. Załóżmy, że zbierasz telefon, faks, datę urodzenia, biografię itp. A jeśli większość informacji jest rzadko dostępna, prawdopodobnie umieściłbym to we własnej tabeli i połączyłem ją z relacją jeden-do-jednego. W końcu, im mniej kolumn masz na stole, tym szybciej będą pojawiać się zapytania względem tego stołu. A czasami ma sens uproszczenie tabel, które są najczęściej dostępne. Jeśli JOIN ma dostęp do tych danych osobistych, masz wydajność, więc to jest coś, co musisz wziąć pod uwagę.
EDYCJA - Wiesz co, właśnie coś wymyśliłem. Jeśli utworzysz indeks na polu nazwy użytkownika lub adresu e-mail (w zależności od tego, co wybierzesz), prawie całkowicie wyeliminujesz niedogodność związaną z wydajnością tworzenia tak wielu kolumn w tabeli użytkownika. Mówię tak, ponieważ za każdym razem, gdy zalogujesz się do klauzuli WHERE, bardzo szybko znajdziesz nazwę użytkownika, jeśli ma ona indeks i nie ma znaczenia, czy masz 100 kolumn w tej tabeli. Więc zmieniłem zdanie. Wrzuciłbym to wszystko do jednego stołu.;)
W każdym przypadku, ponieważ bezpieczeństwo wydaje się być popularnym tematem, hasło powinno być wartością hash. Sugerowałbym SHA1 (lub SHA256, jeśli naprawdę się o to martwisz). TempPassword powinno również używać skrótu i jest dostępne tylko w przypadku zapomnianego hasła. Oczywiście z hashem nie można odszyfrować i wysłać użytkownikowi oryginalnego hasła. Zamiast tego generujesz tymczasowe hasło, na które mogą się logować, a następnie zmuszasz je do zmiany hasła po zalogowaniu.
Tylko wyjaśnić; czy chcesz wiedzieć, jak poprawnie przechowywać hasła w bazie danych, czy chcesz po prostu wiedzieć, czy dane profilu użytkownika powinny być oddzielone od danych konta podstawowego? Odpowiedziałem na to pierwsze, ale po ponownym przeczytaniu tego pytania wydaje się, że chcesz tego drugiego. – Rob
Większość odpowiedzi dotyczy metody haszowania i solenia haseł. Jest to cenna informacja, ale nie odnosi się do pytania PO. –
Tak, będę przechowywać hasło za pomocą sha1 i solenia. – Tim