2010-10-08 12 views
17

Co jest najlepszym sposobem na zapisanie informacji o profilu obok zwykłej tabeli użytkownika "user" (id_użytkownika/user_email/user_pwd/etc)?MYSQL: Użytkownik - konfiguracja tabeli szczegółów profilu - najlepsza praktyka

Należałoby tylko dodać pola do stołu użytkownika jak „użytkownik”

(user_id/user_email/user_pwd/user_firstname/user_lastname/user_views/etc) 

lub utworzyć inną tabelę o nazwie „Profile”

(profile_id/user_id/user_firstname/user_lastname/user_views/etc) 

lub można by pójść na stole z definicji własności i inna tabela do przechowywania tych wartości?

Wiem, że ostatni jest najbardziej elastyczny, ponieważ można łatwo dodawać i usuwać pola. Ale dla dużej witryny (50 tys. Użytkowników) byłoby to szybkie?

Odpowiedz

34

warte rozważenia ze swoimi podejść

Przechowywanie profilu użytkownika w tabeli Users

  • to generalnie będzie najszybszy podejście w zakresie uzyskania w danych profilowych, choć może masz tutaj jest dużo nadmiarowych danych (kolumny, które mogą nie zawierać żadnych informacji).
  • Quick (zwłaszcza, jeśli tylko ciągnąć kolumny trzeba od db)
  • Wasted danych
  • Trudniejsze do pracy/utrzymania (zapewne z interfejsami, takimi jak PHPMyAdmin)

Przechowywanie profilu użytkownika w User_Profile Tabela 1-1 stosunku do użytkowników

  • nadal powinien być dość szybkie z przyłączenia się i można wyeliminować pewną nadmiarowość danych, jeśli użytkownik profi les nie są tworzone, chyba że użytkownik wypełnia jeden w.
  • łatwiej pracować
  • bardzo nieznacznie wolniej z powodu przyłączenia (lub 2 zapytania)

Zapisywanie profilu użytkownika jako właściwości i wartości w tabelach

* tjStół do przechowywania możliwych opcji, stół do przechowywania user_id, option_id i wartość * przechowywane

  • Brak nadmiarowych danych, wszystkie dane są istotne
  • Większość znormalizowane metody
  • Wolniej pobierać i aktualizować dane

Mam wrażenie, że większość stron internetowych korzysta z drugiej metody i zapisuje informacje o profilu w drugiej tabeli, co jest powszechne w przypadku większości większych witryn w celu dezaktualizacji bazy danych (twitter, facebook) w celu uzyskania większej wydajności odczytu kosztem wolniejszej wydajności zapisu.

Sądzę, że zachowanie informacji zawartych w profilu w drugiej tabeli jest prawdopodobną drogą, gdy patrzy się na 50 000 rekordów. Aby uzyskać optymalną wydajność, chcesz zachować dane, które są w dużym stopniu odseparowane od ciężko odczytywanych danych, aby zapewnić efektywną pracę pamięci podręcznej.

+0

dziękuję za to jasne wyjaśnienie. Myślę, że razem z odpowiedzią iddqd, pomieszam to i sięgnę po tę opcję. - tabela użytkownika/tabela profili/tabela statystyk. Nie wiem, kto teraz wybrać odpowiedź ... – renevdkooi

17

Tabela z definicjami właściwości nie jest dobrym pomysłem. Sugeruję użycie trzech tabel do przechowywania danych:

user(id,login,email,pwd, is_banned, expired, ...) 
-- rarely changed, keep small, extremaly fast search, easy to cache, admin data 
profile(id, user_id, firstname,lastname, hobby,description, motto) 
--data often changed by user,...  
user_stats(id,user_id,last_login,first_login,post_counter, visit_counter, comment_counter) 
--counters are very often updated, dml invalidate cache 

Lepszym sposobem na przechowywanie danych autoryzacji i uwierzytelniania jest LDAP.

+0

Jakiś powód "last_login" zamówiony przed 'first_login'? Twoje zdrowie. – Leo

+0

@LeoTM Nie. Pozycja kolumny jest ważna w indeksach nie w tabelach. – iddqd

6

Potrzebujesz więcej niż 3 stolików. W jaki sposób będzie przechowywać dane, takie jak wiele wiadomości e-mail, wiele adresów, wiele historii edukacyjnych, wiele "szukających" relacji itp. Każdy potrzebuje własnego wiersza, zakładając, że wiele wartości będzie takich jak miasto, preferencje seksualne, nazwy szkół itp., Więc albo znormalizuj to w pełni lub przejdź na trasę noSQL, nie ma sensu wieszać w środku, stracisz najlepsze z obu światów.

można powielać wiersze, ale nie będzie dobrze. Serwisy społecznościowe nie obsługują 50 000 użytkowników. albo odniesiesz sukces i będziesz mieć miliony użytkowników, albo upadniesz i zamkniesz, ponieważ do ich uruchomienia potrzebujesz $$ $, które przyjdą tylko, jeśli masz solidną bazę użytkowników. Mając zaledwie 50 000 użytkowników, których inwestorzy nie chcą inwestować, przychody z reklam nie pokrywają kosztów, a Ty je zamkniesz. Zaprojektuj go tak, jakbyś chciał być następnym facebookem od samego początku. Myśl duże!

Powiązane problemy