Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m290_guko:learningunits:lu04:theorie:b_crows_foot [2025/09/07 19:09] – gkoch | modul:m290_guko:learningunits:lu04:theorie:b_crows_foot [2025/09/07 21:18] (aktuell) – gkoch | ||
---|---|---|---|
Zeile 55: | Zeile 55: | ||
* Viele Songs ↔ sind in mehreren Playlists enthalten | * Viele Songs ↔ sind in mehreren Playlists enthalten | ||
- | Darstellung: | + | Darstellung: |
+ | |||
+ | {{: | ||
+ | // | ||
Zeile 61: | Zeile 64: | ||
{{: | {{: | ||
- | |||
- | [[https:// | ||
Zeile 72: | Zeile 73: | ||
* Sie zeigt **Entitäten als Tabellen** mit ihren Attributen. | * Sie zeigt **Entitäten als Tabellen** mit ihren Attributen. | ||
* Sie markiert **Primärschlüssel (PK)** und **Fremdschlüssel (FK)**. | * Sie markiert **Primärschlüssel (PK)** und **Fremdschlüssel (FK)**. | ||
- | * Sie stellt **Beziehungen und Kardinalitäten** (1:1, 1:n, n:m) deutlich dar. | + | * 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 …`. | + | 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: | Crow’s-Foot wird also vor allem von **Entwickler: | ||
- | Stakeholder ohne IT-Hintergrund können sie verstehen – aber nur, wenn sie vorher eingeführt werden. | ||
- | Merksatz: | + | |
- | * **Chen = Analyse/ | + | |
- | * **Crow’s-Foot = Umsetzung** (Wie sehen Tabellen, Schlüssel und Kardinalitäten konkret aus?) | + | |
==== Beispiel Crow’s-Foot-Notation ==== | ==== Beispiel Crow’s-Foot-Notation ==== | ||
Zeile 88: | Zeile 87: | ||
* **Kunde** | * **Kunde** | ||
* **Bestellung** | * **Bestellung** | ||
- | * **Buch** | + | * **Produkt** |
Beziehungen: | Beziehungen: | ||
* Ein Kunde kann viele Bestellungen aufgeben (1: | * Ein Kunde kann viele Bestellungen aufgeben (1: | ||
- | * Eine Bestellung kann mehrere | + | * Eine Bestellung kann mehrere |
+ | |||
+ | {{: | ||
Darstellung in Crow’s-Foot-Notation: | Darstellung in Crow’s-Foot-Notation: | ||
- | * Linie zwischen Kunde und Bestellung, mit Strich (1) auf der Kundenseite und Krähenfuß | + | * Linie zwischen Kunde und Bestellung, mit Strich (1) auf der Kundenseite und Krähenfuss |
- | * Linie zwischen Bestellung und Buch mit Krähenfuß | + | * Linie zwischen Bestellung und Produkt |
- | ====== Beispiel: Vom Schema zur Tabelle | + | ===== Beispiel: Vom Schema zur Tabelle ===== |
Ausgangspunkt ist ein kleines **Crow’s Foot Schema**: | Ausgangspunkt ist ein kleines **Crow’s Foot Schema**: | ||
+ | {{: | ||
* **Regisseur** (RegisseurID **PK**, Name) | * **Regisseur** (RegisseurID **PK**, Name) | ||
Zeile 109: | Zeile 111: | ||
- | ===== Umsetzung in SQL ===== | + | ==== Umsetzung in SQL ==== |
**1. Datenbank anlegen** | **1. Datenbank anlegen** | ||
- | + | <WRAP center box round 80%> | |
- | ```sql | + | < |
CREATE DATABASE filmdatenbank; | CREATE DATABASE filmdatenbank; | ||
USE filmdatenbank; | USE filmdatenbank; | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | **2. Tabelle " | ||
+ | <WRAP center box round 80%> | ||
+ | <code sql> | ||
+ | CREATE TABLE regisseur ( | ||
+ | regisseur_id INT AUTO_INCREMENT, | ||
+ | name VARCHAR(50) NOT NULL, | ||
+ | birthday DATE, | ||
+ | PRIMARY KEY (regisseur_id) | ||
+ | ); | ||
+ | </ | ||
+ | </ | ||
+ | **3. Tabelle " | ||
+ | <WRAP center box round 80%> | ||
+ | <code sql> | ||
+ | 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 // | ||
+ | |||
+ | **5. Daten abfragen** | ||
+ | |||
+ | Mit einem Select können wir beide Tabellen gleichzeitig abfragen: | ||
+ | <WRAP center box round 80%> | ||
+ | <code sql> | ||
+ | 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: | ||
+ | <WRAP center box round 80%> | ||
+ | ^ Titel ^ Jahr ^ Regisseur | ||
+ | | Inception | ||
+ | | Lost in Translation | 2003 | Sofia Coppola | ||
+ | |||
+ | </ | ||
+ | ---- | ||
[[https:// | [[https:// | ||