summaryrefslogtreecommitdiff
path: root/doc/documentation.txt
blob: 1709a325b02450d3d727bed2bc08ae1c8bf4878d (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
= 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 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 Lehrbuecher 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 Moeglichkeiten 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.

=== 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.
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.
Der Tutor kann den Lernfortschritt aller Studenten anhand einer
Übersichtstabelle verfolgen.
In dieser Tabelle werden alle SQLBox-Aufgaben sowie alle Benutzer einander
gegenüber gestellt und zusätzlich der Gesamtfortschritt pro Benutzer angezeigt.

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 konsistenen Datenbestand
vorfinden.
Da es dieses System einem Benutzer gestattet reale Anfragen an eine reale
Datenbank zu stellen, koennte dieser den Bestand der Datenbank veraendern oder
beschaedigen.
Zudem koennen Aufgaben welche das Erstellen oder gezielte Veraendern von
Tabellen nur einem einem Benutzer erfuellt werden.
Aus diesem Grund ist es notwendig, dass Anfrage von der verschiedenen Benutzer
von einander trennen werden.
In den Folgenden Abschnitten werden verschieden Moeglichkeiten diskutiert und
bewertet, die Trennung der Benutzer erlauben.

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

Dieses Verfahren wuerden einen normalen Betrieb ermoeglichen, indem Fehlerhafte
SQL-Anfragen wieder behoben werden.
Es biete aber die Moeglichkeit der gezielten Stoerung durch boeswillige
Benutzer.
Diese koennte alle Tests unbrauchbar machen und damit einen normalen Lernbetrieb
verhindern. 

==== 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
----

==== Fazit

Transaktionen koennten das Risiko von fehlerhafen Anfragen fuer die Datenbank
stark reduzieren.
Da dieser Mechanismuss aber keinen Schutz vor gezielten Manipulationen bietet,
ist er fuer eine Lernplattform mit vielen unbekannten Nutzern ungeeignet.

Separate Datenbanken fuer 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 Verhaeltniss der anderen Loesungen.
Aus disem Grund kommt diese Loesung unter den Umstaenden dieses Projekte nicht
in Betracht.

Eine Read-Only-Loesung indem es den Benutzern nur erlaubt wird +SELECT+-Anfragen
zustellen schraenkt die Vielfalt der Aufgabenmoeglichkeiten ein, aber bietet
sichere Trennung der Benutzer sowie einen geringen Entwicklungsaufwand fuer das
Modul.
Da er Hautpfokus beim Erlernen der SQL-Sprache auf den verschiedensten
Moeglichkeiten von Anfragen liegt und das Anlegen von Tabelle und Spalten im
Vergleich eher nebensaechlich zubetrachten ist, stellt sich diese Loesung am
geeignetsten fuer das Problem der Benutzertrennung unter den aktuellen
Umstaenden da.

== Installation

Das Modul verzeichnis (+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-Datein 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
Edititierung ü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 notwendig sind.
Dazu wir das Kommandozeilen Programm curl benutzt, das HTTP-Anfragen erlaubt.
Zu Erzeugung wird also das reguläre Moodle-Formular 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

// vim: textwidth=80 ft=asciidoc :