2016-03-24 22 views
2

Ich mache derzeit eine Android-App, in der ich Nutzern erlauben soll, Beiträge zu bewerten, die von anderen Nutzern gepostet werden.Wie würde ich ein Sternebewertungssystem in mein Database Design implementieren?

ERD model of Database

Das ist mein aktuelles Design ist, bin jedoch würde ich Rating als eigene Tabelle oder in den Medien Upload-Tabelle enthalten?

Wenn es eine separate Tabelle ist, würde es so etwas sein?

Rating Tabelle: (Note, PostID, Rating_Count, AVERAGE_RATING)

Wenn etwas aussieht anderes falsch mit meinem Design, das auch anerkannt werden würde!

+0

Möchten Sie jede einzelne Rate verfolgen? oder nur ein Durchschnitt pro Post? –

+0

Ich hätte gedacht, um eine durchschnittliche Bewertung pro Post zu erhalten, die ich jede einzelne Abstimmung auf einem bestimmten Post notieren müsste? –

+1

Sie sollten die Bewertungen auf einer Post-Basis verfolgen. Dies ermöglicht Ihnen mehr Flexibilität auf lange Sicht als auch in NF – VikingBlooded

Antwort

0

Es hängt alles davon ab, wie Sie die Ratings arbeiten wollen, die auf aktuelle Abstimmung bekommt oder Down-Abstimmung, ob Sie alle verfolgen, die von mit mehreren Stimmen von der gleichen Person zu halten Abstimmungen usw.

Das würde ich tun: füge ein eindeutiges numerisches (lang?) RatingID Feld für jede Stimme hinzu, verknüpfe das PostID Feld mit der Kommentartabelle, füge ein Rating (Integer) Feld hinzu, das auf Werte von 0 bis 5 (oder was auch immer Sie bevorzugen) und berechnen Sie dann den Durchschnitt aller abgegebenen Stimmen (löschen Sie die Felder Rating_Count und Average_Rating). Sie können eine Ansicht definieren, um die durchschnittlichen Bewertungen für jeden Post zu berechnen, die Sie für Ihre Routine verwenden können, um zu bestimmen, wie sie neben dem Post angezeigt werden soll.

Auch würde ich eine ID für jeden Benutzer verwenden, nicht ihre Namen verwenden.

Also meine Tabelle wie folgt aussehen:

RatingID, PostID, UserID, Rating

, auch Benutzer zu verhindern, mehrfach abstimmen, würde die Tabelle nicht mehrere Einträge für denselben PostID und UserID ermöglichen.

1

Es hängt davon ab, wie Sie das Rating speichern möchten.

Wenn Sie jede einzelne Bewertung verfolgen möchten. Sie werden mit dem im Anschluss an eine Bewertungstabelle benötigen:

Column 
--------- 
RatingID (PK) 
Username (FK) (UserDetailsID if you change the primary key of the UserDetails table) 
PostID (FK)  
RatingScore 
DateRated 

In der App, würden Sie dann mit diesen PostID jeden RankScore zurückziehen und die Berechnung tun, um eine Zählung der PostID basierte.

Ich würde die obige Methode empfehlen, weil Sie damit in Zukunft mehr Dinge mit den Ratings machen können. Außerdem haben Sie eine gute Struktur, um mit Ihrer Comments Tabelle zu folgen. Ex. Zeigen Sie, wer was bewertet und mit welcher Punktzahl.

Wenn Sie es an die Tabelle Post anhängen möchten, ist eine andere Tabelle nicht erforderlich. Sie würden einfach Rating_Count und Average_Rating zu der Tabelle hinzufügen. In Ihrer App müssten Sie dann jedes Mal ein Update durchführen, wenn die Post bewertet wird. Sie müssten die Rating_Count und Average_Rating ziehen, die Rating_Count um eins erhöhen, die Average_Rating neu berechnen und das Update durchführen.

Mein zweiter Vorschlag ist weniger flexibel, wenn Sie jemals Ihre Bewertungseinstellung verbessern möchten.

+0

Nebenbei bemerkt, Ihre 'UserDetails' Tabelle sollte einen Primärschlüssel von' UserDetailsID' und nicht 'Benutzername' haben, um eine normalisierte Datenbank zu sein. Siehe: http://sqlmag.com/database-administration/sql-design-how-choose-primary-key –

+0

SO nur um zu überprüfen ... Der RatingScore wäre das Feld mit den Werten 1-5 Sternen? und dann auf der App, wird es den Gesamtdurchschnitt aller Bewertungen einer bestimmten PostID anzeigen, ich nehme an, basiert auf einer separaten SQL-Funktion? –

+0

@ChristianBryant Ja, 'RatingScore' würde den Wert haben, den der spezifische Benutzer als Beitrag bewertet hat. Dann könnten Sie entweder einen Stored Proc erstellen (https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html), um den Durchschnitt zu ermitteln oder die Logik in Ihrem System zu erstellen Android-App-Code –

Verwandte Themen