Datenmodell-Schulungskonsole

Interaktive Schulungsoberfläche für relationale Normalisierung in SQL und flexible Dokumentmodelle in MongoDB.

SQL + MongoDB
Relationen & Regeln
SQL-Track · Schritt 5 / 5

Ergebnis

Die Oberfläche zeigt den Weg von Excel-Rohdaten über Qualitätsprobleme und Bereinigung bis zur relational normalisierten Datenbank.

Schulungsfluss aktiv
Schritt 5: Vorher-Nachher-Vergleich — Was hat die Normalisierung gebracht? Hier sehen Sie die konkreten Vorteile einer relationalen Datenbank gegenüber Excel.
150
Kunden
500
Produkte
200
Bestellungen
572
Positionen
15
Kategorien
8
Tabellen

📋 Detaillierter Vergleich

AspektVorher (Excel)Nachher (relationale DB)Vorteil
Tabellenanzahl3 Tabellen (alles in Freitext)8 Tabellen (typisiert, verknüpft)Klare Struktur, keine Redundanz
Kundendaten in BestellungenName, Ort, PLZ in jeder Bestellung wiederholtNur kunden_id als FremdschlüsselÄnderung an einer Stelle reicht (keine Update-Anomalie)
Produkte pro BestellungAlle Produkte in EINER Zelle (Komma-getrennt)Eigene Tabelle bestellpositionen: 1 Zeile pro Produkt1. Normalform: Abfragen wie "Umsatz pro Produkt" sind jetzt einfach
Kategorien"Elektronik", "ELEKTRONIK", "elekt." — alles verschiedenEigene Tabelle kategorien mit IDEindeutige Zuordnung, keine Tippfehler möglich
Preise"12,99" und "12.99" gemischt (Text)DECIMAL(10,2) — immer korrektRechnen, Summieren, Vergleichen funktioniert zuverlässig
Datumsformate"23.04.1990", "1990-04-23", "12.3.78" gemischtDATE-Typ — ein einheitliches FormatSortieren, Filtern nach Zeiträumen, Altersberechnung möglich
DatenintegritätBestellungen können auf nicht-existente Kunden verweisenFOREIGN KEY verhindert ungültige ReferenzenDatenbank garantiert Konsistenz
LieferantenLieferantenname als Freitext in jedem ProduktEigene Tabelle lieferanten mit IDLieferant umbenennen? Eine Stelle ändern statt hunderte

🔎 Abfragen, die jetzt einfach möglich sind

Umsatz pro Kategorie

SELECT k.name AS Kategorie, SUM(bp.menge * bp.einzelpreis) AS Umsatz FROM bestellpositionen bp JOIN produkte p ON p.id = bp.produkt_id JOIN kategorien k ON k.id = p.kategorie_id GROUP BY k.name ORDER BY Umsatz DESC;
KategorieBestellungenStück verkauftUmsatz
Werkzeug48307146.790,44 €
Möbel49269131.364,51 €
Auto & Motorrad32222129.292,85 €
Lebensmittel48289122.514,97 €
Kleidung34212120.397,58 €
Musik32213118.456,91 €
Bücher32176111.818,15 €
Garten32181101.713,57 €
Sport4322694.514,92 €
Elektronik2414789.757,79 €
Kosmetik4525689.065,57 €
Haushalt3016880.226,75 €
Bürobedarf2415461.737,48 €
Spielzeug2012549.995,47 €
Tierbedarf2712644.131,97 €

Top-10 Kunden nach Bestellvolumen

SELECT CONCAT(k.vorname, ' ', k.nachname) AS Kunde, COUNT(DISTINCT b.id) AS Bestellungen, SUM(bp.menge * bp.einzelpreis) AS Gesamt FROM kunden k JOIN bestellungen b ON b.kunden_id = k.id JOIN bestellpositionen bp ON bp.bestellung_id = b.id GROUP BY k.id ORDER BY Gesamt DESC LIMIT 10;
KundeOrtBestellungenGesamtumsatz
Doris WinterKöln343.130,73 €
Norbert MeyerWürzburg342.487,96 €
Ottilie SchmidUlm339.684,67 €
Jan KuhnDresden337.342,72 €
Paul LorenzNürnberg337.049,10 €
Erik KellerBochum235.343,32 €
Xaver WinterFreiburg330.992,99 €
Manfred SchröderRegensburg330.383,48 €
Hans WolfPotsdam330.034,93 €
Wolfgang SchmidPotsdam328.227,30 €

Bestellungen pro Monat

SELECT DATE_FORMAT(bestelldatum, '%Y-%m') AS Monat, COUNT(*) AS Anzahl FROM bestellungen GROUP BY Monat ORDER BY Monat;
MonatAnzahl_Bestellungen
2024-015
2024-028
2024-039
2024-044
2024-054
2024-062
2024-077
2024-087
2024-097
2024-102
2024-119
2024-123
2025-012
2025-027
2025-038
2025-045
2025-0510
2025-064
2025-074
2025-083
2025-096
2025-104
2025-117
2025-126
2026-016
2026-0210
2026-037
2026-046
2026-055
2026-065
2026-073
2026-084
2026-097
2026-106
2026-112
2026-126

Produkte mit geringem Lagerbestand pro Lieferant

SELECT l.name AS Lieferant, p.produktname, p.lagerbestand FROM produkte p JOIN lieferanten l ON l.id = p.lieferant_id WHERE p.lagerbestand < 10 ORDER BY p.lagerbestand;
LieferantProduktBestandPreis
ZentralEinkauf AGPro Stuhl0360,64 €
TopWaren AGBasic Essig0369,84 €
MegaSupply GmbHDeluxe Olivenöl2130,93 €
(kein Lieferant)Kompakt Geschirrtuch2388,19 €
NordHandel OHGEco Kratzbrett4738,79 €
AllGoods Ltd.Basic Rock4463,22 €
AllGoods Ltd.Kompakt Schraubendreher-Set5414,62 €
ZentralEinkauf AGStandard Mikrofon646,92 €
SüdImport GmbHKompakt Mehl6263,35 €
TopWaren AGKompakt Mütze6548,05 €
Europarts KGEco Mikrofon9948,13 €

📚 Zusammenfassung: Warum relationale Datenbanken?

1. Normalform (1NF): Atomare Werte

Jede Zelle enthält genau einen Wert. Keine Listen, keine Komma-getrennten Einträge.

2. Normalform (2NF): Volle funktionale Abhängigkeit

Alle Nicht-Schlüssel-Attribute hängen vollständig vom Primärschlüssel ab.

3. Normalform (3NF): Keine transitiven Abhängigkeiten

Der Kategoriename wird nicht bei jedem Produkt wiederholt → eigene Tabelle mit ID.

Fremdschlüssel = Datenintegrität

Fremdschlüssel verhindern, dass Bestellungen auf nicht existierende Kunden verweisen.

Datentypen = Korrektheit

DATE statt Text → Sortierung funktioniert. DECIMAL statt Text → Rechnen funktioniert.