====== LU04c – Die Crow's-Foot-Notation ======
===== Lernziele =====
* Ich kann erklären, worin sich die Crow's-Foot- von der Chen-Notation unterscheidet.
* Ich kann die Symbole für 1:1, 1:n und n:m in der Crow's-Foot-Notation lesen und zeichnen.
* Ich kann in einem Crow's-Foot-Diagramm Primär- und Fremdschlüssel benennen.
===== Woher der Name kommt =====
{{ :de:modul:m290_guko:learningunits:lu04:theorie:daniel-shapiro-d-vbdk5rqr0-unsplash_converted_medium.jpg?nolink&400 |Krähenfuss}}
„Crow's Foot" bedeutet **Krähenfuss**. Der Name kommt vom Symbol für //many// (viele), das wie ein kleiner Krähenfuss aussieht: {{ :de:modul:m290_guko:learningunits:lu04:theorie:crows_foot.png?nolink&100 |}}
===== Wozu eine zweite Notation? =====
In LU04b haben wir Beziehungen und Kardinalitäten in der **Chen-Notation** dargestellt. Diese ist gut geeignet, um mit Auftraggeber:innen zu sprechen – sie bleibt aber **fachlich und abstrakt**.
Die **Crow's-Foot-Notation** zeigt dieselbe Information **technischer**: Sie stellt Entitäten bereits als Tabellen dar. Damit ist sie die passende Darstellung für das **logische Datenmodell** und die letzte Station vor der Umsetzung in SQL.
^ ^ Chen-Notation ^ Crow's-Foot-Notation ^
| Entität | Rechteck | Tabelle mit Spaltenliste |
| Attribut | eigenes Oval | Zeile innerhalb der Tabelle |
| Beziehung | Raute mit Beschriftung | Linie mit Symbolen an den Enden |
| Schlüssel | unterstrichenes Attribut | mit **PK** / **FK** markiert |
| Eignet sich für | konzeptuelles Modell | logisches Datenmodell |
Die Kardinalitäten selbst (1:1, 1:n, n:m) sind in beiden Notationen dieselben – nur die **Zeichen** unterscheiden sich. Was die Kardinalitäten bedeuten, steht in der vorherigen Seite (LU04b).
===== Die Symbole =====
==== 1:1 – One-to-One ====
Darstellung: Linie mit **kurzem Querstrich** auf beiden Seiten.
{{:de:modul:m290_guko:learningunits:lu04:theorie:one-to-one.png?nolink&400|One-to-One-Beziehung}}
//__Ein__ Auto kann gleichzeitig nur __eine__ Person fahren, und __eine__ Person fährt gleichzeitig nur __ein__ Auto.//
==== 1:n – One-to-Many ====
Darstellung: **Querstrich** („eins") auf der einen Seite, **Krähenfuss** („viele") auf der anderen.
{{:de:modul:m290_guko:learningunits:lu04:theorie:one-to-many.png?nolink&400|One-to-Many-Beziehung}}
//__Eine__ Regisseurin kann __mehrere__ Filme drehen. __Ein__ Film wird in der Regel von __einer__ Regie gedreht.//
==== n:m – Many-to-Many ====
Darstellung: **Krähenfuss auf beiden Seiten**.
{{:de:modul:m290_guko:learningunits:lu04:theorie:many-to-many.png?nolink&400|Many-to-Many-Beziehung}}
//__Ein:e__ Schauspieler:in kann in __mehreren__ Filmen spielen. __Ein__ Film kann __mehrere__ Schauspieler:innen haben.//
Die folgende Übersicht zeigt alle möglichen Symbolkombinationen:
{{:modul:m290:learningunits:lu03:theorie:crow-notation-chart-4127045304.png?direct&400|Alle Kardinalitäten in der Crow's-Foot-Notation}}
===== Beispiel: Online-Buchshop =====
Wir haben die Entitäten **Kunde**, **Bestellung** und **Produkt**:
* Ein Kunde kann viele Bestellungen aufgeben → **1:n**
* Eine Bestellung kann mehrere Produkte enthalten, und ein Produkt kann in vielen Bestellungen vorkommen → **n:m**
{{:de:modul:m290_guko:learningunits:lu04:theorie:bestellung_crows_feet.drawio_1_.png?direct&800|Crow's-Foot-Diagramm eines Online-Buchshops}}
In der Zeichnung erkennen Sie das an den Linienenden: Zwischen Kunde und Bestellung steht ein Querstrich auf der Kundenseite und ein Krähenfuss auf der Bestellungsseite. Zwischen Bestellung und Produkt stehen Krähenfüsse auf beiden Seiten.
===== Schlüssel im logischen Modell =====
Im Crow's-Foot-Diagramm werden die Schlüssel direkt eingetragen:
{{:de:modul:m290_guko:learningunits:lu04:theorie:film_regisseur_crowsfoot.drawio_1_.png?direct&800|Crow's Foot: 1 Regisseur ↔ n Filme}}
* **Regisseur** (RegisseurID **PK**, Name)
* **Film** (FilmID **PK**, Titel, Jahr, RegisseurID **FK**)
* Beziehung: **1 Regisseur ↔ n Filme**
Damit die Daten korrekt und widerspruchsfrei bleiben, gelten drei Regeln:
^ Regel ^ Bedeutung ^
| **Entitätsintegrität** | Jede Tabelle braucht einen Primärschlüssel, und dieser darf nie leer (NULL) sein. |
| **Referentielle Integrität** | Ein Fremdschlüssel muss auf einen Primärschlüssel verweisen, den es tatsächlich gibt. |
| **Domänenintegrität** | Die Werte müssen zum vorgesehenen Datentyp passen – in einer Zahlenspalte steht kein Text. |
**Wie geht es weiter?** In LU05 setzen wir ein solches logisches Modell in eine echte Datenbank um: Wir wählen passende **Datentypen** und legen die Tabellen mit SQL-Befehlen (''CREATE TABLE …'') an.
----
{{tag>M290-LU04}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Guido Koch