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.
📚 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