👁️ 1. Virtuelle Tabellen mit CREATE VIEW
Ein View ist eine gespeicherte SELECT-Abfrage, die sich nach außen wie eine echte Tabelle verhält.
Er speichert keine doppelten Daten auf der Festplatte, sondern führt die zugrundeliegende Abfrage dynamisch bei jedem Zugriff aus:
-- 🎯 Komplexe 4-Tabellen Joins in einem wiederverwendbaren View kapseln:
CREATE VIEW IF NOT EXISTS v_kunden_cockpit AS
SELECT
k.id AS kunde_id,
k.name,
k.email,
COUNT(b.id) AS anzahl_bestellungen,
COALESCE(SUM(b.gesamtbetrag), 0.0) AS umsatz_gesamt
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id
GROUP BY k.id, k.name, k.email;
-- Abfrage wie auf eine normale Tabelle:
SELECT * FROM v_kunden_cockpit WHERE umsatz_gesamt > 500;
⚡ 2. Datenbank-Trigger: Reaktive Event-Logik
Ein Trigger wird automatisch von der Datenbank-Engine ausgeführt, sobald ein DML-Ereignis (INSERT, UPDATE, DELETE) auf einer Tabelle eintritt.
Über die Pseudo-Datensätze NEW und OLD greifst du auf die geänderten Werte zu:
✨ NEW (Neue Daten)
Verfügbar bei INSERT und UPDATE. Enthält die neu geschriebenen Spaltenwerte (z.B. NEW.menge).
📜 OLD (Alte Daten)
Verfügbar bei UPDATE und DELETE. Enthält die Werte vor der Änderung (z.B. OLD.preis).
-- 🎯 Automatisches Audit-Log bei Preisänderungen:
CREATE TRIGGER trg_preis_audit
AFTER UPDATE OF preis ON produkte
FOR EACH ROW
BEGIN
INSERT INTO preis_historie (produkt_id, alter_preis, neuer_preis, datum)
VALUES (OLD.id, OLD.preis, NEW.preis, datetime('now'));
END;
🏭 3. Didaktische Analogie: Der Fotoabzug & der Rauchmelder
View (Das Fernglas): Du schaust durch das Fernglas (SELECT * FROM v_report) und siehst immer in Echtzeit die aktuelle Landschaft, ohne dass die Landschaft dupliziert werden muss.
Trigger (Der Bewegungsmelder): Sobald jemand durch die Tür geht (INSERT INTO bestellung), schaltet der Bewegungsmelder automatisch das Licht an und schließt die Lagertür (UPDATE lager SET bestand = ...), ohne dass der Besucher daran denken muss.
📑 4. Cheat-Sheet: Views & Trigger Syntax
| Objekt | Syntax | Einsatzzweck |
|---|---|---|
CREATE VIEW |
CREATE VIEW v_name AS SELECT ... |
Abstraktion, Reporting-Pipelines, Daten-Maskierung |
DROP VIEW |
DROP VIEW IF EXISTS v_name; |
Sicheres Löschen veralteter Views |
AFTER INSERT TRIGGER |
CREATE TRIGGER t AFTER INSERT ON tab BEGIN ... END; |
Automatische Lager-Updates, Benachrichtigungen |
AFTER UPDATE TRIGGER |
CREATE TRIGGER t AFTER UPDATE OF col ON tab BEGIN ... END; |
Revisionssichere Historisierung & Compliance-Logs |
🧠 Diagnostischer Selbst-Check
Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.
🎯 5. Aufgaben & Checkliste in aufgabe.sql
Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben: