Warum wird die Trennung von Benutzer- und Profildaten als gut angesehen?

8

Ich habe diese Frage gelesen und fühlte, dass ich stimme nicht ganz mit der Aussage Separation of user and profile data is a nice touch überein.

Wie ich es sehe, werden Profildaten wie z.B. Land oder was auch immer in das Benutzerobjekt gehört, während das Trennen dieser Daten in das Profil dazu führt, dass ein neues Objekt (und eine Tabelle) mit einer 1: 1-Beziehung zu dem Benutzerobjekt erstellt wird. Wird eine solche Trennung aus ästhetischen Gründen als gute Praxis angesehen? (Sie sehen nur Benutzereingabedaten in einer Tabelle und generierte Daten in einer anderen Tabelle)

    
Fluffy 03.08.2010, 11:02
quelle

6 Antworten

8

Das geht nur, wenn Sie davon ausgehen, dass der Benutzer und das Profil eine 1: 1-Beziehung haben.

Wenn dies garantiert immer der Fall ist, dann könnte der Grund für die Trennung rein ästhetisch sein, aber es kann immer noch Leistungsgründe geben, die beiden zu trennen.

Zum Beispiel kann auf Profildaten von anderen Benutzern zugegriffen werden, sie können oft zwischengespeichert werden, ohne viel Rücksicht auf eine schnelle Ungültigkeitserklärung usw. zu nehmen.

Sie sind konzeptionell unterschiedliche Arten von Daten - selbst wenn sie eine 1: 1-Beziehung haben. Ich würde niemals Benutzer-Login-Daten zwischenspeichern - aber dann würde ich es nicht programmatisch Modulen offen legen, die nur Profildaten erfordern.

Das ist der Grund, wenn eine 1: 1-Beziehung garantiert gelten kann. Kann es?

Wenn Sie mehrere Anmeldedaten (oder mehrere Anmeldeverfahren) pro Benutzer zulassen, wird es jetzt interessanter. Zum Beispiel werden Cookie-basierte Sitzungen oft in einem flüchtigen Speicher auf der Serverseite gespeichert (es gibt selten eine Notwendigkeit für die Persistenz dieser Daten). Würden Sie diese Informationen auf das Benutzerobjekt oder auf das Profilobjekt zeigen?

Sie können eine unidirektionale Beziehung haben - es gibt einen Zeiger von Benutzer zu Profil, aber nicht von Profil zu Benutzer. Auf diese Weise können Module, die die Profildaten enthalten, die Anmeldedaten nicht ändern.

Was wäre, wenn Sie eine Lösung wie Facebook verwenden, mehrere Login-E-Mails pro Benutzer zulassen und sich zusätzlich über OpenID und eine iPhone / Android-App anmelden? Würden Sie dann zustimmen, dass Profil und Benutzer immer noch gleich sind?

    
qdot 03.08.2010, 11:15
quelle
2

Es gibt einige Gründe, warum ich Benutzerdaten teilen kann:

  1. Autorisierung von Informationen trennen. Das würde ich sehr empfehlen. Sobald der Benutzer authentifiziert ist, sehen Sie nur das Benutzerprofil an. Durch die Trennung des Autorisierungsteils können Sie ganz einfach von einem Passwort-Login zu Facebook Connect, OpenID-Authentifizierung usw. wechseln, ohne Änderungen an den Benutzerprofil-Objekten vornehmen zu müssen.
  2. Trennung von öffentlichen und privaten Daten. In Hochsicherheitsdatenbanken möchten Sie möglicherweise die privaten Daten mit privaten Schlüsseln verschlüsseln (so dass nur der Benutzer selbst die Daten lesen kann) und dennoch auf die Daten zugreifen können öffentliche Daten als ein anderer Benutzer.
  3. Aus Leistungsgründen. Wenn Sie große Datenmengen für den Benutzer haben, möchten Sie möglicherweise Daten bereitstellen, auf die selten selbst zugegriffen wird, sodass Indizes für Daten optimiert werden können, die häufig nachgeschlagen werden.
Blixt 03.08.2010 11:20
quelle
0

Pros:

  1. Sie können das Profiltabellenschema frei ändern und nicht stören, wenn es den Benutzer unterbricht.
  2. Sie können die Authentifizierungs- / Autorisierungslogik in anderen Apps wiederverwenden.
  3. Sie können einen Benutzer mit verschiedenen Profilen und sogar mit anderen Apps verknüpfen.
  4. Bessere Leistung aufgrund geringer Datenmengen in Benutzerentität (gilt für DB-Speicher, wo weniger Spalten in Tabellen besser sind) während Authentifizierungsoperationen und anderen Nur-Benutzer-Operationen, für die keine Profildaten erforderlich sind.

Nachteile:

  1. Eine weitere DB-Tabelle oder andere Datenentität zum Speichern des Profils
  2. Sie müssen die Beziehung zwischen Profil und Benutzerdaten pflegen.
  3. Mehr Code.
  4. Beim Zugriff auf Profildaten kann ein Leistungsabfall auftreten.

Zum Beispiel bietet Django (Python Web Framework) einen Authentifizierungsmechanismus und Sie können Ihren eigenen Profilmechanismus hinzufügen.

Wenn das Profil klein ist und niemals Änderungen unterliegt, können Sie es neben den Benutzerdaten speichern. Wenn das Profilschema in Zukunft geändert werden kann oder wenn es viele Daten enthält, ist es besser, Benutzer und Profil zu trennen.

    
fuwaneko 03.08.2010 11:18
quelle
0

Wenn Sie eine öffentliche API haben (wie zum Beispiel twitter oder facebook), möchten Sie nur die Benutzerdetails und nicht das Benutzerobjekt (mit den geschützten Daten) zurückgeben. Dies kann entweder durch getrennte Entitäten oder durch ein DTO erfolgen.

    
Bozho 03.08.2010 11:21
quelle
0

Für mich ist der Benutzer: Login (Benutzername), Passwort, Rolle und wird verwendet, um alle sicherheitsrelevanten Dinge zu tun.

Das "Profil" ist eine zusätzliche Information für den Benutzer, die in einem separaten Objekt platziert werden sollte.

Und bedenken Sie: In einigen Fällen kann ein Benutzer mehr als ein Profil haben ...

    
Yves M. 03.08.2010 11:41
quelle
0

Hauptsächlich, weil Profildaten nicht benötigt werden, wenn man nur wissen möchte, wer eine Entität erstellt hat. Der einzige wirkliche Ort, an dem ein Benutzerprofil benötigt wird, ist in erster Linie, wenn das System etwas für diesen Benutzer anpassen möchte, wenn es sich auf dem System befindet. Stellen Sie sich vor, dass das Profil die vom Benutzer bevorzugte Farbe hat, was für viele oder alle anderen Anwendungen der Anwendung unerheblich ist.

    
mP. 03.08.2010 11:46
quelle