blob: c2a712292883300f573129d30ebbeddb3925a9cd (
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
|
= Interaktives SQL E-Learning Modul
:author: Jan Klemkow, Benjamin Franzke
:lang: de
:imagesdir: image
== IST-Zustand
* Datenbank-Lektionen in Moodle
* Online-Web-Tutorial mit Oracle (Nils Weber)
== Projekt Ziel
* interaktive SQL-Tests innerhalb von Moodle
* Auswertung des Lernfortschritts
* PostgreSQL als Datenbank
== Problem: Benutzertrennung
image:conflict.svg[height="85%"]
== Transaktionen
[source,sql]
----
# sqlbox instruction
BEGIN TRANSACTION;
# User Input:
SELECT * FROM blub;
# sqlbox instruction
ROLLBACK TRANSACTION;
----
== Transaktionen
[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 Datenbanken
image:multi-db.svg[height="85%"]
== Read-Only
image:read-only.svg[height="85%"]
[source,sql]
----
create user sqlbox_read with password 'XXXXXX';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO sqlbox_read;
----
== Benutzer-Anfrage
image:query.svg[width="100%"]
== SQLBox Modul
* Moodle-Aktivitäts-Modul
* Eine Instanz pro Aufgabe
* Geteilte Datenbank für alle Instanzen
* 3-Teilig
** Hauptteil (view): Aufgabenstellung + Query + Ergebnis-Tabelle
** Report: Anzeige der Anfragen pro SQLBox (Korrekt/Fehlerhaft?)
** Reportall: Anzeige aller Nutzer mit allen SQLBoxen & Fortschritt
* Nutzung von Moodle-Abstraktion z.b. für HTML-Table +
-> konsistentes Aussehen +
-> kompakter Programmcode
== Testdaten
* Kopieren der Daten aus Oracle-Datenbank
* Importieren der Beispieldaten in PostgreSQL
* Konvertierung der Aufgaben zu SQLBox
[source,sql]
----
select dbms_xmlgen.getxml ('select * from lessons') from dual;
----
* Transformation der XML Datensätze mit XSLT +
-> SQL Statements für KAPV-Datenbank +
-> Kommandozeilenaufrufe von curl für automatisches Anlegen von Aufgaben
== Demonstration
Demonstration!
// vim: ft=asciidoc :
|