17 Stimmen

Datenbankstruktur für Abstimmungssystem mit Up- und Down-Votes

Ich bin dabei, ein Abstimmungssystem für eine Webanwendung zu erstellen und frage mich, wie ich die Stimmen am besten in der (SQL-)Datenbank speichern kann.

Das Abstimmungssystem ist ähnlich dem von StackOverflow. Ich überlege gerade, ob ich die Up- und Down-Votes in verschiedenen Tabellen speichern soll. Auf diese Weise ist es einfacher, alle Up- bzw. Down-Votes zu zählen. Andererseits muss ich zwei Tabellen abfragen, um alle Stimmen für einen Benutzer oder einen Artikel zu finden.

Eine Alternative wäre eine Tabelle mit einem booleschen Feld, das angibt, ob es sich um eine Auf- oder Abwärtsabstimmung handelt. Aber ich schätze, dass das Zählen von Hoch- oder Runterstimmen ziemlich langsam ist (wenn man viele Stimmen hat), und ein Index für ein boolesches Feld ist (soweit ich weiß) nicht sehr sinnvoll.

Wie würden Sie die Datenbankstruktur erstellen? Eine oder zwei Tabellen?

18voto

Julio Guerra Punkte 5217

In Bezug auf die Kommentare haben wir die Lösung gefunden, die am besten zu folgenden Punkten passt Zardoz

Er will nicht immer Stimmen zählen und braucht so viele Details wie möglich. Die Lösung ist also eine Mischung aus beidem.

  1. Hinzufügen eines Integer-Feldes in der betrachteten Tabelle, um die Anzahl der Stimmen zu speichern (stellen Sie sicher, dass es nicht zu Überläufen kommt).
  2. Erstellen Sie zusätzliche Tabellen, um die Abstimmungen zu protokollieren (Benutzer, Beitrag, Datum, hoch/runter, usw.)

Ich würde empfehlen, Trigger zu verwenden, um das Feld "Stimmenzahl" automatisch zu aktualisieren, wenn eine Stimme in die Protokolltabelle eingefügt/gelöscht/geändert wird.

12voto

Gabriele Petrioli Punkte 182294

Wenn Sie nur nach oben/unten abstimmen, können Sie eine votes Tabelle, die auf die Stellen verweist und eine Wert von 1 oder -1 (aufwärts/abwärts). Auf diese Weise können Sie sum in einem einzigen Durchgang.

1voto

1voto

El Ronnoco Punkte 11443

Ich denke, Sie brauchen eine Verknüpfungstabelle zwischen den Benutzern und den Entitäten, über die abgestimmt wird. So können Sie sehen, welche Benutzer bereits abgestimmt haben und verhindern, dass sie weitere Stimmen abgeben. Die Tabelle kann in einem Booleschen Wert aufzeichnen, ob es sich um eine Aufwärts- oder Abwärtsabstimmung handelt.

Ich würde empfehlen, in der abgestimmten Entität ein Feld für die aktuelle Stimmenauszählung zu speichern, um die Abfrage zu erleichtern. Die Größenersparnis wäre vernachlässigbar, wenn Sie dies weglassen würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X