💎 Lehrpfad 4: Performance, Transaktionen & Master

SQL 15: Virtuelle Views & Datenbank-Trigger

Kapsle komplexe Abfragen in saubere virtuelle Sichten (CREATE VIEW) und automatisiere Geschäftslogik, Audit-Logging und Lagerbestandskorrekturen mit Datenbank-Triggern (CREATE TRIGGER).

📂 Dateien dieser Lerneinheit:
📄 aufgabe.sql (Startercode) 🧪 test_aufgabe.sql (Testsuite) 💡 musterloesung.sql (Lösung) 📖 README.md

👁️ 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 & Trigger im Vergleich

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:

💻 In Web-IDE öffnen & lösen →