Datenbankstruktur (inkl. ER‐Modell) - IU-Internationale-Hochschule-Augsburg/fallstudie-thema-2-online-umfragesystem GitHub Wiki
Issue #15, #46, #64 und #66
Wir haben uns vorerst für Alinas Variante entschieden, da wir nach dem Motto "Keep it simple" gehen. Timons ist also nicht falsch, nur komplizierter.
Vorläufige, aktuelle Version des Datenbankschemas
Feststellung am 24.04.2024: "USER" scheint in der Datenbank ein reservierter Begriff zu sein. Zur Klarstellung wurde die Tabelle in SURVEY_USER umbenannt.
Update am 19.05.2024: Die Tabelle hat ein neues Attribut namens "DESCRIPTION" erhalten. Darüber hinaus hat sich bei den Antwortoptionen etwas geändert. Es gibt jetzt nicht mehr RADIOBUTTON1-10 und CHECKBOX1-10, sondern nur noch ANSWER-OPTIONS1-10.
Update am 23.05.2024: Die Tabelle "ANSWER" wurde entsprechend angepasst.
Überlegungen
Erste Version:
Timons Version: (siehe Excel-Tabelle in Teams für Beispiele)
Alinas Version:
Englische Version:
Überlegung:
Ich denke, wir können uns die Tabellen Ergebnis, die Auflösungstabelle und den Freitext aus Timons Version sparen. Das, was die Auflösungstabelle macht, machen doch schon die einzelnen Schlüsselpaare, über die die Tabellen verknüpft sind. Wenn ich da an ein SELECT-Statement denke, dann schreibe ich eine WHERE-Bedingung und komme an alle Daten, die ich brauche.
Team 2 kann sich ebenfalls über ein SELECT-Statement über unsere Tabellen alle Daten holen, die sie brauchen. Selbstverständlich müssen wir uns da nochmal absprechen.
Wenn wir der Tabelle "Antwort" bereits für jeden Fragetyp Spalten mitgeben, dann können wir den Freitext auch in dieselbe Tabelle speichern. Die Fragen inkl. Antwortoptionen für den Umfragebogen setzen sich aus den gleichen Spalten in der Tabelle "Frage" zusammen, nur dass es dort für Radiobutton mehrere Spalten gibt, denn bei Radiobutton gibt es nur eine valide Antwort.
Was passiert mit den Spalten der anderen Fragetypen? Die bleiben einfach leer, wir füllen nur die Spalten des entsprechenden Fragetyps. Das sollte auch performant sein, weil Spalten/Tabellen, in denen nichts eingetragen wurde, werden einfach nicht beachtet. Antwort-ID würde ich zur User-ID abändern, da wir diese vermutlich gar nicht brauchen. Die Frage-ID reicht als Verknüpfung eigentlich aus.
Darüber hinaus würde ich die User-Tabelle, wenn ich so an das MVP denke, vorerst abändern zu einer Tabelle, in der wir die Probanden speichern. Grund dafür ist, dass es im MVP eh erst einmal nur einen "Admin"-User gibt, da es nur eine Ansicht gibt. Später, wenn es einen Login gäbe/gibt, brauchen wir sowieso zwei Tabellen für die User: einmal für die Forschenden und einmal für die Probanden. Oder wir verwalten die User weiterhin in einer Tabelle, aber einfach mit unterschiedlichen Rollen/Rechten.
Mein Vorschlag: Ich persönlich würde erst einmal mit den vier Tabellen anfangen. Wenn wir beim Implementieren merken, dass die nicht ausreichen oder wir gewisse Daten nicht bekommen, kann man immer noch Tabellen hinzufügen. Wir können nicht alles ins kleinste Detail planen, lieber fangen wir einfach Mal an und probieren es aus :-).
Erklärung:
- Ein User kann als Admin mehrere Umfragen erstellen (1:n)
- Ein User kann als Umfrageteilnehmer an mehreren Umfragen teilnehmen (1:n)
- Eine Umfrage kann mehrere Fragen haben (1:n)
- Eine Frage kann mehrere Antworten haben (1:n)
- Ein User kann mehrere Antworten abgeben (1:n) => User-ID wird in der Tabelle "Answer" gespeichert
Die Idee für die Frage und Antwort-Tabelle ist, dass wir in der Fragetabelle alle Antwortoptionen und in der Antworttabelle alle tatsächlichen Antworten durch den User speichern.
Wir limitieren die Anzahl der Checkboxen und die der Radiobutton. Wahrscheinlich hat der Admin-User, der die Umfragen erstellt, 10-12 Checkboxen und Radiobuttons bei der Erstellung einer Frage zur Verfügung. Somit verhindern wir, dass Antwortoptionen gespammt werden. Für den Fragetyp gibt es 10-12 Spalten in der Fragen-Tabelle und nur eine Spalte in der Antwort-Tabelle, da es bei Radiobutton (Single-Choice) nur eine Antwortmöglichkeit gibt.
Je nach Fragetyp belegen wir dann entsprechende Tabellen. Die Spalten der andern Fragetypen bleiben einfach frei.
So könnte dann eine befüllte Antwort-Tabelle aussehen:
Zukunftsaussicht: Wenn es einen Login gibt, dann könnte man die User-Tabelle umbauen und eine zusätzliche Spalte "Rolle" hinzufügen. Dort unterscheiden wir dann beispielsweise zwischen "Admin" (= Umfrageersteller/Forschender) und "Teilnehmer" (= Umfrageteilnehmer/Proband).