Sollte das Profil eines Benutzers ein separates Modell sein?

8

Ich lerne Rails, indem ich eine einfache Site erstelle, auf der 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 Biografie 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 und die meisten seiner optionalen Felder verwende).

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

    
Yergin 09.11.2009, 22:43
quelle

6 Antworten

4
  • Pro: Es vereinfacht jedes Modell
  • Nachteile: Verwalten von 2 auf einmal ist etwas schwieriger

Es kommt im Grunde 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 hat, dann sollten Sie das unbedingt tun.

    
Macha 09.11.2009 22:48
quelle
4

Ich denke, es wäre am besten, wenn Sie ein separates Modell hinzufügen würden. Ü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 das Benutzermodell häufig aufgerufen 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 möglicherweise sie in derselben Tabelle speichern.

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

    
Benjamin Cox 09.11.2009 22:52
quelle
4

Ich würde empfehlen, Profilspalten im Benutzermodell für Klarheit und Einfachheit beizubehalten. 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 aufzuteilen.

Ich habe den Fehler gemacht, zwei Tische zu haben, und das hat mir nichts anderes als zusätzliche Komplexität eingebracht.

    
Marcus 09.11.2009 23:57
quelle
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 problemlos einen Profilverlauf verwalten.

    
user37011 10.11.2009 02:13
quelle
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.

    
nickf 09.11.2009 22:47
quelle
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 Null-Werten 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.

    
HLGEM 09.11.2009 22:48
quelle