Gedanklicher Knoten zur Datenmodellierung

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

ich möchte dieses Unterforum entführen und eine Frage zur allgemeinen Datenmodellierung stellen. Zur Zeit habe ich einen Knoten im Kopf. Ich habe zur Veranschaulichung zwei Bilder mitgebracht. Darauf seht ihr zwei Varianten. Nur welche ist die bessere? Ich habe mal eben auf die Schnelle einen Ausschnitt zusammengebastelt. Worum geht es?

Es geht darum, dass ich einen Film auf ein bestimmtes Medium haben muss. Ansonsten schwirrt der Film wie ein Gespenst in einem luftlerren Raum. Nehmen wir an, dass der Film auf das DVD-Medium ist (Mediumtyp). Wir alle wissen, dass ein Medium von Firmen hergestellt werden (Mediumhersteller). Darüber hinaus wissen wir auch, dass ein Medium, hier DVD-Rolling, von mehreren Firmen hergestellt werden kann (Mediumtyp_Mediumhersteller). Wir wissen auch, das sich - philosophisch gesprochen - alles Wirkliche in der Welt durch Raum und Zeit bewegt. Aus diesem Grund muss sich das Medium aneinem Ort (Aufbewahrungsort) befinden. Nehmen wir mal an, ihr habt einen Medienraum und dort stellt ihr den DVD-Rolling mit dem Film dadrauf in einem Regal.

Folgendes, gedankliches Problem:
Wie ihr an den beiden Bildern, die ich euch mitgebracht habe, seht, bin ich mir nun nicht ganz sicher, wohin ich die Film-Tabelle zuordnen soll. Schauen wir uns das mal näher an.
Bild
Hier ist meine erste Idee, dass ein Medium unmöglich gleichzeitig an zwei Orten (Aufbewahrungsort) sein kann. Also ordnete ich die Film-Tabelle der Mediumtyp-Tabelle zu. Wenn also ein Benutzer im meinem Programm ein neues Medium erstellt, angibt, was alles auf dem Medium ist und wo sich das Medium befindet, so empfand ich diese Variant zunächst besser. Denn der Benutzer soll nicht gezwungen werden, anzugeben, von welchem Hersteller das Medium kommt. Allerdings kann ich dem Benutzer dazu zwingen, dass er angibt, was auf dem Medium ist und wo sich dieses Medium befindet. Denn ein Medium MUSS sich irgendwo befinen.

Bild
Diese Variante wirkte auf für mich logisch und übersichtlicher. Filme, Medium und Hersteller werden in einer Zuordnungstabelle untergebracht, und die Zuordnungstabelle wird dann der Aufbewahrungsort.-Tabelle zugeordnet. Was mich hierbei etwas verunsichert, ist, dass ich noch nie gesehen habe, dass eine Verknüpfungstabelle/Zuordnungstabelle einer anderen Tabelle zugeordnet wird, wie es in diesem Falle gezeigt wird. Es wirkt auf mich etwas "fremd".

Was meint ihr?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sophus: ich habe das Gefühl, dass Du zu sehr an der Struktur hängst, bevor Du genau definiert hast, welche Daten Du eigentlich speichern willst.
Was ist eine Einheit (Film oder konkretes Medium)? Welche Daten willst Du pro Einheit speichern?
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sirius3: Meine Datenbankmodellierung hat an Dimension gewonnen. Ich habe mich bewusst auf diesen kleinen minimalen Ausschnitt konzentriert, damit es nicht unübersichtlich wird. Aber vielleicht kann ich den Ausschnitt etwas erweitern.

In meiner Modellierung wird der Film-Bereich in zwei Abschnitten geteilt. Einmal in Allgemein und einmal in Details. Im allgemeinen Bereich werden, wie der Name schon sagt, nur allgemeine Daten gespeichert. Die Daten sind so allgemein, dass es egal ist, ob es sich um ein FSK16 oder FSK18, oder ob es eine Kinofassung oder eine Directors Cut ist oder ob es sich um eine bestimmte Veröffentlichung handelt. Zum Beispiel: Es gibt einen Horrorfilm "Freddy vs. Jason". Diesen Film gibt es einmal als Kinofassung, einmal als FSK16 und FSK18 und in vielen Veröffentlichungen. Und die allgemeinen Daten wären beispielsweise der Titel des Filmes, die Schauspieler, Produzenten, und vieles mehr. Allgemeine Daten zum Film werden erst einmal so angelegt. Und jetzt kommt der Detail-Bereich. Hier geht es richtig zur Sache. Welche Fassung hast du? Hast du FSK16 oder FSK18? Ist dieser Film auf USB oder DVD oder Blu Ray? Was für Extras sind auf dieser DVD? Welche Sprachen werden angeboten? Hat der Film Untertitel? Und vieles mehr. Kurzum: Im Detail-Bereich landest du, wenn du den Film tatsächlich besitzt. Hier werden wirklich detaillierte Informationen abgefragt.

Das heißt. Die oben abgebildeten Bilder zeigen den Detail-Bereich. Nur habe ich dies absichtlich verschwiegen, damit nicht zu viele Informationen aufeinander prallen. Da - im Gegensatz zu Allgemein-Bereich - der Benutzer im Detail-Bereich den Film tatsächlich besitzen muss, lande ich automatisch bei dieser Überlegung. Wenn der Benutzer erst einmal NUR die allgemeine zum Film angeben mag, dann habe ich das Problem nicht. Denn dies sagt ja nicht, dass der Benutzer den Film auch tatsächlich hat.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Ich habe mir anhand deiner Beschreibung mal ein ER-Modell gebastelt und komme auf deinen ersten Vorschlag mit folgenden Entitäten:

Aufbewahrungsort, Film, Mediumtyp, Hersteller und Mediumtyp_Hersteller (letzteres, da zwischen Mediumtyp und Hersteller eine N-zu-M-Kardinalität besteht: ein Mediumtyp `kann` verschiedene Hersteller haben, und viele Hersteller können verschiedene Medientypen *herstellen*)

Ich sehe eine Kardinalität zwischen Mediumtyp und Film, soll heißen, ich würde die Tabelle / Entität `Film` auch an Mediumtyp binden. Ich bin kein Datenbankkönig, aber im ER-Modell *ergibt* sich Mediumtyp_Hersteller ja als Zwischentabelle aus Mediumtyp und Hersteller, da kann man glaube ich aber nicht unbedingt die Entität Film ranstöpseln. Lyncht mich, wenn ich falsch liege.


Edit: ich meinte "ich komme auf deinen ersten Vorschlag"
When we say computer, we mean the electronic computer.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Ich habe mein Modellierungs-Beispiel ein wenig sortiert und umgeordnet. Ich hoffe, dass es klarer wird, was ich vor habe.

Bild
Zunächst landet der Benutzer in meinem Programm auf die Eingabemaske, wo er detaillierte Informationen eingeben kann und an manchen Stellen sogar muss. Nachdem dieser das erledigt hat, kann er dann direkt auf "Speichern" klicken oder aber, er möchte auch gleich ein Medium in der Datenbank erstellen und angeben, um welchen Mediumtyp es sich handelt, worauf sein Film gespeichert ist. Und natürlich kann er beim Erstellen des besagten Mediums auch den Aufbewahrungsort angeben, wo sich dieses Medium befindet. Allerdings muss der Benutzer das NICHT sofort machen. Er kann viel später ein Medium anlegen und die Angaben (Mediumtyp, Mediumhersteller und Aufbewahrungsort) vervollständigen.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Ist es denn schlimm, dass die "Spezialattributwerte" wie FSK18, FSK16 usw. erstmal nicht gesetzt werden, aber die Attribute in der Tabelle vorhanden sind?

Ansonsten müsstest du wohl sowas wie eine weitere Entität "Detail" einbringen, aus der dann wieder eine Zwischentabelle Detail_Film resultiert. Die zusätzlichen Attribute "Fassung" usw. würden dann dieser Detail_Film-Tabelle angehängt werden, da sie weder Detail noch Film eindeutig zugeordnet werden können. Na ja, ich würde das ganz schnell vergessen und die Attribute einfach `Film` anhängen.
When we say computer, we mean the electronic computer.
Antworten