Datenbankmodellierung (Lernzielkontrolle zum Entity-Relationship-Modell) – Anwendungsentwickler-Podcast #48

Dieser Beitrag ist Teil 10 von 14 in der Serie Lernzielkontrollen.

Eine Kernaufgabe vieler Softwareentwickler – auch in der Abschlussprüfung – ist die Modellierung von Datenbanken. In der achtundvierzigsten Episode des Anwendungsentwickler-Podcasts gehe ich daher die Schritte bei der Modellierung von Datenbanken mit dem Entity-Relationship-Modell durch.

Probeabo bei Audible (Affiliate)

Inhalt

Modellierung mit dem Entity-Relationship-Modell

  • Welche Bestandteile hat ein Entity-Relationship-Modell (ERM) und wie sehen sie (in der Chen-Notation) aus?
    • Entitätstypen (Rechtecke), Attribute (Ovale), Beziehungstypen (Striche mit Rauten) mit Kardinalitäten.
    • Primärschlüssel werden unterstrichen.
    • Fremdschlüssel sind nicht (!) enthalten.
    • m:n-Beziehungen werden nicht (!) aufgelöst.
  • Vorgehensweise bei der Bestimmung der Kardinalität einer Beziehung: Du musst für die Beziehung zwischen den beiden Entitäten in beide Richtungen separat (!) überlegen, wie viele Ausprägungen der anderen Entität zu einer Ausprägung der aktuellen Entität gehören. Also immer zwei (!) Sätze bilden, die mit „1“ beginnen. Dann nimmst du die beiden Ergebnisse der jeweiligen Gegenseite und bist fertig. Beispiele:
    • Ein Login ist genau einem (1) Benutzer zugeordnet. Ein Benutzer hat genau einen (1) Login. -> 1:1
    • Ein Artikel gehört zu einer (1) Warengruppe. Eine Warengruppe hat mehrere (n) Artikel. -> 1:n
    • Ein Hund hat mehrere (m) Herrchen. Ein Herrchen hat mehrere (n) Hunde. -> m:n
  • Wie funktioniert die crow’s foot notation?
    • Anstatt die Anzahl (0, 1, n, 0..1 usw.) der zugehörigen Datensätze an die Beziehung zu schreiben, wird eine grafische Darstellung verwendet. Die Beziehungslinien werden um 0, 1 oder den Krähenfuß (n) ergänzt.
  • Wie kommt man zu einem ER-Modell?
    • Substantive im Aufgabentext (bzw. der Domäne) suchen. Sie sind potentielle Entitätstypen.
    • Ggfs. konkrete Werte in abstrakte Konzepte übersetzen (z.B. Mercedes in Auto oder gelb in Farbe) und Substantive ergänzen.
    • Beschreiben die Substantive andere Substantive werden sie zu Attributen. Die beschriebenen Substantive sind dann Entitätstypen.
    • Ggfs. sinnvolle/notwendige Attribute ergänzen (z.B. Vorname und Nachname bei Personen).
    • Primärschlüssel kennzeichnen und ggfs. ergänzen.
    • Beziehungen zwischen Entitätstypen einzeichnen und Kardinalitäten festlegen.
    • Ggfs. Attribute an die Beziehungen hängen.
    • Restliche Substantive sinnvoll als Attribute einsortieren oder streichen.
    • Fertiges Datenmodell mit Beispielen aus der Praxis verifizieren.

Literaturempfehlungen

  • Einsteigern ins Thema Datenmodellierung empfehle ich die Artikelreihe von Dr. Veikko Krypczyk im Entwickler Magazin. Der erste Artikel ist frei verfügbar: Datenbanken: Grundlagen und Entwurf – entwickler.de.
  • Das Beispiel (Telefonliste) für den Algorithmus zum Erstellen eines Entity-Relationship-Modells habe ich aus einem der Prüfungstrainer für die Abschlussprüfung*.
    Prüfungstrainer Fachinformatiker Anwendungsentwicklung (Affiliate)*
  • Ein tolles Buch, um einmal über den Tellerrand der relationalen Datenbanken hinweg zu schauen, ist Seven Databases in Seven Weeks*. Eine relationale Datenbank (PostgreSQL) wird vorgestellt, aber der Rest des Buches behandelt die unterschiedlichsten Typen von (NoSQL-)Datenbanken und ihre Besonderheiten – gerade auch ber der Datenmodellierung. Absolut lesenswert für jeden Softwareentwickler.
    Eric Redmond - Seven Databases in Seven Weeks (Affiliate)*

Links

Navigation der Serie<< Objektorientierung Teil 2 (Lernzielkontrolle) – Anwendungsentwickler-Podcast #44Datenbankmodellierung (Lernzielkontrolle zum relationalen Tabellenmodell) – Anwendungsentwickler-Podcast #49 >>
Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

6 comments on “Datenbankmodellierung (Lernzielkontrolle zum Entity-Relationship-Modell) – Anwendungsentwickler-Podcast #48

  1. Tachi sagt:

    Danke für die Wiederholung, jetzt wird die Zwischenprüfung positiver ausfallen!

  2. Stefan Macke sagt:

    Hehe 🙂 Ich drücke die Daumen!

  3. Lukas sagt:

    Hallo ich bin begeisterter Hörer des Podcasts. Ich hätte eine Frage: Können in einem erweitertem er model die Karidnaliäten wechseln? Also quasi Hotelkette (1) (n)einzelne Hotels (1) (n) Zimmer?
    Oder müsste die (1) nach Hotels zu einem m?

    Liebe Grüße
    Lukas

  4. Stefan Macke sagt:

    Hallo Lukas, ich weiß nicht, ob ich dich richtig verstehe. Warum sollte die 1 zu m wechseln? Zwischen Hotel und Zimmer besteht doch eine 1:n-Beziehung!? In deinem Beispiel gibt es drei Entitätstypen, die zwei Kardinalitäten haben:

    1 Hotelkette hat n Hotels und 1 Hotel gehört zu 1 Hotelkette (1:n).
    1 Hotel hat n Zimmer und 1 Zimmer gehört zu 1 Hotel (1:n).

  5. Julian sagt:

    Hallo Stefan,
    danke für diese tolle Folge.
    Eine Anmerkung oder Rückfrage habe ich jedoch.
    In deinen Shownotes, schreibst du, dass n:m/m:n – Beziehungen bei ER-Modell nach Chen nicht(!) aufgelöst werden sollen, jedoch war ich immer fest der Annahme, dass gerade diese Beziehungen aufgelöst (mit einer Kreuztabelle) werden sollten. Denn wir brauchen ja einen Hauptschlüssel der Tabelle [1] als Fremdschlüssel in der Tabelle [n].
    Könntest du mir das erklären ?
    Danke vorab und weiter so, Dein Podcast und die dazugehörigen Shownotes sind Gold wert, Deine Azubis können sich glücklich schätzen!

    MFG
    Julian

  6. Stefan Macke sagt:

    Hallo Julian, Kreuztabelle sagt eigentlich schon alles: du bist gedanklich im Tabellenmodell und nicht (mehr) im ERM. Das ERM ist eine Vorstufe zur Modellierung von Datenmodellen, die du danach (!) in eine konkrete Datenbankimplementierung – meist relational – überfühen kannst. Und in relationalen Datenbanken werden m:n-Beziehungen natürlich mit einer Zwischentabelle aufgelöst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax