MySQL Schema - PHP Quiz Script (Teil 2)

Die Datenbank-Struktur

Bei der Entwicklung eines PHP Online Quiz sollte zuerst ein wenig auf die Datenbankstruktur geachtet werden. Upps, einfach - denkste! Wie schon am Anfang des Textes erzählt, soll nicht nur ein Quiz Schema abbildbar sein, sondern beliebige. Daraus ergibt sich etwas komplexes, was nicht so leicht zu programmieren ist.

Nehmen wir den einfachsten Fall. Wir möchten ein Multiple Choice Quiz erstellen mit variablen Antwortmöglichkeiten. Das wiederum bedeutet, dass wir einige Normalformen benötigen.

Der sehr einfachste Fall wird im folgenden Bild dargestellt:

PS: Stört euch jetzt nicht unbedingt an meiner Prefix-Auswahl. Ich nutze gern für PHP Skripte die Ungarische Notation, um ein wenig Klarheit in die Typisierung zu bekommen.

Einfaches MySQL-DB-Schema für Quiz Fragen

Speicherung der Quizfragen

Die ersten beiden Relationen befassen sich mit der Quiz-Frage und mit den Antwortmöglichkeiten. Jedes Item hat eine eindeutige ID und bei den Choices ist es ein zusammengesetzter Schlüssel aus der Item-ID und einer Choice-ID. Die Choice-ID wird einfach von 0 aufwärts erhöht. Da es ein zusammengesetzter Schlüssel ist, wird es damit wieder eindeutig.

Speicherung der Quiz-Ergebnisse

Jetzt stellt sich noch die Frage, wie kann man die einzelnen Spiele kontrolliert und manipulationssicher abspeichern. Die Lösung ist eine Art Spiele-Session-Handling.

Jeder Spieler, der ein Online-Quiz startet, erhält eine individuelle Test-Session. Dies ist eine 32-Zeichen lange eindeutige ID (testsessionUIN). Ideal dafür ist zudem noch die Möglichkeit die Spiel-Dauer mit zu speichern. Dafür gibt es noch zwei Felder für den Start-Zeitstempel und den End-Zeitstempel.

Jede TestSession ist untergliedert in einzelne Item-Sessions, also die Sitzung, die für jede individuelle Frage unter der TestSession zuständig sind. Der Aufbau ist fast analog, d.h. es gibt eine eindeutige Sitzungs-ID, Zeitstempel.

Jedes Quiz braucht natürlich auch Highscore. Die letzte Relation behandelt das Highscore Schema und ist eine Referenz auf die TestSession.

Fazit

Der Grundlegende Aufbau des MySql-Schemas ist übersichtlich und kann nach Belieben erweitert werden. Wichtig ist, dass es unter Umständen dazu führen kann, dass durch das Tracking jeder Sitzung sehr viele Daten gesammelt werden. Es sollte daher unter Umständen ab und an ein wenig gesäubert werden.

Der nächste Punkt ist die Frage, welche PHP-Module für das Quiz benötigt werden.