summaryrefslogtreecommitdiff
path: root/doc/documentation.txt
blob: 6b5c37399a277ee3e61ed44f1c1df84d9f12934c (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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
= Interaktives SQL E-Learning Module
:author: Jan Klemkow, Benjamin Franzke
:lang: de
:imagesdir: image

== 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 für
den praktischen 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.
Für Datenbanken gibt eine große Menge von Lehrbuechern welche alle Aspekte
dieses Bereichs erläutern.
Diese Lehrbücher und die Vorlesungen bilden im Präsenzstudium die theoretische
Grundlage.
Um den Umgang mit Datenbanken zu erlernen werden zusätzlich Praktika gegeben,
in denen die Studenten eigene Datenbanken erstellen, Daten einpflegen und wieder
abfragen.
Den Fernstudenten bieten sich solche Möglichkeiten leider nicht.
Ihnen bleiben nur die Möglichkeiten Anhand von Anleitungen eigene
Test-Umgebungen aufzubauen, um somit praktische Erfahrungen sammeln zu
können.
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 -- für Online-Kurse genutzt.
Diese Lernplattformen sind beide webbasiert und in PHP geschrieben.
Inhalte für verschiedene Kurse der Präsenzstudiengänge 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 Nils Weber im Rahmen einer Diplomarbeit realisiert.

=== Oracle-Tutorial

Das Oracle-Tutorial ist ein eigenständiges webbasiertes System welches nicht
mit den anderen Lernplattformen verknüpft ist.
Es bietet den Studenten die Möglichkeit anhand eines konstruierten Szenarios,
auf einer realen Datenbank SQL-Abfragen zu stellen.
Den Studenten werden dabei verschieden Aufgaben gestellt zu dessen Beantwortung
sie SQL-Abfragen formulieren müssen.
Diese werden dann auf der Beispieldatenbank ausgeführt und das Ergebnis intern
mit einer vorgegebenen Lösung verglichen.
Die Aufgaben sind dabei so gewählt, dass der Student möglichst mit alle Arten
und alle Aspekte einer SQL-Anfrage konfrontiert wird.
Somit bekommt der Student einen umfassenden Einblick in die Möglichkeiten, die
sich mit SQL-Datenbanken ergeben.

=== Moodle

Moodle ist eine modulares Open-Source System und dient als Lernplattform.
Es ist webbasiert und in der Programmiersprache PHP geschrieben.
Der Name ist gebildet als Akronym aus ``Modular Object-Oriented Dynamic Learning
Environment''. Die im Namen bereits festgehalten Modularität kann genutzt werden
um die Lernplattform um kursspezifische Aktivitäten zu erweitern.

Zur Entwicklung dieses Projekts wurde Moodle in der Version 2.4 eingesetzt.

=== Videos einbinden

Im Rahmen der Lehre von Datenbanken, ist eine attraktive Möglichkeit, die
Studenten nicht nur durch Text zu bilden, sondern auch durch Video-Tutorials
aufzuzeigen, wie praktisch Probleme umgesetzt werden können.
So besteht die Möglichkeit die Installation einer Datenbank interaktiv zu
gestalten.

Moodle bietet hierfür schon im Standardrepertoire die Möglichkeit, Videos in
Textseiten einzubetten.
Für diese Aufgabe gibt es in dem WYSIWYG-Edtior eine Schaltfläche
``Medien Hinzufügen'', dort öffnet sich ein Dialog, in dem die Möglichkeit
besteht auf dem Server vorhandene, oder direkt hochladbare Videos auszuwählen -
oder aber Videos von YouTube einzubinden.

== SQLBox

``SQLBox'' ist der Name des Aktivitätsmodul, welches die Möglichkeit
bietet SQL Lerntests in Moodle zu integrieren.
Es ist als Projekt des Faches ``Multimedia-Projekt'' implementiert worden.
Mit diesem Modul lassen sich Aufgaben für Datenbanken Anhand eines Beispiels
formulieren.
Der Tutor, welcher einen Lernkurs für Datenbanken verwaltet, gibt dabei eine
Aufgabenstellung in Textform und eine Musterlösung in Form einer
SQL-Anfrage-Strings an.
Der Student muss Anhand des Aufgabentextes eine SQL-Anfrage formulieren welche
diese Aufgabe löst.

.SQLBox mit ausgeführtem Query
image::sqlbox.png[]

Die SQL-Anfrage der Musterlösung sowie die des Studenten werden beide
nacheinander auf einer realen PostgreSQL-Datenbank ausgeführt.
Die dabei entstehenden Antworten werden verglichen und bei Übereinstimmung 
aller Zeile gilt diese Aufgabe fuer den Studenten als Bestanden.
Während der Entwicklung des Queries hat der Nutzer, wie in Abbildung 1 zu sehen,
die Möglichkeit, die Ergebnistabelle seiner Anfrage zu sehen.
Auch mögliche Fehler in dem SQL-Statement, zurück gegeben vom PostgreSQL server,
werden dem Studenten angezeigt.

Der Tutor kann den Lernfortschritt aller Studenten anhand einer
Übersichtstabelle (Abbildung 2) verfolgen.
In dieser Tabelle werden alle SQLBox-Aufgaben sowie alle Benutzer einander
gegenüber gestellt und zusätzlich der Gesamtfortschritt pro Benutzer angezeigt.

.Resultate aller Benutzer für alle Aufgaben mit Fortschrittsanzeige
image::reportall.png[]

Außerdem gibt es eine weitere Tabelle die jeweils für eine SQLBox die von den
Teilnehmern zuletzt angegebene Lösungen -- ob falsch oder richtig -- anzeigt.
Diese ist in Abbildung 3 zu sehen.

.Resultate einer SQLBox mit Anzeige der SQL-Anfragen
image::report.png[]


Alle SQLBox-Instanzen in einer Moodle-Installation beziehen sich auf die selbe,
einmalig konfigurierte Datenbank. Die Konfiguration der zu nutzenden Datenbank
ist also nur einmalig auszuführen.

=== Das Test-Szenario

Alle SQLBoxen finden im selben Beispiel-Szenario statt.
Dieses Szanario ist in der dafür im Administrationbereich
konfigurierten Datenbank (Standard: ``sqlbox'') abgebildet.
Im Rahmen dieser Arbeit wurde das von Nils Weber entwickelte KAPV-Beispiel
übernommen.
Es ist möglich dieses Szenario zu erweitern oder auch ein vollkommen anderes
zu erstellen, indem das Datenbankschema manuell erweitert wird oder Datensätze
hinzugefügt werden.

Der Datenbestand wurde aus der Oracle Datenbank exportiert, indem alle Daten
über +SELECT+-Anfragen, gekapselt in der Oracle-Funktion +dbms_xmlgen.getxml+,
abgerufen wurden.

Folgend ist die dazu notwendige Eingabe in das Oracle-Tool +sqlplus+
aufgelistet, um zum einen für die KAPV-Datenbank, zum anderen für die Aufgaben,
die Daten zu erhalten:

[source,sql]
----
include::../oracle-conversion/export-kapv.sql[]
----

[source,sql]
----
include::../oracle-conversion/export-lessons.sql[]
----

Die Ausgabe wird mit Hilfe des Unix tools +sed(2)+ und +xmllint+ so
nachbearbeitet, dass ein valides XML entsteht, welches mehre Tabellen &
Datensätze in einem Dokument enthält.
Diese können nun durch XSLT-processing einfach weiterverarbeitet werden.
So werden z.b. die Test-Aufgaben durch ein XSLT script so verarbeitet, dass sie
automatisiert einer Moodle-Instanz hinzugefügt werden können und die KAPV Daten
von XML in SQL Befehle transformiert.

=== Separierung von Benutzern

Der Benutzer der SQLBox muss bei jedem Aufruf einen konsistenten Datenbestand
vorfinden.
Da es dieses System einem Benutzer gestattet reale Anfragen an eine reale
Datenbank zu stellen, könnte dieser den Bestand der Datenbank verändern oder
beschädigen.
Zudem können Aufgaben welche das Erstellen oder gezielte Verändern von
Tabellen zum Ziel haben, nur einem einem Benutzer erfüllt werden.
Aus diesem Grund ist es notwendig, dass die Anfragen von den verschiedenen
Benutzern, von einander trennen werden.
In den Folgenden Abschnitten werden verschieden Möglichkeiten diskutiert und
bewertet, die die Trennung der Benutzer erlauben.

==== Transaktionen

Eine Idee ist es, die Eingaben des Nutzers durch Transaktionen zu schützen,
indem vor dem Ausführen der Nutzeranfrage eine Transaktion gestartet,
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 gestarte
Transaktion beendet, den Datensatz manipuliert und dann eine neue Transaktion
startet, wodurch es nicht einmal zu einer Warnung vom Datenbank-Server kommt:

[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;
----

Dieses Verfahren würde einen normalen Betrieb ermöglichen, indem Fehlerhafte
SQL-Anfragen wieder behoben werden.
Es bietet aber die Möglichkeit der gezielten Störung durch böswillige
Benutzer.
Dies könnte alle Tests unbrauchbar machen und damit einen normalen Lernbetrieb
verhindern. 

==== Separate Datenbank

Um die Anfragen der Nutzer von einander zu trennen, gibt es weiterhin die
Möglichkeit jedem Nutzer eine eigene Datenbank zur Verfügung zu stellen.
Somit könnte der Nutzer in den Test-Szenarien umfassende Änderungen an der
Datenbank vornehmen, ohne andere Nutzer dabei zu beeinträchtigen.
Die Übungen können dann nach einander so konstruiert werden, dass der Nutzer
die Datenbank in eine bestimmte Richtung hin verändert.

Der grösste Nachteil liegt im erheblichen Verwaltungsaufwand.
Es muss bestimmt werden für welche Moodle-Nutzer eine Datenbank angelegt wird.
Zudem muss es Möglichkeiten geben, die Datenbanken wieder zurückzusetzen,
sollte ein Nutzer die Datenbank in einen Zustand bringen, der keine
erfolgreichen Test mehr erlaubt.
Dabei müsste geklärt sein, zu welchem Zustand diese Rücksetzung geschehen müsste.
Entweder in einen Zustand indem der Nutzer an der nächsten noch offenen Aufgabe
weiter arbeiten kann, oder in eine Grundzustand, bei dem der Nutzer alle
Aufgaben von neuem erfüllen muss.
Alle diese Maßnahmen würden 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 für 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+ könnten
dann nicht innerhalb mit der SQLBox erprobt werden.

Dazu wird mit einem privilegiertem 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
----

==== Fazit

Transaktionen könnten das Risiko von fehlerhaften Anfragen für die Datenbank
stark reduzieren.
Da dieser Mechanismus aber keinen Schutz vor gezielten Manipulationen bietet,
ist er für eine Lernplattform mit vielen unbekannten Nutzern ungeeignet.

Separate Datenbanken für Benutzer bieten eine sehr gute Trennung und verhindern
eine direkte gegenseitige Beeinflussung.
Der Entwicklungsaufwand des Moodle-Moduls und die genutzten Ressourcen der
Datenbank im Betrieb sind zu hoch im Verhältnis der anderen Lösungen.
Aus diesem Grund kommt diese Lösung unter den Umständen dieses Projekte nicht
in Betracht.

Eine Read-Only-Lösung indem es den Benutzern nur erlaubt wird +SELECT+-Anfragen
zustellen schränkt die Vielfalt der Aufgabenmoeglichkeiten ein, aber bietet
sichere Trennung der Benutzer sowie einen geringen Entwicklungsaufwand für das
Modul.
Da der Hauptfokus beim Erlernen der SQL-Sprache auf den verschiedensten
Möglichkeiten von Anfragen liegt und das Anlegen von Tabellen und Spalten im
Vergleich eher nebensächlich zu betrachten ist, stellt sich diese Lösung am
geeignetsten für das Problem der Benutzertrennung unter den aktuellen
Umständen da.

== Installation

Das Moodle-Modul (+sqlbox/+ im Projektordner) muss zunächst auf den Server
in das Modulverzeichnis (+mod+) der Moodle-Installation kopiert werden:

[source,sh]
----
cp -R sqlbox/ /path/to/moodle/htdocs/mod/
----

Es sollte im weiteren eine Datenbank für die Tests und dazugehörige Nutzer
angelegt werden:

[source,sh]
----
su - postgres
# Read-Write Nutzer: sqlbox
psql -c "create user sqlbox createdb;" template1
psql -c "alter user sqlbox with encrypted password 'sqlbox_pw';" template1

# Read-Only Nutzer: sqlbox_read
psql -c "create user sqlbox_read;" template1
psql -c "alter user sqlbox_read with encrypted password 'sqlbox_pw';" template1

# Datenbank: sqlbox
psql -c "create database sqlbox with encoding 'unicode';" -U sqlbox template1
psql -c "alter user sqlbox nocreatedb;" template1

# Leserechte für sqlbox vergeben
psql -c "grant select on all tables in schema public to sqlbox_read;" sqlbox

# Reload Postgresql, e.g:
/etc/init.d/postgresql-X.Y reload
----

Die KAPV-Datenbasis kann über die im Projekt enthaltenen Schemata
und Daten erreicht, diese sind in separaten SQL-Dateien abgespeichert:

[source,sh]
----
psql -f oracle-conversion/kapv-schema.sql sqlbox
psql -f oracle-conversion/kapv.sql sqlbox
----

Nun kann in Moodle die Konfiguration des Plugins vorgenommen werden.
Als Administration wird die Datenbankkonfiguration über:
+Einstellungen->Website-Administration->Plugins->Aktivitäten->sqlbox+ erreicht.
Hier müssen Hostname, Datenbank, Nutzer und Passwort entsprechend der zuvor
getätigten Konfiguration eingetragen werden.

In dem Kurs, in dem die Tests aufgeführt werden sollen, muss nun die
Editierung über +Einstellungen->Kurs-Administration->Bearbeiten einschalten+
aktiviert werden, sodass unterhalb jeder Sektion die Möglichkeit eingeblendet
wird, eine Aktivität anzulegen.
In der Aktivitätsliste wird ``SQLBox'' gewählt und eine Aufgabe mit Beschreibung
und Referenz-Abfrage angelegt. Dieser Prozess wiederholt sich für jede zu
stellendene Aufgabe.

Alternativ können die Testaufgaben automatisiert der Moodle-Instanz hinzugefügt
werden. Dazu wird die der exportierte Aufgabendatenbestand von Nils Weber
benutzt, dieser ist in der Datei +oracle-conversion/lesson.xml+ zu finden.
Ein XSLT-Programm
(+oracle-conversion/oracle-conversion/lesson-add-to-moodle.xsl+) erstellt
Kommandozeilenbefehle, die zur Erstellung ausgeführt werden müssen.
Dazu wird das Kommandozeilen Programm curl benutzt, das HTTP-Anfragen erlaubt.
Zu Erzeugung wird also das reguläre Admin-Interface von SQLBox automatisiert benutzt.
Dazu muss im Script +oracle-conversion/create-kapv-in-moodle.sh+ die
Moodle-Session (vom Cookie auszulesen) und der Session-Key (in den URLs
enthalten) angepasst werden um es danach auszuführen.
Außerdem müssen Course-, Section- und Modul-ID angepasst werden.

[source,sh]
----
cd oracle-conversion
sh create-kapv-in-moodle.sh
----

== Literatur

* Nils Weber, Diplomarbeit, ``Entwicklung eines Webinterfaces fuer das
Oracle-Datenbankpraktikum'', HS-Wismar, 2004

// vim: textwidth=80 ft=asciidoc :