summaryrefslogtreecommitdiff
path: root/doc/documentation.txt
blob: 2eef01316b9a67937b67c48cc06bd3b3c1cd70f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
= Interaktives SQL E-Learning Module
:author: Jan Klemkow, Benjamin Franzke
:lang: de

== Einleitung

E-Learning ist heute mehr als nur die reine Zusammenstellung von Texten mit
Bildern und Videos.
Interaktive Inhalte mit denen der Student experimentieren kann, sind fuer
das praktische Lernerfolg von elementarer Bedeutung.
Der Bereich der Datenbanken ist ein gutes Beispiel, welches verdeutlicht,
wie wichtig das praktische Anwenden von Wissen fuer den Lernerfolg ist.
Fuer Datenbanken gibt eine grosse Menge von Lehrbuechern welche alle Aspekte
dieses Bereichs erlaeutern.
Diese Lehrbuecher und die Vorlesungen bilden im Presentsstudium die theoretische
Grundlage.
Um den Umgang mit Datenbanken zu erlehrnen werden zusaetzlich Praktika gegeben,
in denen die Studenten eigene Datenbanken erstellen, Daten einpflegen und wieder
abfragen.

Den Fernstudenten bieten sich solche Moeglichkeiten leider nicht.
Ihnen bleiben nur die Moeglichkeiten Anhand von Anleitungen eigenen
Test-Umgebungen aufzubauen, um mit dieses praktische Erfahrungen sammeln zu
koennen.

Diese Arbeit beschreibt die Integration von realen Datenbanken in einen
E-Learning-Kurs.

== Grundlagen

Im Fachbereich EuI an der Hochschule Wismar werden zwei verschiedene
Systeme -- ILIAS und Moodle -- fuer Online-Kurse genutzt.
Diese Lernplattformen sind beide webbasiert und in PHP geschrieben.
Inhalte fuer verschiedene Kurse der Praesentsstudiengaenge sind dort zu finden.
Die Lerninhalte des Fachs Datenbanken werden als Kurse des Moodle-Systems
bereit gestellt.
Zudem gibt es interaktives Online-Tutorial fuer eine Oracle-Datenbank.
Dieses System wurde von Niels Weber im Rahmen einer Diplomarbeit realisiert.

=== Oracle-Tutorial

Das Oracle-Tutorial ist ein eigenstaendiges webbasiertes System welches nicht
mit den anderen Lernplattformen verknuepft ist.
Es bietet den Studenten die Moeglichkeit anhand eines konstruiten Szenarios,
auf einer realen Datenbank SQL-Abfragen zu stellen.
Den Studenten werden dabei verschieden Aufgaben gestellt zu dessen Beantwortung
sie SQL-Abfragen formulieren muessen.
Diese werden dann auf der Beispieldatenbank ausgefuehrt und das Ergebnis intern
mit einer vorgegebenen Loesung verglichen.
Die Aufgaben sind dabei so gewaehlt, dass der Student moeglichst mit alle Arten
und alle Aspekte einer SQL-Anfrage konfrontiert wird.
Somit bekommt der Student einen umfassenden Einblick in die Moeglichkeiten, die
sich einem mit SQL-Datenbanken ergeben.

=== Moodle

Moodle ist eine modulare Open-Source Lernplattform.
Sie ist webbasiert und in der Programmiersprache PHP geschrieben.

=== Moodle-Module

Moodle-Module.

=== Videos einbinden

Für Moodle ist ein integriertes Video-Plugin verfügbar.

== SQLBox

``SQLBox'' ist ein Moodle-Modul, welches im Rahmen des Mulimedia-Projekts
entstanden ist.

=== Sandbox für User-Queries

Der Nutzer der SQLBox muss bei jedem Aufruf einen konsistenen Datenbestand
vorfinden. Dazu ist es notwendig, dass Anfrage in einer Sandbox ablaufen.
Zu diesem Zweck sollen folgend verschiedene Möglichkeiten vorgestellt und
evaluiert werden.

==== Transactions

Eine Idee ist es, die Eingaben des Nutzers durch Transaktionen zu schützen,
indem vor dem Ausführen der Nutzeranfrage eine Transaktion gestartet wird,
und danach diese immer zurückgerollt (=ROLLBACK) wird:

[source,sql]
----
# sqlbox instruction
BEGIN TRANSACTION;

# User Input:
SELECT * FROM blub;

# sqlbox instruction
ROLLBACK TRANSACTION;
----

Ein Nutzer könnte aber aus dieser Sandbox ausbrechen, in dem er die gestartet
Transaktion beendet, den Datensatz manipuliert und dann eine neue Transaktion
startet:

[source,sql]
----
# sqlbox instruction
BEGIN TRANSACTION;

# User Input:
INSET INTO blub VALUES (1,'foo')
COMMIT TRANSACTION;
BEGIN TRANSACTION;
SELECT * FROM blub;

# sqlbox instruction
ROLLBACK TRANSACTION;
----

==== Separate Datenbank

Um die Anfragen der Nutzer von einander zu trennen, gibt es ebenfalls die
Moeglichkeit jedem Nutzer eine eigene Datenbank zur Verfuegung zu stellen.
Somit koennte der Nutzer in den Test-Szenarien umfassende Aenderungen an der
Datenbank vornehmen, ohne andere Nutzer dabei zu beeintraechtigen.
Die Uebungen koennen dann nach einander so konstruiert werden, dass der Nutzer
die Datenbank in eine bestimmte Richtung hin veraendert.

Der groesste Nachteil liegt im erheblichen Verwaltungsaufwand.
Es muss bestimmt werden fuer welche Moodle-Nutzer eine Datenbank angelegt wird.
Zudem muss es Moeglichkeiten geben, die Datenbanken wieder zurueckzusetzen,
sollte ein Nutzer die Datenbank in einen Zustand bringen, der keine
erfolgreichen Test mehr erlaubt.
Dabei muesste geklaert sein, in welchem Zustand diese geschehen muesste.
Entweder in einen Zustand indem der Nutzer an der naechsten noch offenen Aufgabe
weiter arbeiten kann, oder in eine Grundzustand, bei dem der Nutzer alle
Aufgaben von neuem erfuellen muss.
Alle diese Massnahmen wuerden den Entwicklungsaufwand enorm steigern.

==== Keine Schreibrechte

Im einfachsten Fall, bekommen die Nutzer nur Lese-Rechte auf die Datenbank.
Dieses hat den Vorteil, dass der Verwaltungsaufwand fuer das Modul, sowie
der Speicherbedarf der Datenbank verringert wird.
Mit dieser Variante, lassen sich hingegen nur +SELECT+-Anfragen stellen.
Andere wichtige Anfragen, wie +UPDATE+, +DELETE+, +CREATE+ und +ALTER+ koennten
dann nicht innerhalb mit der SQLBox erprobt werden.

Dazu wird mit einem priviligierten Account ein Nutzer angelegt, der für die
Datenbank nur Leserechte, also für +SELECT+, besitzt:

[source,sql]
----
sqlbox=# create user sqlbox_read with password 'XXXXXX';
CREATE ROLE
sqlbox=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO sqlbox_read;
GRANT
----

== Literatur

* Niels Weber, Diplomarbeit

// vim: syntax=asciidoc textwidth=80 :