Zum Abschluss unserer Serie setzen wir alle bisherigen Konzepte zu einem kompletten Beispielprojekt zusammen: eine kleine Datenbank für einen Online-Shop.
Dabei nutzen wir Primär- & Fremdschlüssel, 1:n- und n:m-Beziehungen, Indexe, Views und Transaktionen.
🔹 Projektidee: Mini-Shop
- Kunden können sich registrieren.
- Produkte werden im Shop angeboten.
- Kunden legen Bestellungen an (1:n-Beziehung).
- Eine Bestellung enthält mehrere Produkte (n:m-Beziehung über Zwischentabelle).
🔹 Datenbank vorbereiten
Falls noch nicht geschehen:
CREATE DATABASE shopdb; USE shopdb;
🔹 Tabellen anlegen
Kunden
CREATE TABLE kunden ( id INT AUTO_INCREMENT PRIMARY KEY, vorname VARCHAR(50) NOT NULL, nachname VARCHAR(50) NOT NULL, email VARCHAR(120) NOT NULL UNIQUE, erstellt_am DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP );
Produkte
CREATE TABLE produkte ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, preis DECIMAL(10,2) NOT NULL, lagerbestand INT NOT NULL DEFAULT 0 );
Bestellungen
CREATE TABLE bestellungen ( id INT AUTO_INCREMENT PRIMARY KEY, kunde_id INT NOT NULL, bestelldatum DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (kunde_id) REFERENCES kunden(id) ON DELETE CASCADE );
Bestellpositionen (Zwischentabelle für n:m)
CREATE TABLE bestellpositionen ( bestellung_id INT NOT NULL, produkt_id INT NOT NULL, menge INT NOT NULL DEFAULT 1, PRIMARY KEY (bestellung_id, produkt_id), FOREIGN KEY (bestellung_id) REFERENCES bestellungen(id) ON DELETE CASCADE, FOREIGN KEY (produkt_id) REFERENCES produkte(id) ON DELETE CASCADE );
🔹 Beispiel-Daten einfügen
Kunden
INSERT INTO kunden (vorname, nachname, email) VALUES ('Anna', 'Becker', 'anna@example.org'), ('Tom', 'Schmidt', 'tom@example.org');
Produkte
INSERT INTO produkte (name, preis, lagerbestand) VALUES ('Laptop', 999.00, 10), ('Maus', 25.50, 50), ('Monitor', 199.90, 20);
Bestellung + Positionen
INSERT INTO bestellungen (kunde_id) VALUES (1); INSERT INTO bestellpositionen (bestellung_id, produkt_id, menge) VALUES (1, 1, 1), -- 1x Laptop (1, 2, 2); -- 2x Maus
🔹 Praktische Abfragen
Bestellungen mit Kundendaten
SELECT k.vorname, k.nachname, b.id AS bestell_id, b.bestelldatum FROM kunden k JOIN bestellungen b ON k.id = b.kunde_id;
Produkte in einer Bestellung
SELECT p.name, p.preis, bp.menge FROM bestellpositionen bp JOIN produkte p ON bp.produkt_id = p.id WHERE bp.bestellung_id = 1;
Gesamtausgaben pro Kunde
SELECT k.vorname, k.nachname, SUM(p.preis * bp.menge) AS gesamt FROM kunden k JOIN bestellungen b ON k.id = b.kunde_id JOIN bestellpositionen bp ON b.id = bp.bestellung_id JOIN produkte p ON bp.produkt_id = p.id GROUP BY k.id;
🔹 View anlegen
Eine View für alle Bestellungen mit Kunde + Summe:
CREATE VIEW bestelluebersicht AS SELECT k.vorname, k.nachname, b.id AS bestell_id, SUM(p.preis * bp.menge) AS gesamt FROM kunden k JOIN bestellungen b ON k.id = b.kunde_id JOIN bestellpositionen bp ON b.id = bp.bestellung_id JOIN produkte p ON bp.produkt_id = p.id GROUP BY b.id;
Nutzung:
SELECT * FROM bestelluebersicht;
🔹 Transaktion – Bestellung einfügen & Lagerbestand reduzieren
START TRANSACTION; INSERT INTO bestellungen (kunde_id) VALUES (2); SET @bestellung_id = LAST_INSERT_ID(); INSERT INTO bestellpositionen (bestellung_id, produkt_id, menge) VALUES (@bestellung_id, 3, 1); UPDATE produkte SET lagerbestand = lagerbestand - 1 WHERE id = 3; COMMIT;
👉 Hinweis: Entweder wird alles ausgeführt oder bei einem Fehler mit ROLLBACK
zurückgesetzt.
🔹 Übung
- Lege einen neuen Kunden und eine Bestellung mit mehreren Produkten an.
- Erstelle eine Abfrage, die dir den Lagerbestand aller Produkte nach der Bestellung anzeigt.
- Baue eine View, die dir pro Kunde den aktuellen Gesamtwert aller Bestellungen anzeigt.
✅ Zusammenfassung
- Mit kunden, produkte, bestellungen und bestellpositionen hast du ein komplettes Shop-Datenmodell.
- Du kannst CRUD-Befehle, JOINs, GROUP BY und Aggregatfunktionen kombinieren.
- Mit Views vereinfachst du wiederkehrende Abfragen.
- Mit Transaktionen sicherst du die Datenintegrität.
Damit hast du den Kurs von den Grundlagen bis zur produktiv nutzbaren Datenbank abgeschlossen 🎉.
📚 Inhaltsverzeichnis
👉 MariaDB Kapitel 1: Einführung & Installation im Terminal
👉 MariaDB Kapitel 2: Benutzer & Rechteverwaltung
👉 MariaDB Kapitel 3: Tabellen sauber anlegen (Primär- & Fremdschlüssel)
👉 MariaDB Kapitel 4: Grundbefehle & Kurzschreibweisen in der MariaDB-Konsole
👉 MariaDB Kapitel 5: CRUD-Befehle – Daten einfügen, lesen, ändern und löschen
👉 MariaDB Kapitel 6: Primär- und Fremdschlüssel – Tabellen verknüpfen
👉 MariaDB Kapitel 7: Profi-Abfragen mit JOIN, GROUP BY & Aggregatfunktionen
👉 MariaDB Kapitel 8: Indexe, Views & Transaktionen
👉 MariaDB Kapitel 9: Produktivbetrieb – Sicherheit, Backups & Verwaltung
👉 MariaDB Kapitel 10: Abschlussprojekt – Ein Mini-Shop
📚 Bonus-Kapitel Ideen
👉 MariaDB Kapitel 11: Stored Procedures – Automatisierte Abläufe
👉 MariaDB Kapitel 12: Trigger – Aktionen bei Änderungen
👉 MariaDB Kapitel 13: Events – Zeitgesteuerte Aufgaben
👉 MariaDB Kapitel 14: Sicherheit & Best Practices
👉 MariaDB Kapitel 15: Performance-Tuning & Optimierung