LU04b - Die Crow’s-Foot-Notation
„Crow’s Foot“ bedeutet übersetzt Krähenfuss. Der Name kommt vom Symbol für many (viele), das wie ein kleiner Krähenfuss aussieht.
Die Crow’s-Foot-Notation stellt eine Datenbank so dar, dass man sofort erkennt:
- wie Entitäten (Tabellen) miteinander verknüpft sind,
- wie viele Objekte (Instanzen) einer Entität mit wie vielen Objekten einer anderen verbunden sein können (= Kardinalität),
- welche Primärschlüssel (PK) und Fremdschlüssel (FK) definiert sind,
- welche Attribute zu einer Tabelle gehören (auf Wunsch auch mit Datentypen).
Damit kann die Crow’s-Foot-Notation Teil eines logischen Datenbankschemas sein und bildet die Brücke von der Analyse (Chen-Notation) zur technischen Umsetzung in SQL.
Kardinalitäten in der Crow’s-Foot-Notation
Die Kardinalität beschreibt die Art der Beziehung zwischen zwei Entitäten. Es gibt drei Haupttypen:
1. One-to-One (1:1) Eine Instanz von Entität A gehört genau zu einer Instanz von Entität B.
Beispiel:
- Ein:e Mitarbeitende ↔ genau ein Arbeitsplatz
- Jeder Reisepass ↔ genau eine Person
Darstellung: Linie mit kurzem Strich auf beiden Seiten.
One-to-One (1:1) Beziehung: Ein Auto kann (gleichzeitig) immer nur einen Fahrer, eine Fahrerin haben. Eine Fahrerin, ein Fahrer kann (gleichzeitig) nur immer Ein Auto fahren.
2. One-to-Many (1:N) Eine Instanz von Entität A kann mit vielen Instanzen von Entität B verbunden sein. Umgekehrt gehört jede Instanz von B zu genau einer Instanz von A.
Beispiel:
- Ein Regisseur ↔ viele Filme
- Ein Spotify-Artist ↔ viele Songs
- Eine Klasse ↔ viele Lernende
Darstellung: Linie mit Strich (= „eins“) auf Seite A und einem „Krähenfuss“ (drei Linien) auf Seite B.
One-to-Many (1:n) Beziehung: Ein Regisseur, eine Regisseurin kann mehrere Filme drehen. Ein Film wird (in der Regel) nur von einem Regisseur, einer Regisseurin gedreht.
3. Many-to-Many (M:N) Mehrere Instanzen von Entität A können mit mehreren Instanzen von Entität B verknüpft sein.
Beispiel:
- Mehrere Schauspieler:innen ↔ spielen in mehreren Filmen
- Viele Lernende ↔ besuchen mehrere Module
- Viele Songs ↔ sind in mehreren Playlists enthalten
Darstellung: Krähenfüsse auf beiden Seiten der Beziehung.
Many-to-Many (n:m) Beziehung: Ein:e Schauspieler:in kann in mehreren Filme spielen. Ein Film kann mehrere Schauspieler:innen haben.
Die folgende Abbildung zeigt alle möglichen Kardinalitäten:
Warum Crow’s-Foot-Notation?
Die Crow’s-Foot-Notation wird oft in der Praxis eingesetzt, weil sie eine klare und technische Darstellung bietet.
Im Unterschied zur Chen-Notation, die eher fachlich und abstrakt ist, dient Crow’s-Foot als Brücke zur Umsetzung in SQL:
- Sie zeigt Entitäten als Tabellen mit ihren Attributen.
- Sie markiert Primärschlüssel (PK) und Fremdschlüssel (FK).
- Sie stellt Beziehungen und Kardinalitäten (1:1, 1:n, n:m) deutlich dar.
- Es können auch die Datentypen der Attribute (Spalten) vermerkt werden.
Damit ist sie die letzte Station vor der praktischen Umsetzung mit SQL-Befehlen wie CREATE TABLE ….
Crow’s-Foot wird also vor allem von Entwickler:innen, Datenbank-Designer:innen und Lernenden genutzt, die den Schritt von der Analyse (Chen) zur technischen Umsetzung (SQL) machen.
Beispiel Crow’s-Foot-Notation
Stellen wir uns einen Online-Buchshop vor. Wir haben die Entitäten:
- Kunde
- Bestellung
- Produkt
Beziehungen:
- Ein Kunde kann viele Bestellungen aufgeben (1:N).
- Eine Bestellung kann mehrere Produkte enthalten, und ein Produkt kann in vielen Bestellungen vorkommen (M:N).
Darstellung in Crow’s-Foot-Notation:
- Linie zwischen Kunde und Bestellung, mit Strich (1) auf der Kundenseite und Krähenfuss (N) auf der Bestellungsseite.
- Linie zwischen Bestellung und Produkt mit Krähenfuss auf beiden Seiten.
Beispiel: Vom Schema zur Tabelle
Ausgangspunkt ist ein kleines Crow’s Foot Schema:
- Regisseur (RegisseurID PK, Name)
- Film (FilmID PK, Titel, Jahr, RegisseurID FK)
- Beziehung: 1 Regisseur ↔ n Filme
Umsetzung in SQL
1. Datenbank anlegen
CREATE DATABASE filmdatenbank; USE filmdatenbank;
2. Tabelle „regisseur“ anlegen
CREATE TABLE regisseur ( regisseur_id INT AUTO_INCREMENT, name VARCHAR(50) NOT NULL, birthday DATE, PRIMARY KEY (regisseur_id) );
3. Tabelle „film“ anlegen
CREATE TABLE film ( film_id INT AUTO_INCREMENT, titel VARCHAR(50) NOT NULL, jahr YEAR, regisseur_id INT, PRIMARY KEY (film_id), FOREIGN KEY (regisseur_id) REFERENCES regisseur(regisseur_id) );
4. Daten einfügen
Fügen Sie mit Webstorm manuell (Tabelle anklicken und dann → „Edit Data“ (Tabellen-Icon)) ein paar Daten in die beiden Tabellen. Sie können zur Inspiration Daten aus der Tabelle imbd_top_1000 verwenden, welche wir zu einem früheren Zeitpunkt bereits importiert haben.
5. Daten abfragen
Mit einem Select können wir beide Tabellen gleichzeitig abfragen:
SELECT f.titel, f.jahr, r.name AS regisseur FROM film f, regisseur r WHERE f.regisseur_id = r.regisseur_id;
Was zu einem ähnlichen Ergebnis, wie hier führen könnte:
Titel | Jahr | Regisseur |
---|---|---|
Inception | 2010 | Christopher Nolan |
Lost in Translation | 2003 | Sofia Coppola |