Skip to content

Kapitel 20: Erweiterte Lernschwerpunkte ⭐

Sie haben die MySQL-Grundlagen gemeistert! Was nun? In diesem Kapitel lernen Sie Erweiterte Themen und wohin Sie als nächstes gehen können.


20.1 MySQL-erweiterte Eigenschaften (Optional, für Fortgeschrittene)

1. Gespeicherte Prozeduren (Stored Procedures) – Wiederholung & Vertiefung

Was ist das? Eine Gruppe von SQL-Befehlen, die zusammen gespeichert werden.

Vorteile:

  • Leistung: Werden auf dem Server ausgeführt (weniger Netzwerkverkehr)
  • Sicherheit: Berechtigungen können auf Prozeduren beschränkt werden
  • Wiederverwendbarkeit: Einmal schreiben, oft aufrufen

Beispiel:

sql
DELIMITER $$
CREATE PROCEDURE get_user_orders(IN p_user_id INT)
BEGIN
    SELECT 
        o.order_id,
        p.product_name,
        o.quantity
    FROM orders o
    INNER JOIN products p ON o.product_id = p.product_id
    WHERE o.user_id = p_user_id;
END $$
DELIMITER ;

-- Prozedur aufrufen
CALL get_user_orders(1);

2. Trigger (Auslöser) – Wiederholung & Vertiefung

Was ist das? Automatische Aktionen, die bei INSERT/UPDATE/DELETE ausgelöst werden.

Beispiel:

sql
-- Trigger: Automatische E-Mail-Normalisierung
DELIMITER $$
CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.email = LOWER(NEW.email);  -- E-Mail in Kleinbuchstaben umwandeln
END $$
DELIMITER ;

3. Sichten (Views) – Wiederholung & Vertiefung

Was ist das? Eine "virtuelle Tabelle" (eigentlich eine gespeicherte Abfrage).

Vorteile:

  • Sicherheit: Verbirgt sensible Daten (z.B. password_hash nicht anzeigen)
  • Einfachheit: Komplexe Abfragen vereinfachen

Beispiel:

sql
-- Sicht: Nur aktive Benutzer anzeigen
CREATE VIEW active_users AS
SELECT 
    user_id,
    username,
    email
FROM users
WHERE is_active = TRUE;

-- Sicht verwenden
SELECT * FROM active_users;

4. Benutzerdefinierte Funktionen (User-Defined Functions)

Was ist das? Eigene Funktionen erstellen (wie eingebaute Funktionen CONCAT(), NOW()).

Beispiel:

sql
DELIMITER $$
CREATE FUNCTION calculate_discount(
    price DECIMAL(10,2), 
    discount_percent INT
)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
    DECLARE discounted_price DECIMAL(10,2);
    SET discounted_price = price * (1 - discount_percent / 100);
    RETURN discounted_price;
END $$
DELIMITER ;

-- Funktion verwenden
SELECT 
    product_name,
    price,
    calculate_discount(price, 10) AS discounted_price
FROM products;

20.2 MySQL-Cluster und Hochverfügbarkeit (Nur Grundlegendes wissen)

Hinweis: Dies ist ein unternehmenskritisches Thema. Für Einsteiger reicht ein grundlegendes Verständnis.

Was ist ein MySQL-Cluster?

Eine Gruppe von MySQL-Servern, die zusammenarbeiten, um:

  • Hochverfügbarkeit (Ausfall einer Maschine → andere übernehmen)
  • Lastverteilung (Lesezugriffe auf mehrere Server verteilen)
  • Datensicherheit (Daten auf mehreren Servern)

Architekturen (Kurzüberblick):

ArchitekturBeschreibungAnwendungsfall
Master-Slave-Replikation1 Master (Schreiben), n Slaves (Lesen)Leselast verteilen
Master-Master-Replikation2 Master (beide können schreiben)Hochverfügbarkeit
MySQL Group ReplicationAutomatische Multi-Master-GruppeHochverfügbarkeit + Ausfallsicherung
MySQL InnoDB ClusterVollständige Cluster-Lösung (MySQL Shell + Group Replication)Enterprise-Anwendungen

Für Einsteiger: Konzentrieren Sie sich auf Master-Slave-Replikation (einfach zu verstehen).


20.3 Datenbankdesign-Normen (Enterprise-Datenbankdesign)

Wenn Sie für Unternehmen entwerfen, müssen Sie professionelle Normen befolgen!

1. Normalisierung (1NF, 2NF, 3NF)

NormalformBedingungBeispiel ❌Beispiel ✅
1NFAtomare Werte (keine Listen)phone = "12345, 67890"phone1 = "12345", phone2 = "67890"
2NFKeine partiellen Abhängigkeitenorders hat product_nameorders hat product_id, products hat product_name
3NFKeine transitiven Abhängigkeitenusers hat city_nameusers hat city_id, cities hat city_name

Beispiel (3NF):

sql
-- ❌ Falsch (nicht 3NF):
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_name VARCHAR(50),      -- transitiv abhängig von user_id!
    product_name VARCHAR(100)   -- transitiv abhängig von product_id!
);

-- ✅ Richtig (3NF):
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    product_id INT,
    FOREIGN KEY (user_id) REFERENCES users(user_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

2. Benennungsnormen (Einheitlichkeit!)

  • Kleinbuchstaben + Unterstrich: user_profiles (nicht UserProfiles)
  • Einzahl für Tabellennamen: user (nicht users) – Geschmackssache!
  • Englische Namen: created_at (nicht erstellt_am)
  • Einheitliche Abkürzungen: qty (nicht manchmal quantity, manchmal qty)

3. Index-Strategie (Enterprise)

  • Primärschlüssel: Automatisch (vorhanden)
  • Fremdschlüssel: Immer Indizes erstellen!
  • Häufig verwendete Felder: WHERE, JOIN, ORDER BY
  • Zu viele Indizes: Max. 5-7 pro Tabelle!

20.4 Andere Datenbanken lernen (Horizont erweitern)

MySQL ist großartig, aber es gibt andere Datenbanken für unterschiedliche Anforderungen!

1. PostgreSQL (Die "fortgeschrittene" relationale Datenbank)

MerkmalMySQLPostgreSQL
LizenzOpen Source (Dual)Open Source (PostgreSQL-Lizenz)
FokusWebentwicklung, EinfachheitKomplexe Abfragen, Erweiterbarkeit
ErweiterbarkeitBegrenztSehr hoch (Erweiterungen, eigene Datentypen)
JSON-UnterstützungBasisFortgeschritten
Für Einsteiger✅ Besser✅➡️✅ Schwieriger

Wann PostgreSQL lernen? Wenn Sie komplexe Abfragen oder Erweiterbarkeit benötigen.

2. MongoDB (NoSQL – Dokumentenorientiert)

MerkmalMySQL (Relational)MongoDB (NoSQL)
DatenmodellTabellen (Zeilen/Spalten)Dokumente (JSON-ähnlich)
SchemaFest (muss vorher definiert werden)Flexibel (dynamisch)
SkalierungVertikal (größerer Server)Horizontal (mehrere Server)
AnwendungsfallBankwesen, E-CommerceSocial Media, IoT

Wann MongoDB lernen? Wenn Sie flexible Datenstrukturen oder horizontale Skalierung benötigen.

3. Andere Datenbanken (Kurzübersicht)

DatenbankTypAnwendungsfall
RedisKey-Value (Speicher)Caching, Sitzungsverwaltung
CassandraWide-Column (NoSQL)Zeitreihen, IoT
ElasticsearchSuchmaschineVolltextsuche, Protokollanalyse
SQLiteEingebettetMobile Apps, lokale Speicherung

Zusammenfassung

In diesem Kapitel haben Sie gelernt:

  • ✅ MySQL-erweiterte Eigenschaften (Stored Procedures, Trigger, Views, Functions)
  • ✅ MySQL-Cluster und Hochverfügbarkeit (Grundlegendes Verständnis)
  • ✅ Datenbankdesign-Normen (Normalisierung, Benennung, Index-Strategie)
  • ✅ Andere Datenbanken (PostgreSQL, MongoDB, Redis, usw.)

Übungen

  1. Theorie: Was ist der Unterschied zwischen MySQL und PostgreSQL?
  2. Praxis: Erstellen Sie eine gespeicherte Prozedur get_products_by_category, die Produkte nach Kategorie-ID abruft
  3. Praxis: Erstellen Sie eine Sicht user_order_summary, die Benutzernamen und die Anzahl ihrer Bestellungen anzeigt
  4. Recherche: Recherchieren Sie den Unterschied zwischen Master-Slave- und Master-Master-Replikation

Nächstes Kapitel

Im letzten Kapitel (Kapitel 21) lernen wir Lernressourcen – wertvolle Materialien, um Ihr MySQL-Wissen zu vertiefen!

Frei für alle Anfänger