Frühjahrsputz in Moodle: Datenbanken und SQL im Praxiseinsatz
Als Informatiklehrer spreche ich in der 12. Klasse oft über Inkonsistenzen, die Bedeutung der Datenintegrität und die Herausforderungen, die mit der Verwaltung von Datenbanken einhergehen. Ein perfektes Beispiel dafür bietet unsere jüngste Mission: den Frühjahrsputz in der Moodle-Datenbank. Dieses Projekt war mehr als nur eine Routineaufgabe; es war eine Reise durch die komplexen Verflechtungen von Nutzerdaten, die sich über drei verschiedene Systeme erstrecken: weBBschule, iServ und Moodle.
Ein besonders wichtiger Aspekt unseres Projekts war das Deaktivieren der Accounts ehemaliger Schülerinnen und Schüler. Dieser Schritt war nicht nur eine Frage der Datensäuberung, sondern auch ein wesentlicher Beitrag zum Datenschutz und zur Sicherheit unserer digitalen Lernumgebung.
Dabei bestand die Hauptaufgabe darin, Unstimmigkeiten in der Moodle-Datenbank zu identifizieren und zu korrigieren. Doch die Herausforderung lag im Detail: Vornamen und Nachnamen waren oftmals vertauscht, zusätzliche Vornamen mal angegeben und mal weggelassen, Bindestriche falsch gesetzt, und Umlaute sowie das „ß“ wurden in verschiedenen Varianten geschrieben. Diese Inkonsistenzen machten den Abgleich zu einer komplexen Aufgabe.
Eine Schlüsselstrategie dabei war der Einsatz des LEFT JOIN
, um Datensätze in Moodle zu finden, die keine Entsprechung in der IServ-Datenbank hatten:
SELECT * FROM moodle m
LEFT JOIN Benutzer_ik i
ON (lower(m.firstname) = lower(i.Vorname) AND lower(m.lastname) = lower(i.Nachname))
OR (lower(m.firstname) = lower(i.Nachname) AND lower(m.lastname) = lower(i.Vorname))
OR (m.username = i.Account)
OR (lower(m.firstname) = lower(substr(i.Vorname, 1, instr(Vorname," ")-1)) AND lower(m.lastname) = lower(i.Nachname))
OR (lower(m.firstname) = lower(substr(i.Vorname, 1, instr(Vorname,"-")-1)) AND lower(m.lastname) = lower(i.Nachname))
WHERE i.Account IS NULL
Diese Anfrage zielt darauf ab, Inkonsistenzen durch unterschiedliche Namensschreibweisen und -anordnungen zu überwinden. Trotz dieser ausgeklügelten Ansätze mussten immer noch über 500 Datensätze manuell überprüft werden, was die Komplexität und die Notwendigkeit einer gründlichen Datenpflege unterstreicht. Ich hoffe, dabei keine Löschanomalien eingebaut zu haben. Sollte ein Account nicht mehr funktionieren, bitte bei mir melden.
Weiterhin war das Korrigieren der E-Mail-Adressen der Lehrer erforderlich. Lehreradressen mussten von einem alten Format in ein neues umgewandelt werden, um die Kommunikation auch mit den neuen Mail-Adressen zu gewährleisten:
SELECT m.username, m.firstname, m.lastname, i.Account || "@ik.schule" as email
FROM moodle m, Benutzer_ik i
WHERE m.firstname = i.Vorname AND m.lastname = i.Nachname
AND m.email LIKE "%kantschule-falkensee%"
Durch den praktischen Einsatz von SQL konnten wir die Datenqualität in Moodle erheblich verbessern. Die Aktion dauerte über 5 Stunden. Ich möchte mir gar nicht vorstellen, wie lange es ohne SQL-Kenntnisse gedauert hätte.
Ich bin beeindruckt und entschuldige mich für Altlasten aus Zeiten, als noch nicht so professionelle Leute an den Daten herumgewerkelt haben … und was für ein schönes Bild hast du generieren lassen!