"is-a" Beziehung / Spezialisierungsbeziehung (in MySQL Datenbank)

  • Denke mal das passt am ehesten hier her...
    Ich habe in einem ERM eine Fallunterschidung drin, hier speziell:


    Es gibt "Video" (mit Attributen) und einer File-ID als Primärschlüssel.


    Ein Video kann a.) ein Film (mit Attributen) oder b.) Eine Episode (mit anderen Attributen) sein, welche dann wiederrum mit Staffel und Serie in Verbindung steht.
    Wie ich letzteres umzusetzen habe glaube ich zu wissen, allerdings ist mir die Umsetzung der "is-a" Beziehung nicht klar.
    Mein Dozent meinte ich müsse aus "Film" und "Episode" jeweils eine Tabelle machen und diese in 1:1 Beziehung mit dem übergeordneten Objekt Video stellen.


    Nachdem was ich über die Normalisierung von 1:1 weiss wird das dann jedoch eine Tabelle, also hätte ich am ende eine Tabelle namens "Film" und eine namens "Episode".
    Ist das so korrekt?
    Im Endeffekt hätten dann ja beide Tabellen die File-ID als Primärschlüssel, hätten aber an und für sich miteinander nichts zu tun.
    Das ist mir irgendwie unklar.
    Hat jemand einen guten Tip bzw. eine Seite wo speziell auf "is-a" eingegangen wird?
    Die seiten welche ich bisher gefunden habe waren zu dieser Thematik nicht besonders aufschlussreich... .-/

  • Mein Dozent meinte ich müsse aus "Film" und "Episode" jeweils eine Tabelle machen und diese in 1:1 Beziehung mit dem übergeordneten Objekt Video stellen.

    Du brauchst also drei Tabellen: Video (gemeinsame Attribute; ID ist Primärschlüssel), Filme und Episoden (jeweils spezifische Attribute; ID ist Fremdschlüssel auf die Video-ID und wegen der 1:1-Beziehung ebenfalls Primärschlüssel). Zusätzlich gilt, dass jedes Video ein Film oder eine Episode sein muss, aber nicht beides gleichzeitig sein kann. Das muss aber nicht immer so sein.

    Give root password for maintenance (or type Control-D to continue): _

  • Klassisches Problem in der Informatik. Eigentlich (und tatsächlich) passen Objekte und relationale Datenbanken nicht so recht zusammen. Ein RDBS gibt nicht vor wie die Abbildung von solch einer Vererbungshierarchie aussehen soll. RDBS sind dafür auch gar nicht gemacht geworden. Dennoch: Je eine Relation pro Klasse ist ein Ansatz, würde ich hier auch so realisieren. Also Relationen "Video", "Film", "Episode". Andere Ansätze findest du unter http://de.wikipedia.org/wiki/Objektrelationale_Abbildung und mehr Details unter http://de.wikipedia.org/wiki/O…tional_impedance_mismatch sowie in Vorlesungen zu OODBs.


    Edit: Die referentielle Integrität mittels Schlüsselbeziehungen reicht für die Abbildung nicht aus. Das RDBS kann so nicht verhindern, dass ein Film nicht auch eine Episode ist und umgekehrt. Aber bei deinem Anwendungsfall ist das eher theoretische Spielerei und nicht so entscheidend.

  • Hmm,
    denke ich ahbe es so gemacht - auf jeden Fall wird die DB erstellt ohne zu meckern.
    Ein kleines Füllscript habe ich auch schon geschrieben, mal schauen ob die Abfagen laufen werden...


    Das DB Script:



    Falls da noch offensichtliche Fehler auffallen...?
    Danke für eure Hilfe!

  • Sieht gut aus. Theoretische Entscheidung wäre noch: Wenn du keine Transaktionssicherheit brauchst reicht als Engine MyISAM, die ist ohne ACID schneller als InnoDB.


    Ansonsten würde ich Schauspieler und Regisseur ähnlich wie mit Videos modellieren, nur das eine Person tatsächlich beides sein kann (Clint Eastwood...). Alternativ kannst du auch ma in der XBMC-Datenbank "spicken". Insgesamt drehen sich die Entscheidungen ja darum wie detailiert du es machen möchtest.


    Gruß

  • InnoDB sollen wir nehmen, wegen der referenziellen Integrität.
    Das mit den Schauspielern/Regisseuren ist mir gestern aufgefallen beim befüllen - im Falle Sylvester Stallone...
    Die Leute bekommen jetzt von mir statt Star_ID und Reg_ID eine "Personalnummer" verpasst, so spare ich wieder eine Tabelle ein. :]
    Danke für´s drüberschauen - sieht so aus als wenn ich doch noch vor dem offiziellen Zeitplan damit fertig werde. :tup

  • so, hier wäre nun das aktuelle ERM.
    Ich spare zwar keine Tabellen ein, aber der Aufbau ist logischer, da nun Stallone oder Eastwood die gleiche Person ist, egal ob er Regie führt,schauspielert oder beides macht. :)


    Was mir noch nicht so ganz klar ist - wie baut man das nun wirklich sinnvoll in Tabellen um?
    Auf diversen Seiten findet sich der Hinweis das man 1:1 auflöst und aus den 3 Tabellen eben 2 Tabellen macht.
    Ich hatte bisher für das 1:1 / is_a eben 3 Tabellen genutzt, was das ganze bei einer Unterscheidung zwischen Film und Episode meines Erachtens übersichtlich gestaltet, da ja bei den Speziellen
    noch unterschiedliche Attribute zu finden sind.
    Nun macht das ja eher keinen Sinn mehr, wenn die Objekte Schauspieler und Regisseur ja alles erben was das Objekt Prominenter an Attributen hat,
    selbst aber keine speziellen Attribute besitzen.
    Ich würde nun also die dem Prominenten vergebene Pro_ID direkt in die Tabellen führt_Regie und/oder wirkt_mit eintragen, korrekt?

  • Zitat

    Ich hatte bisher für das 1:1 / is_a eben 3 Tabellen genutzt, was das ganze bei einer Unterscheidung zwischen Film und Episode meines Erachtens übersichtlich gestaltet, da ja bei den Speziellen
    noch unterschiedliche Attribute zu finden sind.


    Da gibt es hier kein richtig oder falsch. Kommt drauf an, was man modellieren will. Mit der dritten Tabelle "Video" kannst du halt nach Instanzen verschiedener Klassen "Film" und "Episode" fragen. Das wäre die eher objektorientierte Sicht.


    Weil ich jetzt gerade so darüber nachdenke: Vermutlich würde ich Film und Episode in der Datenbank nicht mit Video in einen Topf werfen. Aber das heißt nicht, dass irgendwas falsch ist an deinem Ansatz. Du hast deine Entwurfsentscheidung begründet und von daher passt das ganz gut.


    Zitat

    Ich würde nun also die dem Prominenten vergebene Pro_ID direkt in die Tabellen führt_Regie und/oder wirkt_mit eintragen, korrekt?


    Ja genau. Die Beziehung drückt ja die Rolle des Prominenten aus, benenne einfach die beiden Attribute die die Fremdschlüssel tragen entsprechend.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!