T-Rex: Summaryfelder

Beitrag lesen

Könntest du vielleicht in ein Paar einfachen Worten erklären, wozu das gut ist, warum man das macht? Ich kann damit komplett nichts anfangen, also bitte Noob-Gerecht ;)

Also die Theorie der Datenbank hat ja die 5 Normalisierungstufen. Grob gesagt schiebt man die Inhalte von einer Tabelle in mehrere Tabellen und verknüpft das ganze über Schlüssel (Foreignkeys). Damit erhofft man sich Redundanzen zu umgehen. Das Problem ist dann natürlich wieder das Verknüpfen bei einer Abfrage, denn du musst die Tabellen joinen.

Jetzt nehmen wir mal an es wird ein Rating von einem Datensatz ausgerechnet. Am Ende kommt also eine Zahl zwischen 0 und 10 raus. 0 ist schlecht und 10 ist super. Als Grundlage für diese Zahl eines Datensatzes (z.B. "wie beliebt ist der Film") dienen insgesamt 1500 Datensätze in 20 Tabellen. Da ist eine Tabelle mit Views, also wie oft wurde die Webseite mit diesem Film aufgerufen, wie oft runter geladen, Bewertung im klassischen sinne etc...

Damit man diese 1500 Datensätze bzw. 20 Tabellen nicht bei jedem Aufruf anzapfen muss, baut man gewollte Redundanzen ein. Beim speichern (als Beispiel) des Hauptdatensatzes wird eben doch mal die Berechnung durchgeführt um dann das ergebnis in einem Tabellenfeld zu speichern. Somit hat man die Zahl (Rating in diesem Fall) bei jedem Query dabei um muss sie nicht jedes mal ausrechnen. Um genau zu sein erkauft mans ich Abfrage-Performance durch mehr speicherplatz und eine langsamere Speicherung. Da Webseiten in der Regel aber öfter angefragt werden als dass man Daten speichert ist das in der Regel auch okay.

Um bei dem Beispiel zu bleiben ist mein Problem (wobei PRoblem ist es ja nicht wirklich, es ist eine logische Konsequenz) dass die Daten unter umständen nciht aktuell sind. Nehmen wir mal an von den 20 Tabellen verschwindet eine. Die wird einfach gelöscht, da sie nicht mehr gebraucht wird. Das Rating würde sich von 4.2 auf 3.7 ändern. Aber nur, wenn man den Hauptdatensatz nochmals abspeichert, denn beim speichern liegt ja wie beschrieben die Logik die Redundanz zu berechnen und in das Summaryfeld zu schieben.
Also hat man unter umständen veraltete Daten. In meinem Fall wäre das nicht soooo tragisch, da die Daten nicht relevant sind. Ähnlich wie bei dem Film. Ob der jetzt 3.7 hat oder 4.2 juckt wahrscheinlich niemand.

Dennoch frage ich mich gerade ob es eine Elegante Lösung gibt, die beide Seiten vereint.

Gruß
der sich einen Wolf schriebende, nicht mehr Korrektur lesende, da ihm die Augen gleich zufallen und somit auf Verständnis hoffende
T-Rex (mit einer Rekord Signatur)