SQL_LEVEL_DESIGNER_GUIDE - OnlyCook/abitur-elite-code GitHub Wiki
Willkommen im SQL Level Designer von Abitur Elite Code. Dieses Werkzeug ermöglicht es dir, eigene Datenbank-Aufgaben im Stil der hessischen Abiturprüfung (Praktische Informatik) zu erstellen, zu testen und mit anderen zu teilen.
- Dateisystem & Speicherort
- Die Benutzeroberfläche
- Die SQL Editoren
- Leitfaden für Abitur-konforme SQL-Levels
- Schritt-für-Schritt: Dein erstes SQL-Level
Wie auch im C#-Designer gibt es zwei Dateitypen, achte hierbei auf das "s" (für SQL) in der Dateiendung:
- .eliteslvldraft: Dies sind SQL-Entwürfe. Sie können jederzeit im Designer bearbeitet werden, sind aber nicht spielbar.
- .eliteslvl: Dies sind exportierte SQL-Levels. Sie sind schreibgeschützt und können von Nutzern gespielt werden. Ein Export ist nur möglich, wenn der Entwurf den internen Selbsttest besteht.
Speicherort: Alle Levels befinden sich im Ordner levels im Verzeichnis der Anwendung.
- Level Name & Autor: Titel des Levels und dein Name.
-
Voraussetzungen: Du kannst auf die internen SQL-Themen (z.B.
SELECT,INNER JOIN,GROUP BY) verlinken, um dem Spieler passende YouTube-Videos oder MySQL-Docs bereitzustellen.
Hier beschreibst du die Aufgabenstellung. Die Formatierung funktioniert exakt wie im C#-Designer:
-
Fetter Text:
**Wichtig** -
Highlight (Blau):
[Tabellenname]oder[Spaltenname] -
Code-Block:
{| SELECT * FROM Tabelle |}
Auch das Hinweis-System (start-hint: / start-tipp:) steht in den Materialien vollumfänglich zur Verfügung.
Im SQL-Designer gibt es einen visuellen Editor für das relationale Modell.
- Du kannst Tabellen erstellen, Spalten hinzufügen und diese als PK (Primärschlüssel, wird unterstrichen) oder FK (Fremdschlüssel, erhält eine Raute
#) markieren. -
WICHTIG (Das Schloss-Icon): Oben rechts im Editor findest du ein Schloss-Icon.
- Gesperrt (Read-Only): Der Spieler sieht das fertige Modell und kann es nicht ändern.
- Entsperrt (Bearbeitbar): Der Spieler erhält das Modell leer und muss das ER-Diagramm selbstständig in die 3. Normalform überführen.
Abitur Elite Code nutzt für SQL ausschließlich Entity-Relationship-Diagramme in der Chen-Notation. PlantUML unterstützt dies über die @startchen Syntax. Es gibt im SQL-Designer nur ein Hauptdiagramm.
Anders als bei C# wird hier kein Roslyn-C#-Code zur Validierung geschrieben. Die Engine führt stattdessen die SQL-Queries auf einer In-Memory SQLite Datenbank aus (wobei MySQL-Syntax emuliert wird).
Hier schreibst du reines SQL (CREATE TABLE und INSERT INTO), um die Start-Datenbank für das Level aufzubauen. Dieses Script wird vor jeder Abfrage des Spielers frisch ausgeführt.
Du musst dich entscheiden, welche Art von Aufgabe du stellst:
- SELECT Abfrage (Standard): Der Spieler soll Daten auslesen. Seine Abfrage wird direkt mit der Musterlösung verglichen.
- DML (UPDATE / INSERT / DELETE): Der Spieler soll Daten verändern. Da eine DML-Query keine Datentabelle zurückgibt, benötigt die Engine eine Verifizierungs-Abfrage.
Hier trägst du die korrekte, finale SQL-Query ein (z.B. SELECT * FROM Buch WHERE preis < 10;). Wenn du auf "Ausführen" klickst, generiert die Engine aus dieser Musterlösung die Tabelle für das "Erwartete Ergebnis".
Wenn du den Modus "DML" gewählt hast, reicht die Musterlösung (z.B. DELETE FROM Buch WHERE id = 1;) nicht aus, um das Ergebnis zu validieren. Du musst hier eine Abfrage eintragen (z.B. SELECT * FROM Buch;), die nach dem Ausführen der Spieler-Query aufgerufen wird, um den Zustand der Datenbank zu überprüfen.
Sobald du den internen Test ausführst, taucht unten eine Tabelle auf. Das ist das Ergebnis deiner Musterlösung.
- Die Engine vergleicht die Query des Spielers zeilengenau und spaltengenau mit dieser Tabelle.
-
Spaltennamen-Striktheit: Standardmäßig sind Spaltennamen flexibel (Spieler kann
SELECT namestattSELECT name AS gastnamenutzen, solange die Daten stimmen). Wenn du explizit Aliase prüfen willst, setze den Spaltennamen im Editor in einfache Anführungszeichen (z.B.'Gesamtwert'). Das erzwingt eine strikte Prüfung des Spaltennamens.
Damit sich die Levels anfühlen wie echte Abiturprüfungen, müssen folgende Regeln und Konventionen strikt eingehalten werden:
-
MySQL Emulation: Die App nutzt SQLite, emuliert aber MySQL-spezifische Funktionen (
CONCAT,DATE_ADD,YEAR,MONTH,DATEDIFF). Nutze diese wie in MySQL gewohnt. -
Namenskonventionen:
-
Entitäten (Tabellen):
PascalCase(z.B.Supermarkt,Buch). -
Attribute (Spalten):
camelCase(z.B.anzahlGetraenke). -
IDs / Primärschlüssel: Alles kleingeschrieben ohne Unterstrich (z.B.
kid,klasseid,artid). Vermeide generische Namen wieid. - Fremdschlüssel: Tragen exakt denselben Namen wie der referenzierte Primärschlüssel.
-
Entitäten (Tabellen):
-
Kardinalitäten (Flipped Chen): Das Abitur nutzt eine gedrehte Min-Max-Notation. Die Kardinalität steht neben der Entität, auf die sie sich bezieht.
- Normal:
A -(1,1)-b-(0,n)- C -
Abitur Elite Code:
A -(0,n)-b-(1,1)- C
- Normal:
In diesem Leitfaden erstellen wir ein einfaches Level, in dem der Spieler Bücher aus einer Bibliothek nach ihrem Preis filtern muss.
Fülle zuerst die grundlegenden Informationen im rechten Panel aus:
-
Name:
Die Buch-Suche - Autor: Dein Name oder Pseudonym.
Schreibe im Feld Aufgabe genau, was verlangt wird.
-
Beispiel:
Ermittle den [titel] und den [preis] aller Bücher, die weniger als 9.00 Euro kosten. - Verwende im Feld Materialien Formatierung für Tipps. Nutze den speziellen Hint-Block für Hilfestellungen:
start-hint: Filterung
Mit der WHERE-Klausel kannst du Ergebnisse einschränken.
Beispiel: WHERE spalte < 10
:end-hint
Wechsle zum Editor Setup Script (über den Pfeil-Button im Designer-Tab). Hier definierst du die Tabellen und Daten, die für das Level existieren sollen. Dieser Code ist für den Spieler unsichtbar.
CREATE TABLE Buch (
bid INTEGER PRIMARY KEY,
titel VARCHAR(255),
autor VARCHAR(255),
preis DOUBLE
);
INSERT INTO Buch VALUES (1, 'Faust', 'Goethe', 9.99);
INSERT INTO Buch VALUES (2, 'Die Verwandlung', 'Kafka', 5.50);
INSERT INTO Buch VALUES (3, 'Der Prozess', 'Kafka', 8.90);Damit der Spieler unkompliziert weiß, welche Tabellen er abfragen kann oder du kein ER-Diagramm geben willst, kannst du das Schema im Tab "Aufgabe" unter Relationales Modell definieren:
- Klicke auf das Schloss-Symbol, um das relationale Modell für Spieler zu sperren und deshalb für dich editierbar zu machen.
- Klicke auf
+ Tabelleund nenne sieBuch. - Füge die Spalten
bid(als PK markieren),titel,autorundpreishinzu. - Optional: Erstelle im Feld PlantUML ein ER-Diagramm in Chen-Notation, das dem Spieler visuell hilft.
@startchen
entity Buch {
bid <<key>>
titel
autor
preis
}
@endchenWähle SELECT Abfrage (Standard) als Validierungs-Modus.
Trage nun im Editor Musterlösung den korrekten SQL-Code ein:
SELECT titel, preis FROM Buch WHERE preis < 9.00;Überführe folgende ASCII-Tabelle (die App nutzt Einfüge-Buffer "LEER " am Ende, diese zählen nicht zur Tabelle):
┌─────────────────┬────────┐
│ titel │ preis │
│ VARCHAR(255) │ DOUBLE │
├─────────────────┼────────┤
│ Die Verwandlung │ 5.5 │
│ Der Prozess │ 8.9 │
└─────────────────┴────────┘
- Gehe sicher, dass du das Textfeld "Musterlösung" editierst (klicke dafür auf den Pfeil rechts neben dem Titel "Musterlösung").
- Klicke oben rechts auf den großen grünen Button
▶ AUSFÜHREN. - Im Output-Fenster sollte nun grün erscheinen:
✓ DESIGNER TEST BESTANDEN!. - Darunter siehst du die generierte "Erwartete Tabelle" (Expected Table) mit "Die Verwandlung" und "Der Prozess".
- Der Button Exportieren ist nun aktiv. Klicke darauf, um die
.eliteslvlDatei zu generieren!
Falls du die fertigen Beispiel-Dateien direkt verwenden möchtest:
- Die Buch-Suche.eliteslvl - Die exportierte, spielbare Version
- Die Buch-Suche.eliteslvldraft - Die Entwurfs-Datei zum Bearbeiten im Designer
Lege die heruntergeladenen Dateien einfach in deinen levels-Ordner (neben der .exe, wenn keiner existiert erstelle diesen selbst).