2009-11-09 3 views
8

Ich lerne Rails durch den Aufbau einer einfachen Website, wo Benutzer Artikel erstellen und diese Artikel kommentieren können. Ich habe eine Ansicht, in der die neuesten Artikel und Kommentare eines Benutzers aufgelistet sind. Jetzt möchte ich Benutzerprofile hinzufügen, wo Benutzer Informationen wie ihren Standort, Alter und eine kurze Biographie eingeben können. Ich frage mich, ob dieses Profil ein separates Modell/Ressource sein sollte (ich habe bereits ziemlich viele Felder in meinem Benutzermodell, weil ich Authlogic verwende und die meisten seiner optionalen Felder).Sollte das Profil eines Benutzers ein separates Modell sein?

Was sind die Vor- und Nachteile der Verwendung einer separaten Ressource?

+0

Siehe auch: http://softwareengineering.stackexchange.com/questions/241089/keep-user-and-user-profile-in-different-tables – Jon

Antwort

2

Ich würde es getrennt halten. Nicht alle Ihre Benutzer möchten ein Profil ausfüllen, daher sind dies leere Felder in Ihrer Benutzertabelle. Es bedeutet auch, dass Sie die Profilfelder ändern können, ohne die Logik Ihres Benutzermodells zu ändern.

4
  • Vorteile: Es vereinfacht jedem Modell
  • Nachteile: 2 auf einmal verwalten etwas härter ist

Es kommt grundsätzlich darauf an, wie groß der Benutzer und das Profil sind. Wenn der Benutzer 5 Felder und das Profil 3 hat, gibt es keinen Punkt. Aber wenn der Benutzer 12 Felder und das Profil 20 ist, dann sollten Sie auf jeden Fall.

+0

Warum sollten Sie "definitiv" aufteilen, wenn sie jeweils eine haben Viele Felder? – Aaron

0

Hängt von der Breite der vorhandenen Benutzertabelle ab. Datenbanken haben normalerweise eine Begrenzung auf die Anzahl der Bytes, die ein recird enthalten kann. I fyou nahe (oder über die Sie normalerweise tun können, wenn Sie viele Felder mit Nullwerten haben) die Grenze, würde ich eine Tabelle mit einer Eins-zu-Eins-Beziehung für bessere Leistung und weniger Wahrscheinlichkeit eines Datensatzes hinzufügen das kann plötzlich nicht eingefügt werden, da es zu viele Daten für die Zeilengröße gibt. Wenn Sie nicht in der Nähe des Limits sind, fügen Sie die existierende Tabelle hinzu.

4

Ich denke, du würdest am besten gedient in einem getrennten Modell. Überlegen Sie sich, wie die Modelle den Datenbanktabellen entsprechen und wie Sie diese für die verschiedenen Anwendungsfälle lesen, die von Ihrer App unterstützt werden.

Wenn ein Benutzer nur gelegentlich in sein aktuelles Profil eintaucht, aber häufig auf das Benutzermodell zugegriffen wird, sollten Sie es auf jeden Fall als separates Objekt mit einer Eins-zu-Eins-Beziehung definieren. Wenn die Profildaten jedes Mal benötigt werden, wenn die Benutzerdaten benötigt werden, möchten Sie diese in derselben Tabelle speichern.

Vielleicht wird der Ort jedes Mal benötigt, wenn Sie den Benutzer anzeigen (sagen Sie über einen Kommentar, den sie hinterlassen haben), aber die Biografie sollte ein anderes Modell sein? Sie müssen die richtige Aufschlüsselung herausfinden, aber die allgemeine Regel besteht darin, Dinge so zu strukturieren, dass Sie nicht sofort benötigte Daten abrufen müssen.

4

Ich würde empfehlen, Profilspalten im Benutzermodell für Klarheit und Einfachheit zu halten. Wenn Sie feststellen, dass Sie nur bestimmte Felder verwenden, wählen Sie nur die gewünschten Spalten aus: Wählen Sie.

Wenn Sie später feststellen, dass Sie aus irgendeinem Grund eine separate Tabelle benötigen (z. B. ein Benutzer kann mehrere Profile haben), sollte es nicht viel Arbeit sein, sie zu trennen.

Ich habe den Fehler gemacht, zwei Tabellen zu haben und es hat mir nichts anderes als zusätzliche Komplexität gekauft.

+0

Ich hatte genau die gleiche Erfahrung. – Aaron

3

Ein Benutzer "besitzt" verschiedene Ressourcen auf Ihrer Site, z. B. Kommentare usw. Wenn Sie das Profil vom Benutzer trennen, ist es nur eine weitere Ressource. Der Benutzer ist statisch, während sich das Profil von Zeit zu Zeit ändert.

Wenn Sie es trennen, können Sie auch einfach einen Profilverlauf verwalten.

Verwandte Themen