Database
 sql >> Datenbank >  >> RDS >> Database

Hinzufügen weiterer erweiterter Funktionen wie das Verwalten von Kategorien und das Abstimmen von Threads und Beiträgen

In meinem zweiten Artikel über ein Online-Forum habe ich erwähnt, dass möglicherweise mehrere erweiterte Funktionen hinzugefügt werden müssen:

  • Foren-Kategorien und Unterkategorien, wobei jede Kategorie ein Thema, mehrere Moderatoren und zusätzliche Informationen wie das Erstellungsdatum der Kategorie hat.
  • Ein Beitrag könnte ein Subjekt haben zusätzlich zum Inhalt.
  • Vielleicht möchten wir Benutzern erlauben, abzustimmen und lehnen ab in Threads und Beiträgen.

Um das Modell leichter erfassen zu können, haben wir ein Beispiel für ein solches Forum mit Kategorien, Threads, Beiträgen usw. vorbereitet. Wir hoffen, dass dies das Verständnis erleichtert:

Entitäten aus Teil 1 sind gelb gefärbt und Entitäten aus Teil 2 sind orange gefärbt. Hier ist das aktuelle Datenbankmodell nach den ersten beiden Artikeln:




Weitere Details zu Beiträgen

Im zweiten Artikel habe ich nur Beziehungen zu „Status“ für Threads und Posts hinzugefügt, aber jetzt möchte ich die Posts mit einem zusätzlichen Detail über den einfachen Inhalt hinaus aufwerten. Im Moment füge ich jedem Beitrag ein „Betreff“ hinzu, der sich vom „Betreff“ des Threads unterscheiden kann. Mit dem „Betreff“ (denken Sie an die Betreffzeile einer E-Mail oder den Betreff einer MMS-Nachricht) können wir eine komprimierte Version des Inhalts anzeigen – wie die ersten Zeilen einer E-Mail, die in Outlook oder auf Ihrem Telefon angezeigt wird Post. Außerdem können Benutzer das „Betreff“ eines Beitrags verwenden, um einen allgemeinen Kommentar wie „Ich stimme nicht zu“ aufzuzeichnen und dann ihre Argumente in den Kommentarbereich des Beitrags einzubringen. Dies ist eine schöne einfache Änderung des Modells.

Kategorien

Nachdem wir uns aufgewärmt haben, fügen wir ein neues Konzept (Entität) für die Kategorisierung von Threads und Beiträgen hinzu. Jede Kategorie wird mit einem Namen definiert; Jede Kategorie wird von einem Benutzer erstellt und hat mindestens einen Moderator unter den Benutzern, plus ein paar andere Attribute wie die Beiträge und Threads, die wir bereits haben. Wir möchten Kategorien und Unterkategorien, also werden wir zulassen, dass Kategorien auf andere (Unter-)Kategorien verweisen.

Da ich gerne mehrere Moderatoren für jede Kategorie haben möchte, werde ich eine Tabelle erstellen, um Kategorien mit Benutzergruppen zu verknüpfen, und Benutzer mit diesen Gruppen verknüpfen. Diese Tabelle wird „Gruppen“ von Benutzern definieren, von denen eine „Moderatoren“ sein wird, aber in Zukunft könnte dies für andere Arten von Gruppen erweitert werden.

Voting oder „Gefällt mir“

Ich persönlich bevorzuge es, für etwas „hoch“ oder „nieder“ zu stimmen, anstatt es einfach zu „mögen“ (aber ich denke, Mark Zuckerberg ist da anderer Meinung als ich). Ich werde mich dafür entscheiden, einen Abstimmungsmechanismus zu erstellen, der es den Benutzern ermöglicht, eine „Stimme nach oben“ oder eine „Stimme nach unten“ abzugeben. Wir können uns dafür entscheiden, negative Stimmen zu verbieten, wenn keine positiven Stimmen vorhanden sind, oder die Anzahl der negativen Stimmen zu begrenzen, aber die Entscheidung liegt bei der Anwendung, die Datenbank verfolgt einfach die Anzahl der positiven und negativen Stimmen.

Wir könnten separate Tabellen für Stimmen zu Threads und Stimmen zu Posts erstellen, aber ich werde sie in derselben Tabelle mit optionalen Fremdschlüsseln aus der Tabelle Threads und Posts belassen. Außerdem entscheide ich mich dafür, nicht über Kategorien abstimmen zu lassen.

Formales Design

Damit sind die Änderungen am Modell vorerst abgeschlossen, sodass wir uns das formale Design ansehen können. Auch hier erweitern wir die ERD, die in Teil 1 und 2 erstellt wurde. Änderungen, die in diesem Artikel beschrieben und in das Modell eingeführt wurden, sind blau eingefärbt.




Schlussfolgerung

Es gibt noch weitere Verbesserungen, die vorgenommen werden könnten, aber hier haben wir unsere Datenbank für ein Online-Forum in ein ziemlich vollständiges Design gebracht – dies würde die meisten typischen Online-Diskussionsforen unterstützen.

Welche anderen Funktionen benötigt Ihr Online-Forum?

« Vorheriger Teil