Alex: Rangpunkte in DB eintragen oder bei Ausgabe berechnen?

Beitrag lesen

Hallo,

ich habe eine Datenbank mit etwa 100 Zeilen (Benutzer) und etwa 50 Spalten (Werte/Punkte).

id  | benutzer | punkteA | punkteB | punkteC | ...
----+----------+---------+---------+---------+-----
1   | Hans     |     100 |     123 |       0 |
2   | Klaus    |      10 |      10 |     100 |
3   | Ute      |      15 |      20 |      50 |
...

Nun würde ich gerne für jeden Wert eine bestimmte Punktzahl (Rangpunkte) vergeben. Der "klassenbeste" einer Spalte soll 1.000 Punkte erhalten. und die weiteren Kandidaten dann jeweils einen relativen Wert ihrer Punktzahl zu der Gesamtpunktzahl.

Die Formel würde so aussehen:

Benutzerwert / Maximalwert * 1000

Also in dem o.g. Beispiel hätte Hans als Klassenbester bei A und B 2.000 Punkte. Da er keine C-Punkte hat, kriegt er für C keine weiteren Punkte.

Klaus ist Klassenbester bei C und hat schonmal 1.000 Punkte. Dazu kommen noch 100 Punkte für A (10/100*1.000) und 100 Punkte für B (10/123*1.000) => 1.181 Punkte.

Ute ist überall Klassenbeste (und auch Klassenschlechteste), aber da ich nicht nach Geschlechtern trenne, muss sie sich mit (15/100+20/123+50/100)*1.000 Punkten zufrieden geben => 813 Punkte (gerundet).

Meine Frage:
Soll ich bereits beim Eintragen der Werte in die Datenbank die Rangpunkte berechnen oder lieber bei der Ausgabe die Rangpunkte live ermitteln?

Für mich erkennbarer Vorteil, wenn ich die Rangpunkte in der Datenbank halte:
Die Abfrage dürfte etwas schneller sein, da beim Eintragen berechnet wird.

Für mich erkennbare Nachteil, wenn ich die Rangpunkte in der Datenbank halte:

  • Sobald ein Datensatz (ein Benutzer) aktualisiert wird, müssten ggf. alle anderen Rangpunkte neuberechnet und eingetragen werden, zumindest dann, wenn ein neuer Maximalwert geliefert wird.
  • will ich irgendwann mal 999 statt 1.000 Punkte für den Besten geben (eher unwahrscheinlich), müsste die DB entsprechend aktualisiert werden.

Für mich irrelevant:
Die Anzahl der Datensätze verdoppelt sich nahezu.

Zu was würdet ihr raten, seht ihr weitere Vor-/Nachteile in der ein oder anderen Lösung?

Gerne nehme ich Anregungen entgegen, wie man die ein oder andere Lösung umsetzen kann. Ich hätte jetzt die "Liveberechnung" vermutlich in PHP gelöst, obwohl das ggf. ja auch schon in der Abfrage erledigt werden könnte!?

Gruß
Alex