2010-10-08 7 views
17

Neben Ihrer normalen Benutzer Tabelle "Benutzer" (User_id/User_email/User_pwd/etc), was ist der beste Weg, um Profilinformationen zu speichern?MYSQL: Benutzer - Profil Details Tabelle Setup - Best Practice

Würde man nur Felder hinzufügen, um die Benutzertabelle wie „user“

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

oder eine andere Tabelle „Profile“

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

oder würde man für eine Tabelle mit Eigenschaftsdefinitionen gehen genannt erstellen und eine andere Tabelle, um diese Werte zu speichern?

Ich weiß, die letzte ist die flexibelste, wie Sie Felder leicht hinzufügen und entfernen können. Aber für eine große Website (50k Benutzer) wäre das schnell?

Antwort

34

Dinge mit Ihren Ansätzen

Speicher von Benutzerprofil in Benutzertabelle

  • Dies wird in der Regel geht der schnellste Ansatz in Hinblick auf die immer auf den Profildaten zu betrachten, obwohl Sie haben können eine Menge redundanter Daten hier (Spalten, die möglicherweise keine Informationen enthalten).
  • Quick (vor allem, wenn Sie nur Spalten ziehen Sie aus der db benötigen)
  • vergeudet Daten
  • schwieriger zu arbeiten/pflegen (wohl mit Schnittstellen wie PHPMyAdmin)

Speichern von Benutzerprofil in User_Profile Tabelle 1-1 Beziehung Benutzer

  • noch Sollte ziemlich schnell sein, mit einem verbinden und Sie können einige Datenredundanz, wenn der Benutzer profi beseitigen les erstellt nicht, wenn ein Benutzer eine in füllt.
  • einfacher arbeiten mit
  • überhaupt so etwas langsamer durch (oder zweiten Abfrage) in Tabellen

Speichern von Benutzerprofil als Eigenschaften und Werte verbinden

* ieTabelle mögliche Optionen zu speichern, Tabelle speichern user_id, option_id und Wert *

  • keine redundanten Daten gespeichert, die alle Daten relevant
  • meisten normalisierte Methode
  • Langsamer zum Abrufen und Aktualisieren von Daten

Mein Eindruck ist, dass die meisten Websites die zweite Methode verwenden und Profilinformationen in einer zweiten Tabelle speichern. Für die meisten größeren Websites ist es üblich, die Datenbank zu de-normalisieren (twitter, facebook), um eine höhere Leseleistung auf Kosten einer langsameren Schreibleistung zu erzielen.

Ich würde denken, dass die Profilinformationen in einer zweiten Tabelle zu halten ist wahrscheinlich der Weg zu gehen, wenn Sie 50.000 Datensätze betrachten. Für eine optimale Leistung möchten Sie Daten, die stark von schwer lesbaren Daten getrennt sind, aufbewahren, um sicherzustellen, dass der Cache effektiv arbeiten kann.

+0

danke für diese klare Erklärung. Ich denke, zusammen mit iddqd Antwort werde ich es mischen und für diese Option gehen. - Benutzertabelle/Profiltabelle/Statistiktabelle. Ich weiß nicht, wen ich als Antwort auswählen soll ... – renevdkooi

17

Tabelle mit Eigenschaftsdefinitionen ist nicht die gute Idee. Ich schlage vor, drei Tabellen zum Speichern von Daten zu verwenden:

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 

Der bessere Weg Autorisierungs- und Authentifizierungsdaten zu speichern LDAP ist.

+0

Irgendwelche Gründe 'last_login' vor' first_login' angeordnet? Prost. – Leo

+0

@LeoTM Nr. Spaltenposition ist wichtig in Indizes, die nicht in Tabellen enthalten sind. – iddqd

6

Sie brauchen viel mehr als 3 Tabellen. Wie speichert er Daten wie mehrere E-Mails, mehrere Adressen, mehrere Bildungsgeschichten, mehrere "Suchen" -Beziehungen, etc. Jeder benötigt seine eigene Zeile unter der Annahme, dass viele Werte Lookups wie Stadt, Präferenz, Schulnamen, etc. sein werden es vollständig oder gehen Sie die NoSQL-Route, kein Punkt in der Mitte hängen, werden Sie das Beste aus beiden Welten verlieren.

Sie können Zeilen duplizieren, aber es wird nicht gut sein. Soziale Netzwerke leben nicht mit 50.000 Benutzern. Entweder wirst du erfolgreich sein und Millionen von Benutzern haben, oder du wirst abstürzen und es abknallen, weil, um diese auszuführen, du $$$ brauchst, die nur kommen werden, wenn du eine solide Benutzerbasis hast. Mit nur 50.000 Nutzern für das Leben investieren Investoren nicht, Werbeeinnahmen werden die Kosten nicht decken und Sie werden es schließen. Entwerfen Sie es so, dass Sie vom ersten Tag an das nächste Facebook werden möchten. Groß denken!