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:

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:

Darstellung: Linie mit kurzem Strich auf beiden Seiten.

One-to-One Beziehung 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:

Darstellung: Linie mit Strich (= „eins“) auf Seite A und einem „Krähenfuss“ (drei Linien) auf Seite B.

One-to-Many Beziehung 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:

Darstellung: Krähenfüsse auf beiden Seiten der Beziehung.

Many-to-Many 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:

Alle möglichen Kardinalitäten in der Crow’s-Foot-Notation

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:

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:

Beziehungen:

Darstellung in Crow’s-Foot-Notation:

Beispiel: Vom Schema zur Tabelle

Ausgangspunkt ist ein Crow’s Foot Schema:

Umsetzung in SQL

1. Datenbank anlegen

CREATE DATABASE filmdatenbank;
USE filmdatenbank;

2. Tabelle „regisseur“ anlegen

CREATE TABLE regisseur (
  regisseur_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  birthday DATE
);

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)
);

Sowohl das setzen von Foreign Keys (Fremdschlüsseln) in SQL, wie auch das gleichzeitige Abfragen von Daten aus zwei Tabellen (s. unten) werden wir zu einem späteren Zeitpunkt im Modul behandeln. Das dient hier dafür, dass Sie einen Überblick bekommen, wie es gehen würde. Das (also das setzen von Fremdschlüsseln und das programmieren von verschachtelten Abfragen) ist nicht Teil der Leistungsbeurteilung 1.

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