TestTool/Datenmodell: Unterschied zwischen den Versionen

Aus Foxwiki
K (Dirkwagner verschob die Seite Projekt:testTool:DatenmodellX nach Projekt:TestTool:Datenmodell, ohne dabei eine Weiterleitung anzulegen)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Das Datenmodell bildet die Grundlage für das Erstellen des testTools.
Das Datenmodell bildet die Grundlage für das Erstellen des testTools.


==Datenlogik==
= Datenbanklogik =
Die Datenbanklogik erklärt, wie Daten in der Datenbank dargestellt werden.


*Jede Frage hat eine oder mehrere Antworten, eine Antwort ist einer Frage zugeordnet.
== Aktueller Stand ==
*Jede Frage hat eine Schwierigkeit, ist ein oder mehreren Themen und ist einer Lernwoche zugeordnet
*Jede Frage kommt in mehreren Prüfungen vor
*Jede Prüfung hat mehrere Fragen
*Jede Prüfung hat Teilnehmer, die wiederum in mehreren Prüfungen teilnehmen


==ER-Modell==
=== Fragen (questions) ===
TODO


==SQL-Befehle==
Beziehungen:
* Mehrere Fragen (questions) Können zu einem Thema (topic) gehören, welche zu einem Fachgebiet (subject) gehören können.
* Eine Frage kann mehrere Aufgaben (tasks) beinhalten, welche mehrere Antworten (answers) haben können.
* Eine Frage ist im Besitz eines Benutzers (user) und wurde zuletzt von einem Benutzer geändert.


===Erstellen der Tabellen===
Begründungen:
//Tabelle "fragen"
* Es gibt nur eine Tabelle welches drei Typen (fill in, multiple choice, match) von Fragen speichert. Dies wird gemacht damit man den Fragetyp (question_type) einer Frage ganz einfach ändern kann.
CREATE TABLE fragen(fr_id int auto_increment, fr_text text not null, fr_sc_id int, fr_th_id int, fr_lw_id);
* Ob eine Aufgabe angezeigt/benotet wird, hängt von dem Fragetyp ab und ob die Antworten richtig oder falsch sind (question_are_answers_correct). Es macht kein Sinn Fill-In-Fragen mit falschen Antworten anzuzeigen.
* Die Reihenfolge der Aufgaben (tasks) muss irgendwie kontrolliert werden. Entweder man sortiert sie nach dem Inhalt (task_text) oder nach einer vorgegebenen Reihenfolge (task_position). Momentan ist es die Letztere der Beiden.
//Tabelle "antworten"
CREATE TABLE antworten(an_id int auto_increment, an_fr_id int, an_text text not null, an_richtig boolean);
//Tabelle "themen"
CREATE TABLE themen(th_id int auto_increment, th_bez varchar(40) not null);
//Zuordnungstabelle "themenzuordnung"
CREATE TABLE themenzuordnung(tz_th_id int, tz_fr_id int);
//Tabelle "pruefung"
CREATE TABLE pruefung(pr_id int auto_increment, pr_titel text, pr_termin datetime);


=== Benutzer (users) ===
Beziehungen:
* Mehrere Benutzer (Users) Können zu einer Gruppe (Group) gehören.
* Mehrere Benutzer Können eine Rolle (Role) haben.
* Ein Benutzer kann beliebig viele Fragen erstellen.
Erläuterungen:
* Gruppen(groups) sind ein Weg mehrere Benutzer (users) auf einmal zu kontrollieren.
* Rollen(roles) geben einen Benutzer Rechte.
== Noch erforderlich ==
=== Prüfungen (Tests) ===
* Sollen Möglichkeit haben wiederholbar zu sein.
* Sollten Dauer und Zeitpunkt haben.
* Sollten von mehreren Gruppen durchführbar sein.
* Sollten Noten erstellen.
== Änderungspotential ==
* Benutzer(users) sollten zu mehreren Gruppen(groups) gehören.
* Die Aufteilung der Fragetypen(question_type), z.B. könnten alle Fragetypen einzelne Tabellen haben.
* Die Tabellenrepräsentation der Reihenfolge der Aufgaben (Tasks) in einer Frage (Question).
* Wie die große Anzahl an Rechten einer Rolle (Role) aufgeteilt werden soll damit die Tabelle nicht unübersichtlich wird.
= PHP-Schnittstelle =
Die Datenbanktabellen werden durch Klassen dargestellt, die durch einer Fabrik-Klasse aus der Datenbank gelesen und erstellt werden.
So ungefähr läuft das Login-verfahren:
$db = DB();
$user = $db->getUser($username);
if ($user->hasSameHash($password) == false) {
    exit;
} else {
    // LOGGED IN.
}
[[Category:Projekt:TestTool]]
[[Category:Projekt:TestTool]]

Version vom 21. Januar 2021, 14:57 Uhr

Das Datenmodell bildet die Grundlage für das Erstellen des testTools.

Datenbanklogik

Die Datenbanklogik erklärt, wie Daten in der Datenbank dargestellt werden.

Aktueller Stand

Fragen (questions)

Beziehungen:

  • Mehrere Fragen (questions) Können zu einem Thema (topic) gehören, welche zu einem Fachgebiet (subject) gehören können.
  • Eine Frage kann mehrere Aufgaben (tasks) beinhalten, welche mehrere Antworten (answers) haben können.
  • Eine Frage ist im Besitz eines Benutzers (user) und wurde zuletzt von einem Benutzer geändert.

Begründungen:

  • Es gibt nur eine Tabelle welches drei Typen (fill in, multiple choice, match) von Fragen speichert. Dies wird gemacht damit man den Fragetyp (question_type) einer Frage ganz einfach ändern kann.
  • Ob eine Aufgabe angezeigt/benotet wird, hängt von dem Fragetyp ab und ob die Antworten richtig oder falsch sind (question_are_answers_correct). Es macht kein Sinn Fill-In-Fragen mit falschen Antworten anzuzeigen.
  • Die Reihenfolge der Aufgaben (tasks) muss irgendwie kontrolliert werden. Entweder man sortiert sie nach dem Inhalt (task_text) oder nach einer vorgegebenen Reihenfolge (task_position). Momentan ist es die Letztere der Beiden.

Benutzer (users)

Beziehungen:

  • Mehrere Benutzer (Users) Können zu einer Gruppe (Group) gehören.
  • Mehrere Benutzer Können eine Rolle (Role) haben.
  • Ein Benutzer kann beliebig viele Fragen erstellen.

Erläuterungen:

  • Gruppen(groups) sind ein Weg mehrere Benutzer (users) auf einmal zu kontrollieren.
  • Rollen(roles) geben einen Benutzer Rechte.

Noch erforderlich

Prüfungen (Tests)

  • Sollen Möglichkeit haben wiederholbar zu sein.
  • Sollten Dauer und Zeitpunkt haben.
  • Sollten von mehreren Gruppen durchführbar sein.
  • Sollten Noten erstellen.

Änderungspotential

  • Benutzer(users) sollten zu mehreren Gruppen(groups) gehören.
  • Die Aufteilung der Fragetypen(question_type), z.B. könnten alle Fragetypen einzelne Tabellen haben.
  • Die Tabellenrepräsentation der Reihenfolge der Aufgaben (Tasks) in einer Frage (Question).
  • Wie die große Anzahl an Rechten einer Rolle (Role) aufgeteilt werden soll damit die Tabelle nicht unübersichtlich wird.

PHP-Schnittstelle

Die Datenbanktabellen werden durch Klassen dargestellt, die durch einer Fabrik-Klasse aus der Datenbank gelesen und erstellt werden.

So ungefähr läuft das Login-verfahren:

$db = DB();
$user = $db->getUser($username);
if ($user->hasSameHash($password) == false) {
    exit;
} else {
    // LOGGED IN.
}