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
1:n (Eins-zu-Viele)
Ein Datensatz in Tabelle A kann zu mehreren Datensätzen in Tabelle B gehören.
Beispiel: Kunde - Bestellungen
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
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:
Crow’s-Foot-Notation & logisches Modell
Die Chen-Notation dient dem konzeptionellen Entwurf.
Für das logische bzw. physische Modell (z. B. in SSMS oder
draw.io) nutzt man meist die Crow’s-Foot-Notation: Tabellen mit Spalten und
Schlüsseln, Beziehungen über Fremdschlüssel.
Endsymbole – außen = Minimum, innen (an der Tabelle) = Maximum:
m:n konzeptionell – Krähenfuß an beiden Enden:
Auflösung in ein logisches Modell (Beispiel Bibliothek):
Merke: Jede m:n-Beziehung wird im logischen Modell zu
einer eigenen Beziehungstabelle mit beiden Fremdschlüsseln. Hier verbindet
Ausleihen die Tabellen Mitglieder und Buecher.
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
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:
PLZ
Stadt
20095
Hamburg
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):
Entitäten und Attribute:
MITGLIED:MitgliedsNr, Name, Registrierungsdatum
BUCH:ISBN, Titel, Autor
Beziehung:
„leiht aus“ (Mitglied ↔ Buch): m:n – mit den
Beziehungsattributen Ausleihdatum und Rückgabedatum an der Raute.
Umsetzung: Die m:n-Beziehung wird logisch zur
Beziehungstabelle Ausleihen(AusleiheID, MitgliedsNr FK, ISBN FK,
Ausleihdatum, Rückgabedatum) aufgelöst – siehe folgende Slides.
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