2009-06-21 17 views
0

Ich arbeite an einem Projekt, bei dem Benutzer wissenschaftliche Autoren und Kolumnisten auswählen und ihre Aktivitäten verfolgen können. Benutzer können Autoren Aktivitäten verfolgen entweder durch:
Wie soll das aussehen?

  1. der Autor explizit auswählen und ihn dann
  2. Oder
  3. Die Wahl eines Kanals (eine Liste der Autoren, dass einige andere Benutzerspuren) und verfolgen den gesamten Kanal
  4. Tracking hier ist, wie das Schema der DB sieht aus wie (in Bezug auf diesen speziellen Anwendungsfall nur)

DB Model http://img526.imageshack.us/img526/7278/dbmodel.png
dieser Entwurf sollte in Ordnung sein Wenn der Benutzer Autor nach Autor anklickt, wird der Eintrag schnell in die Datenbank eingefügt und die Benutzeroberfläche animiert (über Ajax über Jquery) den Erfolg oder Misserfolg des Prozesses anzuzeigen. Wenn der Benutzer einen Kanal auswählt, unterscheiden sich die Dinge jedoch . Wenn ich einen Kanal auswähle, extrahiere ich alle Autoren aus diesem Kanal und füge dann neue Einträge in die Tabelle Users_Authors ein. Stellen Sie sich nun vor, dass der Kanal 1000 Benutzer oder mehr enthält, das Einfügen dauert einige Zeit und die animierte GUI wird nicht so schnell wie gewünscht sein. Also, würde jemand anderen Weg empfehlen, dies zu verbessern (auch wenn ich das gesamte Design ändern musste).
Danke

Antwort

4

Eine Sache, die Sie sich stellen müssen, ist dies:

Wenn der Benutzer einen Kanal von 100 Autoren auswählt und diesen Kanal ändern, sollten diese Änderungen durchströmen den Benutzer? Die Antwort auf diese Frage wird weitgehend das Design bestimmen.

Wenn Sie einen automatischen Durchfluss wünschen, kopieren Sie keine Autoren, wenn der Benutzer einen Kanal auswählt. Das Design muss ein Kanalabonnement enthalten.

In OO Bedingungen hat ein Benutzer null oder mehr Subscribables, die eine Elternklasse entweder Autor oder Kanal ist. Ein Kanal hat eine Eins-zu-viele-Beziehung zu Autoren. Die Entitätsdarstellung ist grundsätzlich gleich. Sie müssen nur festlegen, was ein Elternteil beider Entitäten abonniert hat.

Wenn Sie keine Änderungen durchführen möchten, müssen Sie entweder den Kanal versionieren oder das tun, was Sie tun: Autoren vom Kanal in die Abonnements des Benutzers kopieren.

+1

Da dies das beschreibendste ist, nehme ich es! Danke Cletus :) – Galilyou

0

Ich würde eine andere Darstellung vorschlagen.

Kurz gesagt, Sie möchten "Abonnement" verwalten. Es gibt zwei Arten von Abonnements: "einzelner Autor" und "Kanal".

Sie können also eine Basisklasse namens Subscription und zwei Unterklassen 'Author' und 'Channel' definieren. Eine 'Channel'-Zeile sollte in der Lage sein, eine 1: N-Beziehung zu den Autoren aufrechtzuerhalten.

Dann im Front-End, alle Abonnements werden in einer konstanten Zeit abgeschlossen sein.

Neben diesem Design wird die Datenpflege Problem, wenn die Autoren in einem Kanal konstituieren.

1

Sie könnten einen Kanal als Meta-Autor behandeln, d. H. Das Abonnieren eines Kanals wird so gehandhabt, als ob Sie einen Autor abonniert hätten. Das hat zwei Vorteile: 1. Wenn ein neuer Autor einem Kanal beitritt, abonnieren alle Nutzer dieses Kanals automatisch diesen Autor. 2. Vielleicht hat ein Benutzer Isaac Newton abonniert. Sie abonniert dann auch den Kanal "Physiker", aber später wieder abmeldet. Das Entfernen des "Physiker" -Abonnements vom Benutzer würde Isaac Newton ebenfalls entfernen, was wahrscheinlich nicht erwünscht ist.

0

Mein Ansatz wäre People-Tabelle mit beiden Benutzern und Autoren und die Author-Tabelle, nur People-Schlüssel von Autoren zu haben. Dann würden Autoren eine Tabelle mit den Mitgliedern erstellen, die Ihrer Verknüpfungstabelle ähneln würde.

Verwandte Themen