Überblick
- Adresse: https://pages.mbz-ilvesheim.de/barbara.henn/mysql/
- Die App läuft direkt im Browser – kein MySQL-Server, keine Installation nötig.
- Alle Daten bleiben ausschließlich im eigenen Browser (siehe Abschnitt 8).
Die App hat vier Arbeitsbereiche (oben auf der Seite):
- Datenbanken – Datenbanken anlegen, öffnen, umbenennen, löschen
- SQL-Konsole – SQL-Befehle ausführen (Tabellen anlegen, Daten eintragen, Abfragen), Skriptdateien importieren
- Tabellen und Daten – Daten ansehen, per Formular erfassen, ändern, löschen, exportieren
- Modell – relationale Datenmodelle (eERD) erstellen, ansehen und in die Datenbank bzw. aus der Datenbank übertragen (siehe Abschnitte 11 bis 13)
1. Erster Start
- Die Adresse in Chrome oder Edge öffnen.
- Beim ersten Laden lädt die App kurz die Datenbank-Engine (ein paar Sekunden). Danach funktioniert sie auch komplett offline.
- (Optional) Als App installieren: Browsermenü → „Workbenchy installieren“. Dann lässt sich die App wie ein normales Programm vom Startmenü starten.
2. Bedienung mit Tastatur und Screenreader
Alles in der App funktioniert ohne Maus:
| Taste | Wirkung |
|---|---|
Tab / Shift+Tab |
nächstes / vorheriges Feld oder Button |
Tab / Shift+Tab im Codefenster der Modell-Ansicht |
Code um 4 Leerzeichen ein-/ausrücken (aktuelle Zeile oder Auswahl) |
Esc im Codefenster der Modell-Ansicht |
zwischen Einrücken und normalem Tab-Fokussprung umschalten |
Enter |
Button ausführen, Feld auslösen |
Strg+Enter |
SQL-Befehle ausführen (im Textfeld der SQL-Konsole) |
Im Codefenster der Modell-Ansicht ist Tab standardmäßig
„gefangen“ (Einrücken). Nach jedem Klick in das Codefenster (oder
Alt+1) wird das Einrücken automatisch wieder geschaltet
und per Ansage bestätigt (Auto-Re-Arm); auch nach dem
Zurück-Button (bfcache) gilt das wieder.
Mit NVDA/JAWS:
- Statusmeldungen („Gespeichert um …“, Fehler) werden automatisch vorgelesen.
-
Überschriften:
H(NVDA) bzw.2+H(JAWS) springt zur nächsten Überschrift – die Arbeitsbereiche und jede Tabelle sind Überschriften. -
Tabellen: NVDA
Strg+Alt+ Pfeiltasten zum Verschieben innerhalb der Tabelle; JAWSTfür Tabellenmodus undTabzwischen Zellen.
Der Fokus springt automatisch: nach einem Ansichtwechsel zur Überschrift der Ansicht, nach einem erfolgreich ausgeführten SQL-Befehl in die Ergebnis-Region.
3. Datenbank anlegen
-
Im Bereich Datenbanken den Namen unter „Name der neuen
Datenbank (Kleinschreibung)“ eingeben, z. B.
msc_nfis(für die Aufgabe „Motorsportclub“). - Button Anlegen → Bestätigung „Datenbank ‚msc_nfis' angelegt.“
Namensregeln: nur Kleinbuchstaben (a–z), Ziffern und _; der
erste Buchstabe muss ein Buchstabe sein; maximal 64 Zeichen. Ein
unzulässiger Name wird abgewiesen mit „Ungültiger Datenbankname: Bitte
Kleinschreibung verwenden …“. Auf Mobilgeräten (Smartphone, Tablet)
großschreibt die Tastatur dieses Eingabefeld nicht automatisch mit.
An der Datenbank selbst stehen die Buttons Öffnen, Umbenennen und Löschen (Löschen öffnet eine Bestätigungs-Abfrage, die die Konsequenz benennt).
4. Tabellen anlegen – Aufgabe 3.1 „Motorsportclub“
Das Relationenmodell (S. 15 des Handouts) wird in SQL übersetzt: pro
Tabelle ein CREATE TABLE-Befehl. Die Pfeile (↑) werden zu
FOREIGN KEY-Klauseln.
Das komplette Schema für die Workbenchy:
CREATE TABLE rennstrecke (
streckennr INT PRIMARY KEY,
streckenname VARCHAR(50) NOT NULL,
streckenlaenge INT
) ENGINE=InnoDB;
CREATE TABLE teamleiter (
teamleiternr INT PRIMARY KEY,
vorname VARCHAR(50) NOT NULL,
nachname VARCHAR(50) NOT NULL,
email VARCHAR(50)
);
CREATE TABLE rennveranstaltung (
veranstaltungsnr INT PRIMARY KEY,
veranstaltungsdatum DATE NOT NULL,
veranstaltungsname VARCHAR(50) NOT NULL,
streckennr INT NOT NULL,
FOREIGN KEY (streckennr) REFERENCES rennstrecke (streckennr)
);
CREATE TABLE teams (
teamnr INT PRIMARY KEY,
teambezeichnung VARCHAR(50) NOT NULL,
teamleiternr INT NOT NULL,
FOREIGN KEY (teamleiternr) REFERENCES teamleiter (teamleiternr)
);
CREATE TABLE teilnahmen (
teilnahmenr INT PRIMARY KEY,
teamplatzierung INT,
veranstaltungsnr INT NOT NULL,
teamnr INT NOT NULL,
FOREIGN KEY (veranstaltungsnr) REFERENCES rennveranstaltung (veranstaltungsnr),
FOREIGN KEY (teamnr) REFERENCES teams (teamnr)
);
CREATE TABLE mechaniker (
mechanikernr INT PRIMARY KEY,
vorname VARCHAR(50) NOT NULL,
nachname VARCHAR(50) NOT NULL,
telefon VARCHAR(50),
teamnr INT NOT NULL,
FOREIGN KEY (teamnr) REFERENCES teams (teamnr)
);
CREATE TABLE fahrer (
fahrernr INT PRIMARY KEY,
vorname VARCHAR(50) NOT NULL,
nachname VARCHAR(50) NOT NULL,
lizenznr VARCHAR(50) NOT NULL,
teamnr INT NOT NULL,
FOREIGN KEY (teamnr) REFERENCES teams (teamnr)
);
Begriffe:
INT PRIMARY KEY– Primärschlüssel: eindeutige Nummer je Zeile.NOT NULL– Pflichtfeld: darf nicht leer bleiben.-
FOREIGN KEY (streckennr) REFERENCES rennstrecke (streckennr)– Fremdschlüssel, also der Pfeil aus dem Relationenmodell. -
ENGINE=InnoDB(und ähnlichCHARSET,COLLATE,UNSIGNED) kann ruhig dabei sein: Diese MySQL-Klausen werden automatisch entfernt, dazu erscheint der Hinweis „Hinweis: ENGINE=InnoDB wird nicht unterstützt und wurde entfernt.“
Ausführen: Alle Befehle in das Textfeld der SQL-Konsole
kopieren, Button Ausführen (oder Strg+Enter) drücken.
Bei Erfolg erscheint pro Befehl „Ausgeführt.“ und danach „Gespeichert um
…“.
Wichtig: AUTO_INCREMENT wird unterstützt –
Primärschlüsselwerte (1, 2, 3, …) werden automatisch vergeben: Wer einen
INSERT schreibt, in dem die Schlüssel-Spalte fehlt (oder
NULL ist), erhält den nächsten Wert. Explizite Werte bleiben
erlaubt, nach dem Eingeben eines höheren Werts zählt es hinterher weiter –
wie in MySQL. Offizielle Skripte tragen explizite Schlüsselwerte und
funktionieren unverändert.
Kontrolle: Der Bereich Tabellen und Daten listet jetzt die 7 Tabellen.
Alternative: Tabelle per Dialog anlegen
Einfache Tabellen lassen sich ohne SQL auch im Bereich Tabellen und Daten per Button „Neue Tabelle“ (oben im Bereich) anlegen:
-
Tabellenname eingeben (Kleinschreibung: Buchstaben,
Ziffern,
_). - Unter Spalten steht zunächst eine Spalte; mit „Spalte hinzufügen“ kommen weitere dazu. Je Spalte: Name, Typ (Ganzzahl, Dezimal, Kurzer Text (mit Länge), Text, Datum) und optional Primärschlüssel (Kästchen) sowie Fremdschlüssel („Fremdschlüssel: Tabelle“ + „Fremdschlüssel: Spalte“, per Auswahl aus den vorhandenen Tabellen; die Spalten-Auswahl hängt von der gewählten Tabelle ab).
- Primärschlüssel: maximal ein Kästchen kann angehakt sein – ein zweites hebt das erste automatisch auf. Ein ganzzahliger Primärschlüssel wird automatisch vergeben (Auto-ID): Beim Datenerfassen darf das ID-Feld leer bleiben.
- Button „Tabelle anlegen“ → die Tabelle erscheint sofort im Bereich. Bei Fehlern steht die Meldung direkt unter dem jeweiligen Feld (z. B. „Tabelle ‚teams‘ existiert bereits.“, „Spalte 2: Für den Fremdschlüssel bitte die Spalte in der Tabelle ‚teams‘ wählen.“), und der Fokus springt ins erste ungültige Feld.
Der Dialog unterstützt noch nicht zusammengesetzte
Primärschlüssel, UNIQUE und Default-Werte – dafür die
SQL-Konsole (oder „Tabellen aus Modell erstellen“). Fremdschlüssel
verweisen nur auf vorhandene Tabellen: Die neue Tabelle
selbst steht im Feld „Fremdschlüssel: Tabelle“ noch nicht zur Auswahl.
Schlüssel und Typen in den Spaltenköpfen: In jeder
Tabellenansicht tragen die Spaltenköpfe ein Badge, falls die Spalte
ein Schlüssel ist: PK = Primärschlüssel (eigene
Tabellenspur), FK = Fremdschlüssel (Beziehung zu einer
anderen Tabelle). So sieht man auf einen Blick, welche Spalten die
Beziehungen aus dem Relationenmodell tragen. Mit dem Schalter
„Typen anzeigen“ (über den Tabellen, standardmäßig
aus) erscheinen zusätzlich die deklarierten Spaltentypen (z. B.
INT, VARCHAR(50)) – hilfreich, um die
richtigen Werttypen einzugeben.
Tabelle löschen: Hinter jeder Tabellen-Überschrift steht ein Mülleimer-Button (🗑). Beim Klick erscheint eine Bestätigungsmeldung mit der Zeilenanzahl; zusätzlich wird gewarnt, falls andere Tabellen die Tabelle per Fremdschlüssel referenzieren oder sie im Modell (Reiter „Modell“) enthalten ist – dann wird der Modell-Eintrag samt Relationen mit entfernt. Enthält eine referenzierende Tabelle noch Zeilen, kann die Tabelle nicht gelöscht werden (Fremdschlüssel); die Meldung zeigt, welche Zeilen zuerst gelöscht werden müssen. Mit „Abbrechen“ bleibt alles unverändert.
5. Daten eintragen
Variante A: SQL (schnell, mehrere Zeilen auf einmal)
In der SQL-Konsole, z. B.:
INSERT INTO rennstrecke VALUES (1, 'Nürburgring', 52);
INSERT INTO rennstrecke VALUES (2, 'Hockenheimring', 45);
INSERT INTO teamleiter VALUES (1, 'Klaus', 'Meier', 'meier@msc-nfis.de');
INSERT INTO teamleiter VALUES (2, 'Anja', 'Schulz', 'schulz@msc-nfis.de');
INSERT INTO teams VALUES (1, 'Flugteam Nord', 1);
INSERT INTO teams VALUES (2, 'Sturmflieger', 2);
INSERT INTO teams VALUES (3, 'Alpina Speed', 1);
INSERT INTO rennveranstaltung VALUES (1, '2026-04-12', 'Westmünster-Cup', 1);
INSERT INTO rennveranstaltung VALUES (2, '2026-06-20', 'Alpha-Challenge', 2);
INSERT INTO teilnahmen VALUES (1, 1, 1, 2);
INSERT INTO teilnahmen VALUES (2, 2, 1, 1);
INSERT INTO teilnahmen VALUES (3, 1, 2, 3);
INSERT INTO fahrer VALUES (1, 'Ben', 'Albers', 'FIA-2026-011', 1);
INSERT INTO fahrer VALUES (2, 'Lina', 'Kurz', 'FIA-2026-027', 2);
INSERT INTO mechaniker VALUES (1, 'Paul', 'Winter', '0171 2345678', 1);
Pro Befehl steht „1 Zeile betroffen.“. Daten werden im Format
JJJJ-MM-TT geschrieben (z. B. '2026-04-12').
Fremdschlüssel-Reihenfolge: Zuerst die Tabellen, auf die
verwiesen wird (hier rennstrecke und teamleiter), dann
teams, rennveranstaltung, fahrer, mechaniker –
und zuletzt teilnahmen. Wer eine Zeile in teams speichern
will, deren teamleiternr es in teamleiter noch nicht gibt, erhält:
„Fremdschlüssel-Verletzung: Die Aktion verletzt eine Referenz zu einer
anderen Tabelle.“
Variante B: Formular (Zeile für Zeile)
- Tabellen und Daten → Button „Neue Zeile für fahrer hinzufügen“.
-
Im Formular gibt es ein Feld pro Spalte. Die Feldbezeichnung zeigt
Name und Typ, z. B. „lizenznr (VARCHAR(50)) (Pflicht)“ – Pflichtfelder
tragen das Wort „(Pflicht)“ zusätzlich. Bei Tabellen mit
AUTO_INCREMENT-Primärschlüssel trägt das ID-Feld stattdessen „(automatisch)“: Es ist beim Hinzufügen mit dem nächsten Wert vorbelegt, darf aber auch selbst belegt oder leer gelassen werden (dann wird der nächste Wert automatisch vergeben). - Alle Felder ausfüllen, Button Speichern drücken.
- Bestätigung: „Gespeichert um …“. Bei Fehlern steht die Meldung direkt unter dem Feld (z. B. Pflichtfeld, „muss eine ganze Zahl sein“, Datum im Format JJJJ-MM-TT, Primärschlüsselwert bereits vergeben) und der Fokus springt ins erste ungültige Feld.
Zeile ändern: Button „Zeile 2 (Ben) ändern“ → Formular mit den aktuellen Werten → Speichern.
Zeile löschen: Button „Zeile 2 (Ben) löschen“. Solange andere
Zeilen darauf weisen (z. B. teilnahmen auf das Team), wird das Löschen
mit einer Fremdschlüssel-Verletzung abgelehnt – zuerst die verweisenden
Zeilen löschen.
6. Abfragen (SELECT)
Abfragen laufen ebenfalls in der SQL-Konsole. Das Ergebnis erscheint als Tabelle mit der Anzahl der Zeilen als Überschrift.
1. Alle Rennveranstaltungen
SELECT * FROM rennveranstaltung;
2. Auf welcher Strecke findet welche Veranstaltung statt (JOIN)
SELECT rv.veranstaltungsname, rs.streckenname
FROM rennveranstaltung AS rv
JOIN rennstrecke AS rs ON rv.streckennr = rs.streckennr
ORDER BY rv.veranstaltungsdatum;
3. Welches Team hat welche Veranstaltung gewonnen (JOIN + WHERE)
SELECT t.teambezeichnung, rv.veranstaltungsname
FROM teilnahmen AS tn
JOIN teams AS t ON tn.teamnr = t.teamnr
JOIN rennveranstaltung AS rv ON tn.veranstaltungsnr = rv.veranstaltungsnr
WHERE tn.teamplatzierung = 1;
4. Wie viele Teams sind bei jeder Veranstaltung gestartet (GROUP BY + COUNT)
SELECT veranstaltungsnr, COUNT(*) AS teilnehmer
FROM teilnahmen
GROUP BY veranstaltungsnr;
5. Alle Fahrer eines Teams (WHERE)
SELECT vorname, nachname FROM fahrer WHERE teamnr = 1;
Tipp: Die letzten 20 ausgeführten Befehle je Datenbank stehen in der Historie darunter – ein Klick legt den Befehl wieder ins Textfeld.
7. Hausaufgabe 3.3 „Schulen“ – Vorgehen
- Neue Datenbank anlegen, z. B.
schulen(Kleinschreibung). - Eigens das passende eERM / Relationenmodell erstellen (das ist der Auftrag!) – jede Entität und jede aufgelöste Vielmehr-zu-Vieler-Beziehung wird eine Tabelle.
-
Wie in Abschnitt 4: Für jede Tabelle ein
CREATE TABLEschreiben und alle Befehle gemeinsam ausführen. - Beispiel-Daten eintragen (SQL oder Formular), Fremdschlüssel-Reihenfolge beachten.
- Mit SELECT die geforderten Informationen abfragen.
8. Daten speichern und exportieren
- Nach jeder Änderung wird die Datenbank automatisch gespeichert („Gespeichert um …“). Beim nächsten Öffnen des Browsers ist alles da.
- Neuladen (F5): Die gerade geöffnete Datenbank und das Modell bleiben im selben Tab erhalten – die App öffnet die Datenbank beim Neuladen automatisch wieder. Erst wenn der Tab geschlossen wird, startet die App wieder bei der Datenbank-Liste (die Daten selbst sind natürlich trotzdem gespeichert).
- Wichtig: Die Daten liegen nur in diesem Browser. Wer die Speicherdaten des Browsers löscht oder auf einem anderen PC arbeitet, hat die Daten nicht mehr. Vor Abgabe/Transport also exportieren:
-
CSV (je Tabelle): Button „CSV exportieren“ → Datei
<tabelle>.csv(Semikolon getrennt, öffnet direkt in Excel). -
Excel (alle Tabellen): Button „Excel-Export (alle
Tabellen)“ (oben über den Tabellen, neben „Neue Tabelle“) → Datei
<datenbank>-daten.xlsxmit einem Tabellenblatt je Tabelle. Die erste Zeile eines Blatts zeigt die Spaltennamen – Primär- und Fremdschlüssel-Spalten sind dort mit[PK]bzw.[FK]vermerkt – darunter alle Zeilen der Tabelle. Ganze Zahlen (INT-Spalten) werden als Zahlen übernommen, Text bleibt Text. -
SQL-Skript (ganze Datenbank): Button „SQL-Skript exportieren“ (ebenfalls oben) →
Datei
<datenbank>.sqlmit allenCREATE TABLE- undINSERT-Befehlen (inBEGIN; … COMMIT;). Das Skript dient der Abgabe und Doku und kann in anderen SQL-Werkzeugen geöffnet werden.
9. Was die App kann – und was nicht
Die App arbeitet mit einer Datenbank-Engine im Browser (SQLite), nicht mit einem MySQL-Server. Deshalb:
-
Unterstützt:
CREATE TABLE,ALTER TABLE,DROP TABLE,INSERT,UPDATE,DELETE,SELECT(mit JOINs, WHERE, GROUP BY, ORDER BY und Aggregatfunktionen). -
Wird automatisch entfernt (mit Hinweis):
ENGINE=…,CHARSET/CHARACTER SET,COLLATE,UNSIGNED, tableseitigeAUTO_INCREMENT=…-Startwerte undAUTO_INCREMENTan Spalten ohne (einspaltigen ganzen-Zahl-)Primärschlüssel, Index-Klauseln (KEY/UNIQUE KEY/INDEX) und schema-qualifizierte Namen (das Präfix wird entfernt, die geöffnete Datenbank wird verwendet). -
Wird emuliert:
AUTO_INCREMENTan einspaltigen ganzen-Zahl-Primärschlüsseln (Schreibweise im DDL oder „Tabellen aus Modell erstellen“) – fehlende Schlüsselwerte werden automatisch vergeben: monoton, keine Wiedervergabe nach Löschung, explizite Werte erlaubt (wie MySQL/InnoDB). -
Wird ignoriert (mit Hinweis, keine Wirkung):
SET,CREATE DATABASE/USE,LOCK TABLES/UNLOCK TABLES– z. B. aus den offiziellen MySQL-Skripten. -
MySQL-kompatible Funktionen:
YEAR,MONTH,NOW,DATEDIFF,FORMAT– zusätzlich zu den SQLite-Funktionen. -
Nicht unterstützt:
SHOW, Prozeduren/Funktionen, Trigger. - Anders als MySQL-Standard: Fremdschlüssel-Prüfung ist immer aktiv.
-
Daten sind Texte im Format
JJJJ-MM-TT(z. B.'2026-04-12'). - Keine Konten, keine Synchronisation zwischen PCs – jede Arbeitstation hat ihre eigenen Daten.
10. Fehlermeldungen – Schnellübersicht
| Meldung | Bedeutung | Lösung |
|---|---|---|
| Ungültiger Datenbankname: Bitte Kleinschreibung verwenden … | Name nicht zulässig | Nur Kleinbuchstaben, Ziffern, _; erster Buchstabe ein Buchstabe |
| Fremdschlüssel-Verletzung: Die Aktion verletzt eine Referenz zu einer anderen Tabelle. | Verwiesene Zeile fehlt oder wird noch referenziert | Referenzierte Zeile zuerst anlegen bzw. verweisende Zeilen zuerst löschen |
| Eindeutigkeits-Verletzung: Dieser Wert ist in dieser Tabelle bereits vergeben. | Primärschlüsselwert existiert schon | Anderen Wert vergeben |
| Pflichtfeld-Verletzung: Eine Spalte ohne Wert darf nicht leer bleiben. | NOT-NULL-Spalte ist leer | Wert eintragen |
| Hinweis: AUTO_INCREMENT wurde entfernt; Primärschlüsselwerte liefert die Datenbasis … | AUTO_INCREMENT an Nicht-Primärschlüssel oder tableseitiger Startwert (AUTO_INCREMENT=…) im DDL |
Klausel streichen bzw. Wert selbst vergeben (AUTO_INCREMENT an Primärschlüsseln wird automatisch emuliert) |
| SQL-Fehler: near „…“ | Tipp- oder Syntaxfehler | Schreibweise, Anführungszeichen, Semikola prüfen |
11. Modell (eERD)
Im Bereich Modell entsteht das relationale
Datenmodell (eERD). Im Textfeld „Diagramm-Code“ steht Mermaid-Code im
Format erDiagram (Entitäten, Attribute, Relationen –
Syntax-Hilfe über den Hilfe-Dialog, Alt+H).
- Drei Ansichten (Ansichts-Schalter „Beide / Nur SVG / Nur Text“): das SVG-Diagramm (kann per Pfeiltasten abgelaufen werden), der Diagramm-Baum (Chen-Layout, Pfeiltasten mit Hervorhebung im Diagramm – für Screenreader) und die Textansicht (Tabellen „Entitäten“ und „Relationen“).
- Darstellung (Schalter „Darstellung: Chen / eERD“ in der Toolbar, Standard: eERD): Die eERD (Workbench-Stil) zeigt die Tabellen als Boxen: Kopfzeile mit dem Tabellennamen, darunter je Spalte eine Zeile mit Name und Typ; Primär- und Fremdschlüssel sind markiert (PK-Icon: Schlüssel, FK-Icon: Link). Die Relationen sind Linien in Krähenfuß-Notation: Strich = genau eins, Kreis + Strich = null oder eins, Krähenfuß = viele, Krähenfuß + Strich = mindestens eins. Wie in der MySQL Workbench verbinden die Linien die Schlüssel-Zeilen (PK an der „1“-Seite, FK an der „∞“-Seite) an der Kasten-Seite; laufen mehrere Relationen auf dieselbe Schlüssel-Zeile, docken ihre Ansätze untereinander an (die Zeile wird bei Bedarf etwas erhöht), und parallele Linien laufen immer versetzt, nie deckungsgleich; läuft eine Linie über eine andere Tabelle hinweg, verläuft sie hinter dem Kasten. Eine gestrichelte Linie ist eine nicht-identifizierende Relation, eine doppelt umrissene Box eine schwache Entität. Relation-Labels werden nicht an die Linien gezeichnet – sie stehen im Diagramm-Baum und in der Textansicht. Chen ist das klassische ER-Diagramm (Entitäten, Attribute, Relation-Diamanten mit Labels).
-
Pfeiltasten im eERD:
←/→springen zyklisch zwischen den Tabellen,↓/↑durch die Relationen einer Tabelle (Home/Endzur ersten/letzten Relation); auf einer Relation führt→zur anderen Tabelle,←zurück zur Herkunft,↓/↑durch die Relationen der Herkunfts-Tabelle.Escspringt zurück ins Codefenster. - Beispiele: Dialog mit zwei Beispiel-Modellen (Kunde/Bestellung/Artikel und Fahrradvermietung) – „Übernehmen“ ersetzt das aktuelle Modell, bei gefülltem Modell gibt es vorher eine Bestätigung.
-
Zurücksetzen: nach Bestätigung steht nur der
Kopfzeilen-Eintrag
erDiagramim Textfeld – das Modell ist leer. -
Speicherung: Das Modell wird automatisch gespeichert
– je offener Datenbank eine eigene Version. Dazu:
Excel-Export (Entitäten und Relationen als
<datenbank>.xlsx) und JSON-Export/-Import (<datenbank>.json; Import ersetzt nach Bestätigung ein gefülltes Modell). Ohne geöffnete Datenbank werden Export und Import alsmodell.xlsxbzw.modell.jsongeladen. - Ohne Datenbank (freies Modell): Der Reiter Modell ist auch ohne geöffnete Datenbank nutzbar – z. B. als Einstieg in das Thema. Dann arbeitet die Ansicht mit einem eigenen freien Modell (ebenfalls automatisch gespeichert, übersteht Neuladen per F5). „Modell aus Datenbank erzeugen“ ist ohne DB nicht verfügbar. Über „DB aus Modell erstellen“ (Abschnitt 12) wird aus dem freien Modell eine neue Datenbank angelegt. Öffnet oder legt man stattdessen über den Reiter Datenbanken eine Datenbank an, wird das freie Modell nach Warnung verworfen (nicht wiederherstellbar) – die Datenbank zeigt ihr eigenes (noch leeres) Modell.
- Zwei Brücken zum Bereich „Tabellen und Daten“: „Tabellen aus Modell erstellen“ (Abschnitt 12) und „Modell aus Datenbank erzeugen“ (Abschnitt 13).
12. Tabellen aus dem Modell erstellen
Button „Tabellen aus Modell erstellen“ (Brücke
„Modell → Datenbank“): Das Modell wird in
CREATE TABLE-Befehle umgewandelt – Entitäten werden zu
Tabellen, Attribute zu Spalten, Relationen zu Fremdschlüsseln.
Viele-zu-viele- (M:N-)Relationen erzeugen eine
Zwischentabelle mit zwei Fremdschlüsseln als
zusammengesetztem Primärschlüssel.
Ohne geöffnete Datenbank (freies Modell) heißt der Button „DB aus Modell erstellen“: Zuerst wird in einem Namens-Dialog der Name der neuen Datenbank festgelegt (gleiche Namens-Regeln wie beim Anlegen; existierende Datenbanken werden nie überschrieben), danach erscheint die gewohnte DDL-Vorschau. Nach Erstellen wird die Datenbank angelegt und geöffnet, die Tabellen werden über die Konsolen-Pipeline erzeugt (Notizen und Status erscheinen dort), und das Modell gehört von diesem Moment an zur neuen Datenbank – das freie Modell ist damit abgeschlossen.
-
Zuerst erscheint eine DDL-Vorschau: alle
CREATE TABLE-Befehle, die Tabellen-Namen und eventuelle Hinweise. Erst mit Erstellen geht es weiter. - Existiert eine der Tabellen schon, zeigt die App einen Kollisions-Dialog mit den betroffenen Tabellen und deren Zeilenzahl – Sie entscheiden: Fortfahren (vorhandene Tabellen werden gelöscht, Datenverlust!) oder Abbrechen. Gelöscht wird nie automatisch.
- Danach werden die Tabellen in der offenen Datenbank angelegt; die Datenbank wird gespeichert und die neuen Tabellen sind unter „Tabellen und Daten“ zu sehen.
Die Ergebnisse (Notizen und Status) erscheinen in einem Fenster am
unteren Bildschirmrand, das Sie über den Button
„Schließen“ oder die Taste Esc
schließen. Nach einem erfolgreichen Lauf verschwindet das Fenster
nach etwa 10 Sekunden automatisch (der Countdown pausiert, solange
die Maus über dem Fenster ist). Bei Fehlern bleibt das Fenster
sichtbar, bis Sie es bewusst schließen.
13. Modell aus der Datenbank erzeugen
Button „Modell aus Datenbank erzeugen“ (Brücke
„Datenbank → Modell“): Die App liest die Tabellen und
Fremdschlüssel der offenen Datenbank und erzeugt daraus das
erDiagram-Modell.
- Erkannt wird: 1:1 (Fremdschlüssel-Spalte ist der Primärschlüssel bzw. eine eindeutige Spalte der eigenen Tabelle), 1:N (gewöhnlicher Fremdschlüssel) und M:N.
- Eine Tabelle mit genau zwei Fremdschlüssel-Spalten, die zusammen der Primärschlüssel sind, wird als Zwischentabelle (M:N) erkannt: Sie ist keine eigene Entität im Modell, die Relation wird mit ihrem Tabellennamen beschriftet.
- Ist der Modell-Editor nicht leer, fragt die App vorher, ob das aktuelle Modell ersetzt werden darf – gemergt wird nichts.
- Ohne Tabellen: Statusmeldung „hat noch keine Tabellen“ und Abbruch.
14. Skriptdatei importieren
In der SQL-Konsole lädt der Button
„Skriptdatei importieren (.sql)“ eine SQL-Datei
direkt in das Textfeld. Ist das Textfeld nicht leer, wird vor dem
Ersetzen gefragt („Das aktuelle SQL-Feld wird ersetzt. Weiter?“).
Danach läuft die Datei mit Ausführen (oder
Strg+Enter) ab – die offiziellen Unterrichtsskripte
(z. B. kino, sql_island,
fahrradvermietung) lassen sich so ohne
Änderungen importieren und ausführen.
15. Große Tabellen
- Im Bereich Tabellen und Daten werden große Tabellen paginiert (100 Zeilen pro Seite) mit Anzeige „Seite k von m“ und den Buttons „Vorherige Seite“ / „Nächste Seite“. Der CSV-Export liefert die ganze Tabelle, nicht nur die sichtbare Seite.
- In der SQL-Konsole werden Abfrageergebnisse auf höchstens 200 Zeilen angezeigt (Hinweis: „Zeigt die ersten 200 von … Zeilen – bitte mit LIMIT oder WHERE filtern.“).
- Die Daten selbst bleiben vollständig in der Datenbank – gekürzt wird nur die Anzeige.
16. Bildanalyse (online)
Der Button „Aus Bild“ im Bereich Modell
wandelt ein Foto oder einen Upload eines (auch handgezeichneten)
ER-Diagramms in erDiagram-Code um – nach Bestätigung
ersetzt er das aktuelle Modell.
- Nur mit Internetverbindung: Das Bild wird an einen OpenWebUI-Endpunkt gesendet. Offline ist die Funktion nicht verfügbar.
- Unter Einstellungen (Button im Modell-Toolbar) tragen Sie die OpenWebUI-URL, den API-Schlüssel und ein bildfähiges Modell ein. Die Werte werden nur lokal in diesem Browser gespeichert.
17. Aktualisierungen
Wird eine neue Version der App bereitgestellt, erscheint oben ein Banner: „Neue Version der App ist verfügbar.“ – mit den Buttons „Jetzt laden“ und „Später“. Das Update ist eine bewusste Entscheidung („opt-in“) und läuft nie automatisch: Bei „Jetzt laden“ wird die neue Version geladen, bei „Später“ verschwindet das Banner (es erscheint bei der nächsten Aktualisierungs-Phase erneut).