Appearance
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_hashnicht 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):
| Architektur | Beschreibung | Anwendungsfall |
|---|---|---|
| Master-Slave-Replikation | 1 Master (Schreiben), n Slaves (Lesen) | Leselast verteilen |
| Master-Master-Replikation | 2 Master (beide können schreiben) | Hochverfügbarkeit |
| MySQL Group Replication | Automatische Multi-Master-Gruppe | Hochverfügbarkeit + Ausfallsicherung |
| MySQL InnoDB Cluster | Vollstä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)
| Normalform | Bedingung | Beispiel ❌ | Beispiel ✅ |
|---|---|---|---|
| 1NF | Atomare Werte (keine Listen) | phone = "12345, 67890" | phone1 = "12345", phone2 = "67890" |
| 2NF | Keine partiellen Abhängigkeiten | orders hat product_name | orders hat product_id, products hat product_name |
| 3NF | Keine transitiven Abhängigkeiten | users hat city_name | users 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(nichtUserProfiles) - ✅ Einzahl für Tabellennamen:
user(nichtusers) – Geschmackssache! - ✅ Englische Namen:
created_at(nichterstellt_am) - ✅ Einheitliche Abkürzungen:
qty(nicht manchmalquantity, manchmalqty)
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)
| Merkmal | MySQL | PostgreSQL |
|---|---|---|
| Lizenz | Open Source (Dual) | Open Source (PostgreSQL-Lizenz) |
| Fokus | Webentwicklung, Einfachheit | Komplexe Abfragen, Erweiterbarkeit |
| Erweiterbarkeit | Begrenzt | Sehr hoch (Erweiterungen, eigene Datentypen) |
| JSON-Unterstützung | Basis | Fortgeschritten |
| Für Einsteiger | ✅ Besser | ✅➡️✅ Schwieriger |
Wann PostgreSQL lernen? Wenn Sie komplexe Abfragen oder Erweiterbarkeit benötigen.
2. MongoDB (NoSQL – Dokumentenorientiert)
| Merkmal | MySQL (Relational) | MongoDB (NoSQL) |
|---|---|---|
| Datenmodell | Tabellen (Zeilen/Spalten) | Dokumente (JSON-ähnlich) |
| Schema | Fest (muss vorher definiert werden) | Flexibel (dynamisch) |
| Skalierung | Vertikal (größerer Server) | Horizontal (mehrere Server) |
| Anwendungsfall | Bankwesen, E-Commerce | Social Media, IoT |
Wann MongoDB lernen? Wenn Sie flexible Datenstrukturen oder horizontale Skalierung benötigen.
3. Andere Datenbanken (Kurzübersicht)
| Datenbank | Typ | Anwendungsfall |
|---|---|---|
| Redis | Key-Value (Speicher) | Caching, Sitzungsverwaltung |
| Cassandra | Wide-Column (NoSQL) | Zeitreihen, IoT |
| Elasticsearch | Suchmaschine | Volltextsuche, Protokollanalyse |
| SQLite | Eingebettet | Mobile 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
- Theorie: Was ist der Unterschied zwischen MySQL und PostgreSQL?
- Praxis: Erstellen Sie eine gespeicherte Prozedur
get_products_by_category, die Produkte nach Kategorie-ID abruft - Praxis: Erstellen Sie eine Sicht
user_order_summary, die Benutzernamen und die Anzahl ihrer Bestellungen anzeigt - 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!
