====== LU04c – ERM und ERD ====== ==== Einleitung ==== Bevor wir eine Datenbank mit Tabellen in MySQL umsetzen, machen wir uns Gedanken über die **Struktur** der Daten. Dazu benutzen wir ein **konzeptionelles Modell**, das sogenannte **Entity-Relationship Model (ERM)**. Das Ergebnis wird dann in einem **Entity-Relationship Diagramm (ERD)** dargestellt. → **Merksatz**: Das ERM/ERD ist der **Bauplan einer Datenbank**. ==== Entity-Relationship Model (ERM) ==== Ein **ERM** beschreibt die Daten und ihre Beziehungen in der realen Welt. * Eine **Entität** (engl. entity) ist ein Objekt oder ein Begriff, über den wir Informationen speichern möchten. → Beispiele: //Film//, //Schauspieler//, //Kunde//, //Bestellung//. * Ein **Attribut** ist eine Eigenschaft einer Entität. → Beispiel: Ein Film hat einen //Titel//, ein //Erscheinungsjahr// und ein //Genre//. * Eine **Beziehung** (engl. relationship) beschreibt, wie Entitäten zueinander in Verbindung stehen. → Beispiel: Eine Bestellung wird von einem Kunden ausgelöst. Das ERM dient also dazu, die **Realität in Datenbank-Form zu modellieren**, bevor wir Tabellen anlegen. [[ https://www.youtube.com/watch?v=G8IBLzQzSQs|Erklärungsvideo ERM - 6:35min ]]((Quelle: Timo Bäuerle/YouTube)) ==== Entity-Relationship Diagram (ERD) ==== Ein **ERD** ist die **grafische Darstellung** des ERM. Es zeigt **Entitäten als Rechtecke**, **Attribute als Ovale Felder** um die Entität, und **Beziehungen als Linien bzw. Rauten** zwischen den Entitäten. Beispiel (Filmdatenbank): * Entität **Film** (Titel, Jahr, Regisseur, Genre) * Entität **Schauspieler** (Name, Geburtsjahr) * Beziehung **spielt mit in**: Ein Schauspieler ↔ viele Filme (n:m Beziehung) {{:modul:m290_guko:learningunits:lu03:theorie:erm_guido.png?direct&800|}} ---- Im folgenden ER-Diagramm sehen Sie, wie am BZZ die Entitäten Lehrer, Schüler/Lernende, Klasse und Räume miteinander verbunden sind: {{:modul:m290:learningunits:lu03:theorie:erklasse-1.png?600|}} ==== Kardinalitäten ==== Die **Kardinalität** beschreibt die Art der Beziehung zwischen zwei Entitäten (z. B. Lehrer und Klasse). Sie zeigt, **wie viele Objekte einer Entität mit wie vielen Objekten einer anderen Entität verbunden sind**. Es gibt drei Hauptarten von Kardinalitäten: ---- **1. One-to-One (1:1)** Eine Instanz ((Eine Instanz ist ein konkretes Beispiel oder eine einzelne Ausprägung einer Entität -> Entität "Film" → Instanz: "The Godfather" )) 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 ---- **2. One-to-Many (1:N)** Eine Instanz ((Eine Instanz ist ein konkretes Beispiel oder eine einzelne Ausprägung einer Entität -> Entität "Film" → Instanz: "The Godfather" )) 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 ---- **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 ---- ==== Tools: ERM/ERD zeichnen ==== Zum Zeichnen benutzen wir **Draw.io**, ein kostenloses Online-Tool. * [[https://www.draw.io/| Draw.io öffnen]] * Links in der Leiste gibt es die Kategorie **Entity Relation** → Symbole für Tabellen, Attribute, Beziehungen. * Modelle können gespeichert oder exportiert werden (Datei → Exportieren → PNG). ==== Warum lernen wir das? ==== Wenn wir **Tabellen direkt in MySQL** erstellen würden, ohne vorher ein ERD, hätten wir schnell Probleme: * doppelte oder widersprüchliche Daten, * fehlende Schlüssel → Daten lassen sich nicht eindeutig verknüpfen, * unklare Strukturen → niemand versteht die Datenbank ausser dem Ersteller. Ein **ERD** sorgt dafür, dass: * die Struktur **klar und nachvollziehbar** ist, * wir **richtige Beziehungen** zwischen Tabellen setzen, * wir später in SQL effizient arbeiten können. ==== Zusatzmaterial ==== * [[https://www.youtube.com/watch?v=I-ctLA--THs&t=75s | Youtube DE: ERM einfach erklärt ]] * [[https://www.youtube.com/watch?v=baF9b5Lkiio | Youtube DE: ER-Modell Teil 1 ]] * [[https://www.youtube.com/watch?v=inCwNrTIv4s | Youtube DE: Kardinalitäten und Primärschlüssel im ERM]] ---- [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]]