====== 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