Lernfeld 5
Software zur Verwaltung von Daten anpassen
Einführung & Wiederholung
Datenbanken verstehen und anwenden
Fachinformatiker Umschulung
Themenübersicht
Was behandeln wir in Lernfeld 5?
- Grundlagen von Datenbanken und DBMS
- Datenmodellierung mit ER-Modellen
- Das relationale Datenbankmodell
- SQL - Structured Query Language
- Normalisierung von Datenbanken
- Praktische Anwendung und Datenbank-Design
Lernziel: Am Ende dieses Lernfelds können Sie Datenbanken planen, erstellen und mit SQL-Abfragen verwalten.
Was sind Datenbanken?
Definition
Eine Datenbank ist eine organisierte Sammlung von strukturierten Daten, die elektronisch gespeichert und verwaltet werden.
Warum Datenbanken?
- Strukturierte Speicherung großer Datenmengen
- Mehrere Benutzer können gleichzeitig darauf zugreifen
- Datenintegrität und Konsistenz werden gewährleistet
- Effiziente Suche und Abfrage von Daten
- Datensicherheit durch Zugriffskontrolle
Beispiele aus der Praxis:
- Online-Shop: Produkte, Kunden, Bestellungen
- Bank: Konten, Transaktionen, Kundenprofile
- Krankenhaus: Patientendaten, Behandlungen, Termine
Datenbankmanagementsysteme (DBMS)
Was ist ein DBMS?
Ein DBMS ist eine Software, die das Erstellen, Verwalten und Abfragen von Datenbanken ermöglicht.
Bekannte DBMS:
- MySQL / MariaDB - Open Source, weit verbreitet
- PostgreSQL - Open Source, sehr leistungsfähig
- Microsoft SQL Server - Kommerziell, Enterprise-Lösung
- Oracle Database - Kommerziell, für große Unternehmen
- SQLite - Eingebettet, keine Server-Installation nötig
Aufgaben eines DBMS:
- Daten speichern und abrufen
- Benutzerverwaltung und Zugriffsrechte
- Transaktionsverwaltung (ACID-Prinzipien)
- Backup und Recovery
- Optimierung von Abfragen
Datenmodellierung: ER-Modell
Entity-Relationship-Modell
Das ER-Modell ist eine grafische Methode zur konzeptionellen Planung von Datenbanken.
Grundelemente der Chen-Notation:
- Rechteck: Entität (Entity) - Ein Objekt der realen Welt
- Ellipse/Oval: Attribut - Eigenschaft einer Entität
- Raute: Beziehung (Relationship) - Verbindung zwischen Entitäten
- Linie: Verbindung zwischen den Elementen
ER-Diagramm in Chen-Notation:
( Name ) ( Email )
│ │
│ │
┌──┴────────────┴──┐
│ │
│ KUNDE │
│ │
└──────┬───────────┘
│
(KundenID)
│
│ 1
│
┌───┴───┐
│ │
│tätigt │ ◁── Raute
│ │
└───┬───┘
│ n
│
┌──────┴───────────┐
│ │
│ BESTELLUNG │
│ │
└──┬───────┬───────┘
│ │
(BestellID) ( Datum )
Legende: Unterstrichene Attribute = Primärschlüssel
Kardinalitäten in Beziehungen
Was sind Kardinalitäten?
Kardinalitäten beschreiben, wie viele Entitäten an einer Beziehung beteiligt sein können.
Typen von Kardinalitäten:
1:1 (Eins-zu-Eins)
Ein Datensatz in Tabelle A gehört zu genau einem Datensatz in Tabelle B.
Beispiel: Person - Personalausweis
┌────────┐ ┌────────┐ ┌────────────┐
│ PERSON │───1───│ hat │───1───│ AUSWEIS │
└────────┘ └────────┘ └────────────┘
1:n (Eins-zu-Viele)
Ein Datensatz in Tabelle A kann zu mehreren Datensätzen in Tabelle B gehören.
Beispiel: Kunde - Bestellungen
┌────────┐ ┌────────┐ ┌────────────┐
│ KUNDE │───1───│ tätigt │───n───│ BESTELLUNG │
└────────┘ └────────┘ └────────────┘
m:n (Viele-zu-Viele)
Mehrere Datensätze in Tabelle A können zu mehreren Datensätzen in Tabelle B gehören.
Beispiel: Studenten - Kurse
┌─────────┐ ┌────────┐ ┌──────┐
│ STUDENT │───m───│ belegt │───n───│ KURS │
└─────────┘ └────────┘ └──────┘
Hinweis: m:n Beziehungen werden in Datenbanken über eine Zwischentabelle aufgelöst!
Das Relationale Datenbankmodell
Vom ER-Modell zur Datenbank
Das relationale Modell ist die technische Umsetzung des ER-Modells in Tabellen.
Grundprinzipien:
- Daten werden in Tabellen (Relationen) gespeichert
- Jede Tabelle hat Spalten (Attribute) und Zeilen (Tupel)
- Jede Zeile ist durch einen Primärschlüssel eindeutig identifizierbar
- Tabellen werden über Fremdschlüssel miteinander verknüpft
Beispiel-Tabelle: Kunden
| KundenID |
Name |
Stadt |
PLZ |
| 1 |
Müller |
Hamburg |
20095 |
| 2 |
Schmidt |
Berlin |
10115 |
| 3 |
Meyer |
München |
80331 |
Schlüssel in Datenbanken
Primärschlüssel (Primary Key - PK)
- Identifiziert jede Zeile eindeutig
- Kann nicht NULL sein
- Darf nicht doppelt vorkommen
- Oft eine automatisch generierte ID
Fremdschlüssel (Foreign Key - FK)
- Verweist auf den Primärschlüssel einer anderen Tabelle
- Stellt Beziehungen zwischen Tabellen her
- Gewährleistet referenzielle Integrität
Beispiel:
Kunden Bestellungen
───────────────── ────────────────────────
KundenID (PK) BestellID (PK)
Name KundenID (FK) ──┐
Stadt Datum │
PLZ Betrag │
▲ │
└───────────────────────────────────────┘
SQL - Structured Query Language
Was ist SQL?
SQL ist eine standardisierte Sprache zur Verwaltung und Abfrage von relationalen Datenbanken.
SQL-Kategorien:
- DDL (Data Definition Language): CREATE, ALTER, DROP - Strukturen definieren
- DML (Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE - Daten verwalten
- DCL (Data Control Language): GRANT, REVOKE - Zugriffsrechte steuern
Grundlegende SQL-Syntax:
-- Kommentare beginnen mit zwei Bindestrichen
SELECT spalte1, spalte2
FROM tabellenname
WHERE bedingung
ORDER BY spalte1;
Tabellen erstellen mit CREATE TABLE
Syntax:
CREATE TABLE tabellenname (
spalte1 datentyp constraints,
spalte2 datentyp constraints,
...
PRIMARY KEY (spalte1)
);
Wichtige Datentypen:
- INT / INTEGER: Ganzzahlen
- VARCHAR(n): Text variabler Länge (max. n Zeichen)
- DATE: Datum (YYYY-MM-DD)
- DECIMAL(p,s): Dezimalzahlen (p=Präzision, s=Nachkommastellen)
- BOOLEAN: Wahrheitswerte (TRUE/FALSE)
Praktisches Beispiel:
CREATE TABLE Kunden (
KundenID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE,
Stadt VARCHAR(50),
PLZ VARCHAR(5),
Registriert DATE DEFAULT CURRENT_DATE
);
Daten abfragen mit SELECT
Grundlegende SELECT-Abfrage:
-- Alle Spalten aller Zeilen
SELECT * FROM Kunden;
-- Bestimmte Spalten
SELECT Name, Stadt FROM Kunden;
-- Mit Bedingung
SELECT Name, Email
FROM Kunden
WHERE Stadt = 'Berlin';
-- Sortiert
SELECT Name, PLZ
FROM Kunden
ORDER BY Name ASC;
WHERE-Bedingungen:
- = Gleichheit
- != oder <> Ungleichheit
- <, >, <=, >= Vergleiche
- LIKE Mustervergleich (z.B.
WHERE Name LIKE 'M%')
- IN Liste von Werten (z.B.
WHERE Stadt IN ('Berlin', 'Hamburg'))
- BETWEEN Bereich (z.B.
WHERE PLZ BETWEEN '10000' AND '20000')
Daten manipulieren
INSERT - Daten einfügen:
-- Alle Spalten
INSERT INTO Kunden (Name, Email, Stadt, PLZ)
VALUES ('Weber', 'weber@email.de', 'Köln', '50667');
-- Mehrere Zeilen gleichzeitig
INSERT INTO Kunden (Name, Stadt) VALUES
('Fischer', 'Stuttgart'),
('Wagner', 'Düsseldorf'),
('Becker', 'Leipzig');
UPDATE - Daten ändern:
-- Einzelne Zeile ändern
UPDATE Kunden
SET Email = 'neue.email@domain.de'
WHERE KundenID = 5;
-- Mehrere Spalten ändern
UPDATE Kunden
SET Stadt = 'Frankfurt', PLZ = '60311'
WHERE Name = 'Weber';
DELETE - Daten löschen:
-- Bestimmte Zeilen löschen
DELETE FROM Kunden
WHERE KundenID = 10;
-- VORSICHT: Ohne WHERE werden ALLE Zeilen gelöscht!
DELETE FROM Kunden; -- Nicht ohne WHERE verwenden!
Tabellen verknüpfen mit JOINs
Was sind JOINs?
JOINs kombinieren Daten aus mehreren Tabellen basierend auf einer Beziehung.
INNER JOIN:
-- Nur Zeilen, die in beiden Tabellen existieren
SELECT Kunden.Name, Bestellungen.Datum, Bestellungen.Betrag
FROM Kunden
INNER JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
LEFT JOIN:
-- Alle Zeilen aus der linken Tabelle, auch ohne Match
SELECT Kunden.Name, Bestellungen.Datum
FROM Kunden
LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
Merkhilfe: INNER JOIN zeigt nur Übereinstimmungen. LEFT JOIN zeigt alle aus der linken Tabelle, auch wenn keine Übereinstimmung existiert.
Normalisierung von Datenbanken
Was ist Normalisierung?
Normalisierung ist der Prozess, Datenbanken so zu strukturieren, dass Redundanzen vermieden und Anomalien verhindert werden.
Ziele der Normalisierung:
- Redundanz minimieren (keine doppelten Daten)
- Datenintegrität sicherstellen
- Update-, Insert- und Delete-Anomalien vermeiden
- Flexibilität und Wartbarkeit verbessern
Die Normalformen:
- 1. Normalform (1NF): Atomare Werte
- 2. Normalform (2NF): Keine partiellen Abhängigkeiten
- 3. Normalform (3NF): Keine transitiven Abhängigkeiten
Erste Normalform (1NF)
Regel:
Jedes Attribut darf nur atomare (unteilbare) Werte enthalten.
Beispiel - Nicht in 1NF:
| KundenID |
Name |
Telefonnummern |
| 1 |
Müller |
0123-456789, 0987-654321 |
In 1NF überführt:
| KundenID |
Name |
Telefonnummer |
| 1 |
Müller |
0123-456789 |
| 1 |
Müller |
0987-654321 |
Problem gelöst: Jedes Feld enthält nur einen einzelnen Wert.
Zweite Normalform (2NF)
Regel:
Die Tabelle muss in 1NF sein UND jedes Nicht-Schlüssel-Attribut muss vom gesamten Primärschlüssel abhängig sein.
Beispiel - Nicht in 2NF:
| BestellID |
ProduktID |
Menge |
Produktname |
| 1 |
101 |
2 |
Laptop |
| 2 |
101 |
1 |
Laptop |
Problem: Produktname ist nur von ProduktID abhängig, nicht vom gesamten Schlüssel (BestellID + ProduktID).
In 2NF überführt - Zwei Tabellen:
Tabelle Bestellpositionen:
| BestellID |
ProduktID |
Menge |
| 1 |
101 |
2 |
Tabelle Produkte:
| ProduktID |
Produktname |
| 101 |
Laptop |
Dritte Normalform (3NF)
Regel:
Die Tabelle muss in 2NF sein UND es dürfen keine transitiven Abhängigkeiten existieren.
Beispiel - Nicht in 3NF:
| KundenID |
Name |
PLZ |
Stadt |
| 1 |
Müller |
20095 |
Hamburg |
| 2 |
Schmidt |
20095 |
Hamburg |
Problem: Stadt ist von PLZ abhängig, PLZ ist von KundenID abhängig = transitive Abhängigkeit.
In 3NF überführt:
Tabelle Kunden:
| KundenID | Name | PLZ |
| 1 | Müller | 20095 |
Tabelle Orte:
Datenbankdiagramme in SSMS
Was sind Datenbankdiagramme?
Datenbankdiagramme sind die visuelle Darstellung des relationalen Modells in SQL Server Management Studio (SSMS).
Was zeigt ein Datenbankdiagramm?
- Tabellen mit allen Spalten und Datentypen
- Primärschlüssel (markiert mit Schlüssel-Symbol)
- Fremdschlüssel-Beziehungen als Verbindungslinien
- Kardinalitäten der Beziehungen (1:1, 1:n, m:n)
Erstellen in SSMS:
- Objekt-Explorer öffnen
- Datenbank auswählen
- Rechtsklick auf "Datenbankdiagramme"
- "Neues Datenbankdiagramm" wählen
- Tabellen auswählen und hinzufügen
Tipp: Datenbankdiagramme helfen beim Verstehen komplexer Datenbank-Strukturen und bei der Dokumentation.
Aggregatfunktionen in SQL
Was sind Aggregatfunktionen?
Funktionen, die mehrere Zeilen zu einem Ergebnis zusammenfassen.
Wichtige Aggregatfunktionen:
-- Anzahl der Zeilen
SELECT COUNT(*) FROM Kunden;
-- Summe
SELECT SUM(Betrag) FROM Bestellungen;
-- Durchschnitt
SELECT AVG(Betrag) FROM Bestellungen;
-- Minimum und Maximum
SELECT MIN(Betrag), MAX(Betrag) FROM Bestellungen;
GROUP BY - Gruppierung:
-- Bestellungen pro Kunde zählen
SELECT KundenID, COUNT(*) as AnzahlBestellungen
FROM Bestellungen
GROUP BY KundenID;
-- Gesamtumsatz pro Kunde
SELECT KundenID, SUM(Betrag) as Gesamtumsatz
FROM Bestellungen
GROUP BY KundenID;
HAVING - Bedingung für Gruppen:
-- Nur Kunden mit mehr als 5 Bestellungen
SELECT KundenID, COUNT(*) as Anzahl
FROM Bestellungen
GROUP BY KundenID
HAVING COUNT(*) > 5;
Quiz: Grundlagen
Was ist der Unterschied zwischen DBMS und Datenbank?
A) Es gibt keinen Unterschied, die Begriffe sind synonym.
B) Ein DBMS ist die Software zur Verwaltung, eine Datenbank ist die Sammlung der Daten.
C) Eine Datenbank ist die Software, ein DBMS ist die Hardware.
D) DBMS ist nur für relationale Datenbanken, Datenbank ist der Oberbegriff.
Quiz: Schlüssel
Welche Aussage über Primärschlüssel ist FALSCH?
A) Ein Primärschlüssel muss eindeutig sein.
B) Ein Primärschlüssel darf nicht NULL sein.
C) Eine Tabelle kann mehrere Primärschlüssel haben.
D) Ein Primärschlüssel kann aus mehreren Spalten bestehen (zusammengesetzter Schlüssel).
Quiz: SQL
Welche SQL-Anweisung löscht alle Kunden aus Hamburg?
A) DELETE Kunden WHERE Stadt = 'Hamburg';
B) DELETE FROM Kunden WHERE Stadt = 'Hamburg';
C) REMOVE FROM Kunden WHERE Stadt = 'Hamburg';
D) DROP Kunden WHERE Stadt = 'Hamburg';
Praxisaufgabe: Bibliothekssystem
Aufgabenstellung:
Entwerfen Sie ein einfaches Datenbanksystem für eine Bibliothek mit folgenden Anforderungen:
Anforderungen:
- Bücher haben einen Titel, ISBN, Autor und Erscheinungsjahr
- Mitglieder haben einen Namen, eine Mitgliedsnummer und ein Registrierungsdatum
- Mitglieder können Bücher ausleihen
- Für jede Ausleihe soll das Ausleihdatum und Rückgabedatum gespeichert werden
Aufgaben:
- Erstellen Sie ein ER-Diagramm
- Bestimmen Sie die Kardinalitäten
- Überführen Sie das Modell in Tabellen
- Schreiben Sie CREATE TABLE Statements
- Fügen Sie Testdaten ein
- Schreiben Sie eine Abfrage: "Welche Bücher hat Mitglied X ausgeliehen?"
Lösung: ER-Modell Bibliothek
ER-Modell Bibliothek (Chen-Notation):
( Name ) ( Titel )
│ │
│ ( RegDatum ) │
│ │ ( Autor )
│ │ │
┌──┴────────────┴──┐ ┌─────┴──────┐
│ │ │ │
│ MITGLIED │ │ BUCH │
│ │ │ │
└────────┬─────────┘ └─────┬──────┘
│ │
(MitgliedsNr) (ISBN)
│ │
│ 1 │ 1
│ │
│ ┌──────────────┐ │
└────────│ │──────────────┘
│ AUSLEIHE │
│ │
└──────┬───────┘
│
┌──────────┼──────────┐
│ │ │
( Ausleihdatum ) (AusleiheID) ( Rückgabedatum )
Entitäten und Attribute:
MITGLIED: MitgliedsNr, Name, Registrierungsdatum
BUCH: ISBN, Titel, Autor
AUSLEIHE: AusleiheID, Ausleihdatum, Rückgabedatum
Beziehungen:
- Mitglied - Ausleihe: 1:n (ein Mitglied kann viele Ausleihen haben)
- Buch - Ausleihe: 1:n (ein Buch kann mehrfach ausgeliehen werden)
Lösung: SQL CREATE Statements
CREATE TABLE Buecher (
ISBN VARCHAR(13) PRIMARY KEY,
Titel VARCHAR(200) NOT NULL,
Autor VARCHAR(100) NOT NULL,
Erscheinungsjahr INT
);
CREATE TABLE Mitglieder (
MitgliedsNr INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100) NOT NULL,
Registrierungsdatum DATE DEFAULT CURRENT_DATE
);
CREATE TABLE Ausleihen (
AusleiheID INT PRIMARY KEY AUTO_INCREMENT,
MitgliedsNr INT NOT NULL,
ISBN VARCHAR(13) NOT NULL,
Ausleihdatum DATE NOT NULL,
Ruckgabedatum DATE,
FOREIGN KEY (MitgliedsNr) REFERENCES Mitglieder(MitgliedsNr),
FOREIGN KEY (ISBN) REFERENCES Buecher(ISBN)
);
Lösung: Testdaten und Abfragen
Testdaten einfügen:
INSERT INTO Buecher VALUES
('978-3-12345-678-9', 'SQL für Einsteiger', 'Max Mustermann', 2020),
('978-3-98765-432-1', 'Datenbanken verstehen', 'Anna Schmidt', 2021);
INSERT INTO Mitglieder (Name) VALUES
('Peter Weber'),
('Lisa Müller');
INSERT INTO Ausleihen (MitgliedsNr, ISBN, Ausleihdatum) VALUES
(1, '978-3-12345-678-9', '2024-01-15'),
(1, '978-3-98765-432-1', '2024-02-01'),
(2, '978-3-12345-678-9', '2024-02-10');
Abfrage: Bücher von Mitglied 1:
SELECT Mitglieder.Name, Buecher.Titel, Ausleihen.Ausleihdatum
FROM Ausleihen
INNER JOIN Mitglieder ON Ausleihen.MitgliedsNr = Mitglieder.MitgliedsNr
INNER JOIN Buecher ON Ausleihen.ISBN = Buecher.ISBN
WHERE Mitglieder.MitgliedsNr = 1;
Best Practices für Datenbankdesign
Namenskonventionen:
- Verwenden Sie eindeutige, beschreibende Namen
- Konsistente Schreibweise (z.B. CamelCase oder snake_case)
- Vermeiden Sie Leerzeichen in Tabellen- und Spaltennamen
- Primärschlüssel oft als "ID" oder "TabellenameID"
Datentypen richtig wählen:
- VARCHAR statt TEXT für begrenzte Textlängen (bessere Performance)
- INT für Ganzzahlen, DECIMAL für Geldbeträge
- DATE/DATETIME für Zeitstempel
- BOOLEAN für Ja/Nein-Werte
Weitere Tipps:
- Immer Primärschlüssel definieren
- Fremdschlüssel-Constraints verwenden für referenzielle Integrität
- Indizes für häufig abgefragte Spalten anlegen
- Normalisierung anwenden, aber nicht übertreiben (3NF ist meist ausreichend)
- Dokumentation und ER-Diagramme pflegen
Häufige Fehler vermeiden
SQL-Fehler:
Fehler 1: DELETE/UPDATE ohne WHERE
-- FALSCH: Löscht ALLE Datensätze!
DELETE FROM Kunden;
-- RICHTIG: Mit WHERE-Bedingung
DELETE FROM Kunden WHERE KundenID = 5;
Fehler 2: Strings ohne Anführungszeichen
-- FALSCH
SELECT * FROM Kunden WHERE Stadt = Berlin;
-- RICHTIG
SELECT * FROM Kunden WHERE Stadt = 'Berlin';
Design-Fehler:
- Keine oder falsche Normalisierung (Redundanzen)
- Fehlende Primärschlüssel
- Mehrere Werte in einem Feld speichern
- Ungeeignete Datentypen verwenden
- Keine Fremdschlüssel-Constraints definieren
Weiterführende Themen
Was kommt noch in Lernfeld 5?
- Komplexere JOINs: RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN
- Subqueries: Verschachtelte SELECT-Abfragen
- Views: Virtuelle Tabellen für häufige Abfragen
- Indizes: Performance-Optimierung
- Transaktionen: ACID-Prinzipien, COMMIT, ROLLBACK
- Stored Procedures: Wiederverwendbare SQL-Codeblöcke
- Trigger: Automatische Aktionen bei Datenänderungen
Für die Praxis:
- Backup-Strategien
- Benutzerverwaltung und Rechte
- Performance-Tuning
- Datenbankmodellierung für komplexe Systeme
Zusammenfassung
Was haben wir gelernt?
Konzeptionelle Ebene:
- ER-Modelle zur Planung von Datenbanken
- Entitäten, Attribute, Beziehungen und Kardinalitäten
Logische Ebene:
- Relationales Modell mit Tabellen, Schlüsseln und Beziehungen
- Normalisierung (1NF, 2NF, 3NF)
Technische Ebene:
- SQL-Grundlagen: CREATE, SELECT, INSERT, UPDATE, DELETE
- JOINs zum Verknüpfen von Tabellen
- Aggregatfunktionen und Gruppierungen
Nächste Schritte:
Übung macht den Meister! Erstellen Sie eigene Datenbanken, experimentieren Sie mit SQL und vertiefen Sie Ihr Wissen durch praktische Anwendung.
Ressourcen und Übungsmaterial
Online-Übungsplattformen:
- SQLZoo - Interaktive SQL-Tutorials
- W3Schools SQL - Grundlagen mit vielen Beispielen
- HackerRank SQL - Challenges von leicht bis schwer
- LeetCode Database - Praxisaufgaben
Tools zum Üben:
- SQL Server Management Studio (SSMS) - Für SQL Server
- MySQL Workbench - Für MySQL/MariaDB
- DBeaver - Universelles DB-Tool für viele DBMS
- DB Browser for SQLite - Einfach für Einsteiger
Empfohlene Übungen:
- Eigene Datenbank für ein Hobby-Projekt erstellen
- Bestehende Datenbanken analysieren und optimieren
- ER-Modelle für reale Szenarien erstellen
Vielen Dank!
Fragen?
Nutzen Sie die Gelegenheit, Unklarheiten zu beseitigen.
Für neue Teilnehmer:
Willkommen im Lernfeld 5! Scheuen Sie sich nicht, Fragen zu stellen.
Für die Wiederholer:
Gibt es Themen, die vertieft werden sollten?
Viel Erfolg bei der weiteren Arbeit mit Datenbanken!