Skip to content

Struktur der Aufgaben

Alexander Kosmehl edited this page Feb 19, 2022 · 3 revisions

Die einzelnen Aufgaben des Trainers wurden als Task-Interface definiert und in der Tasks.ts-Datei in einer Liste abgespeichert.

Aufgrund der hohen Anzahl an Teilaufgaben sind die einzelnen Aufgabenobjekte sehr umfangreich und werden deshalb im Folgenden detailliert beschrieben.

Aufbau des Aufgabenobjektes

id

Die ID der Aufgaben ist eine einfache Zahl und wird für das Routing und die URL der Aufgabe verwendet.

Beispiel:

id: 1

title

Der Titel der Aufgabe wird auf der Task-Selection Seite angezeigt.

Beispiel:

title: 'Skriptverkauf'

description

Die Beschreibung der Aufgabe ist der Text, der auf allen Aufgabenseiten über der Tabelle angezeigt wird.

Beispiel:

description: 'In der folgenden Tabelle wird beschrieben, welche Personen in ihren Veranstaltungen Skripte in welcher Anzahl verkaufen.'

tableData

Die in der Tabelle angezeigten Daten sind als Liste von Objekten formatiert. Jedes Objekt ist dabei eine Zeile der Tabelle.

Beispiel:

tableData: [
      {
        Veranstaltungsnummer: 112,
        Veranstaltungsname: 'Englisch',
        Personalnummer: 198,
        Name: 'Schulz',
        Skriptnummer: 2,
        Preis: 25,
        Anzahl: 4
      },
      ...
]

hasViolatingColumns

Dies ist ein boolean, der festlegt, ob die Tabelle bereits in der ersten Normalform ist (false). Ist dies nicht der Fall, müssen die Spalten, welche die erste Normalform verletzen in violatingColumns hinterlegt werden.

Beispiel:

hasViolatingColumns: false

violatingColumns

Falls die Tabelle Spalten besitzt, die die erste Normalform verletzen, müssen diese hier hinterlegt werden.

Beispiel (Aufgabe 2):

violatingColumns: ['Behandlungstag', 'Diagnose_Beschreibung', 'Diagnose', 'Therapie']

functionalDependencies

Hier müssen alle funktionalen Abhängigkeiten der Daten hinterlegt werden. Diese werden bei verschiedenen Aufgaben verwendet.

Die Abbildung der Primärschlüssel auf die zugehörigen Columns wird zunächst in der Aufgabe funktionale Abhängigkeiten abgefragt. Der Typ der Abhängigkeit wird anschließend in Typen der funktionalen Abhängigkeiten abgefragt.

In der Anwendung wird dies in der Form

Primärschlüssel 1, Primärschlüssel 2, ... -> Spalte 1, Spalte 2, ...

dargestellt (siehe Abbildung)

Functional-Dependency-Example

Beispiel:

functionalDependencies: [
      {
        primaryKeys: ['Veranstaltungsnummer'],
        columns: ['Veranstaltungsname'],
        type: 'partiell'
      },
      ...
]

primaryKeys

Hier muss eine Liste aller Primärschlüssel angegeben werden. Diese werden in der Aufgabe Primärschlüssel abgefragt.

Beispiel:

primaryKeys: ['Veranstaltungsnummer', 'Personalnummer', 'Skriptnummer']

secondNormalForm

Hier werden die Abhängigkeiten der zweiten Normalform festgelegt (siehe functionalDependencies)

Beispiel:

secondNormalForm: [
      {
        primaryKeys: ['Veranstaltungsnummer'],
        columns: ['Veranstaltungsname']
      },
      ...
]

secondFormTableData

Hier werden alle anzuzeigenden Untertabellen angelegt. Jedes Listenelement ist dabei eine eigene Tabelle und somit analog zu tableData eine Liste von Zeilen-Objekten.

Beispiel:

secondFormTableData: [
      [
        {
          Veranstaltungsnummer: 202,
          Veranstaltungsname: 'Spanisch'
        },
        {
          Veranstaltungsnummer: 112,
          Veranstaltungsname: 'Englisch'
        }
      ],
      ...
]

alreadyThirdNormalForm

Hier muss angegeben, ob die zweite Normalform mit der dritten Normalform übereinstimmt. Dies wird in der Aufgabe Dritte Normalform abgefragt.

Beispiel:

alreadyThirdNormalForm: true,

thirdNormalFormSolutions

Hier müssen analog zu secondNormalForm und functionalDependencies alle Abhängigkeiten der dritten Normalform angegeben werden.

Beispiel:

thirdNormalFormSolutions: [
      {
        primaryKeys: ['Veranstaltungsnummer'],
        columns: ['Veranstaltungsname']
      },
      ...
]