Structured Query Language
SQL ist eine standardisierte deklarative Sprache zur Definition, Abfrage und Manipulation relationaler Daten in Datenbanksystemen.
Klassifikation
- KomplexitätMittel
- AuswirkungTechnisch
- EntscheidungstypArchitektur
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Fehlende Indexierung führt zu langsamen Abfragen
- Unsichere dynamische SQL-Erzeugung kann SQL-Injection ermöglichen
- Monolithische Schemata erschweren Skalierung und Entwicklung
- Verwende vorbereitete Statements statt dynamischem SQL zur Sicherheit
- Indexstrategien regelmäßig überprüfen und anpassen
- Lang laufende Abfragen profilieren und refaktorisieren
I/O & Ressourcen
- Datenquellen in relationalem Schema
- Geschäftsanforderungen für Abfragen
- Zugriffs- und Berechtigungsmodelle
- Abfrageergebnisse und Berichte
- Transaktionale Zustandsänderungen
- Metriken und Monitoring-Daten
Beschreibung
Structured Query Language (SQL) ist eine deklarative Abfragesprache zur Definition, Abfrage und Manipulation relationaler Daten. Sie standardisiert Datenmodelloperationen wie SELECT, INSERT, UPDATE und DELETE und unterstützt Transaktionen, Joins und Aggregationen. SQL dient als Grundlage für relationale Datenbanken und beeinflusst Datenmodellierung, Performance und Integritätsregeln.
✔Vorteile
- Breite Standardisierung und Portabilität zwischen Systemen
- Ausdrucksstarke Abfrage- und Aggregationsfunktionen
- Unterstützung für Transaktionen und Integritätsregeln
✖Limitationen
- Nicht ideal für sehr flexible schemalose Datenmodelle
- Unterschiede zwischen Dialekten führen zu Portierungsaufwand
- Komplexe Abfragen können Performance-Engpässe verursachen
Trade-offs
Metriken
- Durchschnittliche Abfrage-Latenz
Mittlere Ausführungszeit von typischen Abfragen als Indikator für Performance.
- Transaktionen pro Sekunde
Anzahl abgeschlossener Transaktionen pro Zeiteinheit zur Messung von Durchsatz.
- Cache-Hit-Rate
Anteil der Abfragen, die aus dem Cache bedient werden, zur Bewertung der Effizienz.
Beispiele & Implementierungen
Analytische Abfrage mit JOIN und Aggregation
Verwendet mehrere Tabellen, führt Joins und GROUP BY aus, um Umsatz nach Produktkategorie zu berechnen.
Transaktionales Update mit Rückrolle
Beispiel einer ACID-konformen Transaktion, die mehrere Tabellen aktualisiert und bei Fehlern zurückgesetzt wird.
Schema-Migration mit Migrationsskript
Illustration einer Schemaänderung inklusive Migrations- und Backout-Skript zur sicheren Einführung.
Implementierungsschritte
Anforderungen und Datenmodell erfassen
Schemata entwerfen und normalisieren
Indizes und Partitionierung planen
Abfragen implementieren und mit Explain analysieren
⚠️ Technische Schulden & Engpässe
Tech Debt
- Legacy-Schemata ohne Normalisierung
- Ad-hoc-Indizes ohne Monitoring
- Veraltete Dialekt-spezifische Abfragen
Bekannte Engpässe
Beispiele für Missbrauch
- Dynamisches SQL mit unsicheren Parametern führt zu Injection
- Fehlende Indizes bei großen JOINs erzeugt Timeouts
- Einsatz von SQL für stark schemalose, dokumentbasierte Daten
Typische Fallen
- Unterschätzung von Dialektunterschieden bei Portierung
- Unsachgemäße Nutzung von Transaktionsisolationen
- Übermäßige Indizierung ohne Analyse der Abfragen
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Dialektunterschiede zwischen Implementierungen
- • Hardware- und IO-Limits der Datenbankinstanz
- • Regulatorische Anforderungen an Datenhaltung