Übungsaufgabe: Datenbank detailliert modellieren (konzeptuell/ERM und logisch/Relationenmodell)

https://bildung.social/@oerinformatik/115598949050198929/

https://oer-informatik.de/db-modellierung-erp

tl/dr; Als Übungsaufgabe soll eine Datenbank für ein rudimentäres Enterprise-Ressource-Planning-Tool erstellt werden. Dabei soll möglichst genau auf die beschriebenen Anforderungen eingegangen werden. In der konzeptuellen- und logischen Datenbankmodellierungsphase soll der Notationsumfang der jeweiligen Modelle zur präzisen Abbildung ausgeschöpft werden. Eine Beispiellösung ist gegeben, damit man überprüfen kann, ob alle Details aus den Anforderungen erkannt wurden. (Zuletzt geändert am 23.11.2025)

Ausgangslage

Als Teil des unternehmensinternen Enterprise Ressource Planning (ERP) soll die Möglichkeit geschaffen werden, Betriebsmittel wie Laborausstattung, Werkzeuge usw. zu inventarisieren, verwalten und zu buchen. Hierfür sollst Du eine Datenbank entwerfen. In der Datenbank sollen Daten über Betriebsmittel, deren Lagerort, Eigenschaften und eine Buchungshistorie hinterlegt werden können.

Die Applikation zur Verwaltung wird in einem anderen Projekt realisiert. Hier geht es also nur um den Entwurf der Datenbank.

Zur Bearbeitung solltes Du über Kenntnis zum konzeptuellen Datenmodell (Entity Relationship Modell), dem logischen Datenmodell (Relationenmodell) und der Normalisierung eines logischen Datenmodell verfügen.

Rahmenbedingungen

  • Modelliere die Struktur der geforderten Datenbank in einem konzeptuellen und einem logischen Datenmodell.

  • Wähle für die Ergebnisse dieser beiden Entwurfsphasen ein geeignetes Modell aus, dass den Umfang der Anforderungen abbilden kann. Die beiden Modelle sollen einem weiteren Team, dass diese Datenbank später realisieren soll, alle relevanten Modellinformationen liefern und getroffene Entscheidungen begründet und nachvollziehbar darstellen.

Anforderungen an das Datenmodell

Aus einem ersten Gespräch mit der Fachdomäne ergibt sich folgende Liste der Anforderungen:

  • In der Datenbank soll Inventar erfasst werden. Unter Inventar können alle möglichen Betriebsmittel erfasst werden (physisch vorhandenes wie Messgeräte ebenso wie beispielsweise Softwarelizenzen).

  • Für Inventar muss ein Name angegeben werden. Es soll ein Zugangsdatum und ein Abgangsdatum erfasst werden. Die Namen können mehrfach vergeben werden. Inventar ist immer einer bestimmte InventarArt zugeordnet. Inventar wird jeweils über eine InventarArt und eine für jede InventarArt laufende Nummer identifizierbar sein. (z.B. gibt es für die InventarArt “Arduino” die Inventare Arduino 1, Arduino 2, für die InventarArt “Raspberry” Raspberry 1, Raspberry 2…)

  • Inventar kann einem einzigen Ort (z.B. “Raum 156” oder ein bestimmter Schrank) zugeordnet sein. Es sollen in der Datenbank auch Orte erfasst werden können, für die bislang kein Inventar existiert. Bei Orten wird nach unterschiedlichen OrtArten unterschieden, beispielsweise Standorte, Gebäude, Räume, Schränke oder Fächer (es gibt hierfür jedoch keine abschließende Liste). Für jeden Ort muss eine OrtArt existieren. Für jeden Ort muss ein eindeutiger Name gespeichert werden. Es kann eine Beschreibung ergänzt werden, in der individuelle Texte stehen können (z.B. Adresse, Fachgröße o.ä.).

  • Orte können hierarchisch anderen Orten zugewiesen werden. Mehrere Gebäude können so einem Standort zugeordnet werden, mehrere Räume einem Gebäude usw. Es soll für jeden Ort nur einen übergeordneten Ort geben können. Die Struktur soll so aufgebaut sein, dass neue, bislang unbekannte Orte in der Baumstruktur eingehängt werden können (z.B. die “Garage 123” einem Standort z.B. “CSBME”).

  • Es gibt zwingend für jedes Inventar eine verantwortliche Person. Personen können für mehrere Inventare verantwortlich sein.

  • Für eine Person wird ein Vorname, Nachname und eine Anschrift gespeichert.

  • Inventar ist mindestens einer, kann aber auch mehreren Abteilungen zugeordnet werden. Allen Abteilungen können mehrere Inventare zugeordnet werden. Für Abteilungen sollen lediglich die Namen gespeichert werden. Über diese werden Abteilungen eindeutig identifiziert.

  • Jede Person ist einer Abteilung zugeordnet, in allen Abteilungen befinden sich mindestens eine Person. Jede Abteilung verfügt über genau einen Abteilungsleitenden. Nicht jede Person ist ein Abteilungsleitender.

  • Inventar kann von einer Person gebucht werden. Hierbei wird eine Start- und eine Endzeit erfasst. Auch die sich daraus ergebende Buchungsdauer soll erfasst werden. Inventare können von derselben Person mehrfach gebucht werden - zu unterschiedlichen Zeiten. Personen können auch zeitgleich unterschiedliche Inventare buchen. Zu jedem Zeitpunkt kann ein Inventar aber immer nur einmal gebucht werden - das muss aber nicht im Rahmen des Modells gelöst werden.

Beispiellösungen

Konzeptuelles Modell:

Den größten Notationsumfang für ein konzeptuelles Modell bietet die Chen-Notation. Ich nutze hier die modifizierte Darstellung, die erweitert ist um Optionalitäten, abgeleitete Attribute, Schlüsselattribute, schwache Entitätstypen/Schlüssel, identifizierende Relationen und mehrwertige Attribute.

Entitätstypen:

Aus der Aufgabenstellung ergeben sich direkt die kursiv geschriebenen Entitätstypen Inventar, Ort, Person, Abteilung. Über Eigenschaften dieser Entitätstypen ergeben sich weiterhin InventarArt und OrtArt. Als Relationstyp mit Attributen muss auch Buchung wie ein Entitätstyp umgesetzt werden.

Kardinalitäten:

  • eins-zu-viele: Es ergeben sich sechs Relationen mit einer Vielfachheit auf einer Seite.
  • viele-zu-viele: Zweimal liegt diese Kardinalität vor: bei Inventar/Abteilungen sowie bei Inventar/Person über Buchung (sofern das nicht in zwei 1:n-Relationen aufgelöst wurde)
  • eins-zu-eins: Zwischen der Abteilung und dem Abteilungsleitenden (Person) liegt eine direkte Verküpfung vor.

Optionalitäten:

In den Anforderungen sind hierzu einige Schlüsselbegriffe für Optionalität genannt (“kann”, “können”, …), bei anderen Anforderungen wird expizit auf fehlende Optionalität hingewiesen ( “muss”, “zwingend”, “jede/r”, “genau”…).

Optional ist die Ortszuweisung von Inventar in beiden Richtungen. Personen und Abteilungen müssen nicht zwingend ein zugewiesenes Inventar haben. Die hierarchische Zuordnung von Orten ist in beide Richtungen optional. OrtArten müssen nicht einem Ort zugeordnet werden (das ergibt aus der Berarbeitungslogik, nicht aus der Aufgabenstellung).

Mehrwertige Attribute:

Genannt wird die Anschrift als klassisches mehrwertiges Attribut von Person.

Abgeleitete Attribute:

Die Dauer eine Buchung berechnet sich aus der Start- und Endzeit und ist somit kein eigenständiges Attribut.

Schwache Entitätstypen, schwache Schlüssel und identifizierende Relationen:

Es wird genannt, dass Inventar immer über die InventarArt und eine je InventarArt laufende Nummer identifiziert wird. Diese Beziehung ist also eine identifizierende Relation, Inventar benötigt eine InventarArt - ist somit ein schwacher Entitätstyp und die laufende Nummer selbst reicht nicht, um ein Inventar zu identifizieren, weil noch die InventarArt benötigt wird: es handelt sich also um einen schwachen Schlüssel.

Bekannte Primärschlüssel:

Neben dem schwachen Schlüssel (s.o.) wird nur bei dem Abteilungsnamen von einem Schlüsselattribut gesprochen. Andere Schlüssel sind in dieser Planungsphase nicht auszuwählen.

Entity Relationship Diagramm nach Chen

Im ganzen ergibt sich das folgende ER-Diagramm:

ER-Diagramm zur Enterprise-Ressource-Planning-Aufgabenstellung
ER-Diagramm zur Enterprise-Ressource-Planning-Aufgabenstellung

Logisches Modell:

Transformation der Entitätstypen:

Alle sechs Entitätstypen und der Relationstyp Buchung werden zu je einem Relationenschema. Die zugehörigen Attribute werden diesen Relationssschemata zugeordnet.

Auswahl der Primärschlüssel der unabhängigen Relationenschemata

Natürliche oder gegebene Primärschlüssel gibt es nur für Abteilung, für alle anderen müssen Schlüsselattribute oder -kombinationen bestimmt (natürliche Schlüssel) oder ergänzt (künstliche Schlüssel) werden.

Im Fall des Orts und der OrtArt entscheide ich mich für die natürlichen Schlüssel der Namen. Ich gehe davon aus, das diese sich nicht ändern.

Bei der InventarArt und den Personen wähle ich einen künstlichen Schlüssel, da ich hier im Verlauf der Datenbanknutzung mit Änderungen rechne. Im Datenbankbetrieb würde das erhöhten Administrationsaufwand über den Abgleich der Fremdschlüssel verursachen.

Auswahl der Primärschlüssel der abhängigen Relationenschemata

Für Inventare als schwachen Entitätstypen wähle ich einen zusammengesetzten Primärschlüssel: die laufende Nummer (die je InventarArt eindeutig ist) und die zugehörige InventarArt über deren ID. Somit muss der Primärschlüssel der InventarArt als Fremdschlüssel in Inventar vorhanden sein und ist dort Teil des Primärschlüssels.

Im Fall der Buchungen ergibt sich aus den bestehenden Attributen ebenso ein zusammengesetzter Schlüssel: jede Buchung ist eindeutig beschrieben durch die Person, das Inventar und den Zeitpunkt. Da Inventar selbst über einen zusammengesetzter Primärschlüssel verfügt, wären hier also vier Attribute Primärschlüssel: laufendeNummer, InventarArtID, PersonID, Startzeit.

Derart viele Teilschlüssel sind in der Praxis aber sehr hinderlich. Ich entscheide mich hier also für einen künstlichen Schlüssel BuchungsID. Jedoch muss ich dann beachten, dass alle oben genannten Teilschlüsselkandidaten jeweils eingabepflichtig (NOT NULL) und in ihrer Kombination einzigartig (UNIQUE) sind.

Transformation der Relationen

  • 1:n (ohne Optionalität)
    • InventarArt-Inventare (1:n)
    • Abteilung-Person (“ist in” 1:n) Der Primärschlüssel der 1-Seite wird als Fremdschlüssel in der n-Seite eingetragen. Da keine Optionalität vorliegt, muss hier der NOT NULL-Constraint ergänzt werden, damit der Fremdschlüssel nicht leer bleibt. Sofern der Fremdschlüssel wie im Fall der InventarArtID Teil des Primärschlüssels ist, ist der NOT NULL-Constraint ohnehin gegeben und muss nicht explizit genannt werden. Die zwingende Zuordnung auf der n-Seite kann im Datenmodell nicht umgesetzt werden und muss auf Applikationsseite realisiert werden. Sie ist hier nur durch die Krähenfuß-Darstellung sichtbar gemacht.
  • c:nc (mit Optionalität)
    • OrtArt-Ort (1:nc)
    • Ort-Inventar (c:nc)
    • Person-Inventar (“verantwortet” 1:nc) Der Primärschlüssel der 1-Seite wird als Fremdschlüssel in der n-Seite eingetragen. Wenn auf der 1-Seite keine Optionalität vorliegt, muss hier der NOT NULL-Constraint ergänzt werden, damit der Fremdschlüssel nicht leer bleibt. Läge eine zwingende Zuordnung auf der n-Seite vor, so könnte diese im Datenmodell nicht umgesetzt werden und müsste auf Applikationsseite realisiert werden.
  • nc:mc (mit Optionalität)
    • Inventar-Abteilung (nc:m)
    • Person-Inventar (“bucht” nc:mc) Hier werden jeweils neue Relationenschemata benötigt. Im Fall der Buchung wurde dies bereits oben erläutert. Bei Inventar und Abteilungen ist darauf zu achten, dass beide Teilschlüssel von Inventar in das neue Relationenschema übernommen werden und gemeinsam mit dem Abteilungsnamen den Primärschlüssel (und jeweils Fremdschlüssel) bilden. Auch hier gilt: die zwingende Zuordnung eines Invantars zu einer Abteilung kann in diesem Modell nicht gelöst werden. Sie ist hier nur durch die Krähenfuß-Darstellung sichtbar gemacht.
  • 1:1 (mit und ohne Optionalität)
    • Abteilung-Person (“leitet” c:1) Da in diesem Fall auf einer Seite eine Optionalität gegeben ist, entfällt die Realisierung der 1:1-Beziehung in einem Relationenschema. Es muss also ein Fremdschlüssel bei Abteilungen eingetragen werden, der nun aber zwingend eingegeben werden muss (NOT NULL) und einzigartig sein muss (UNIQUE).

Normalisierung der Relationenschemata

  • 1NF: Sind alle Attribute atomar? Das Attribut “Anschrift” ist eine Menge aus Straße, Hausnummer, PLZ, Ort. In Ausnahmefällen könnte man argumentieren, dass der Anwendungsfall lediglich einen Adressaufklebertext benötigt, daher die Aufteilung nicht weiter nötig ist. Dies ist aber eine bewusste, zu dokumentierende Entscheidung. Im Regelfall sollten die Attribute aufgeteilt werden.

  • 2NF: Sind im Fall von zusammengesetzten Primärschlüssel alle Nichtschlüsselattribute vom gesamten Schlüssel abhängig? Zusammengesetzte Schlüssel existieren in den Relationsschemata Inventare und Inventare2Abteilungen. In beiden Fällen sind jedoch alle Attribute vom gesamten Primärschlüssel abhängig.

  • 3NF: Folgen aus Nichtschlüsselattributen weitere Nichtschlüsselattribute? Eine solche Abhängigkeit ist nicht gegeben. Es gibt Meinungen, dass eine solche Abhängigkeit zwischen PLZ und Ort gegeben ist - aber dies trifft nicht in jedem Einzelfall zu und wird daher bewusst nicht normalisiert.

Relationenmodell

Das sich daraus ergebene logische Modell sieht wie folgt aus. Es wurden zusätzlich zu den nötigen Fremdschlüsselbeziehungen noch die Martin-(“Krähenfuß”)-notierten Beziehungen angegeben und einige Constraints per Kommentar ergänzt, da sie sich im Modell in gewohnter Darstellung nicht haben anzeigen lassen.

Relationenmodell zur Enterprise-Ressource-Planning-Aufgabenstellung
Relationenmodell zur Enterprise-Ressource-Planning-Aufgabenstellung

Weitere Infos und Übungsaufgaben

Ich hoffe, durch die erläuternden Texte der Beispiellösung sind die Konzepte der Datenmodellierung deutlich geworden. Jetzt ist es an der Zeit, das ganze noch einmal alleine zu üben:


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: Übungsaufgabe: Datenbank detailliert modellieren (konzeptuell/ERM und logisch/Relationenmodell)” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/db-modellierung-erp veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-sql/db-modellierung-messwesen. Stand: 23.11.2025.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: