Modellierung meiner Datenbank

Hallo ukulele,

wenn du im wesentlichen zustimmst, dann heißt es, dass du noch nicht ganz zustimmst :) Was genau würdest du bei mir verändern? Was würdest du noch hinzufügen? Ich gehe immer von Rand-Situationen aus. Stellen wir uns doch mal folgende Situation vor:

Du hast einen Film. Diesen hast du als VHS, als Datei und einmal als originale DVD. Es handelt sich um ein und den selben Film bzw. die selbe Fassung, nur sind die auf unterschiedlichen Medien verteilt. Du hast quasi den Film drei mal. Der Grund für diese Rand-Situation könnte sein, dass du den Film von der VHS für deine Eltern digitalisieren möchtest. Deswegen hast du sie erst einmal den Film gleich zwei Mal, einmal auf dem Medium VHs und einmal auf dem Medium Festplatte. Und den gleichen Film auf die originale DVD hast du dir erworben. Jetzt hast du von einem Film gleich drei Stück auf unterschiedlichen Medien verteilt. Nun will man es irgendwie in meinem Programm verwalten.

Auch wenn ich den Film sowohl physikalisch als auch nicht-physikalisch drei mal besitze, so wird der Film ja nur einmal in die Datenbank gespeichert - wie gesagt, wenn es drei gleiche Filme sind. Durch die Zwischentabelle FilmFassung_Medium kann ich also einen Film gleich in mehreren Medien anlegen. Nun liegen die Medien in unterschiedlichen Orten. Die VHS in der Wohnstube, die Datei auf dem Recher, der im Schlafzimmer steht und die originale DVD im Keller. Dafür sorgt dann die Tabelle Aufbewahrungsort. Jedes Medium hat unterschiedliche Verpackungen. Die VHS ist in einem Papp-Schuber, die DVD in einer Plastikhülle und die Festplatte hat natürlich keine Verpackung. Dafür sorgt dann die Tabelle Verpackung. Das gleiche wird dann auch mit dem Hersteller gespielt. Die Festplatte als Medium ist vom Hersteller Western Digital, die DVD ist original und die VHS auch. Hier sorgt die Tabelle Hersteller. Und jedes Medium kann man verleihen. Du kannst ja die VHS deiner Tante ausleihen, die DVD deinem Freund und die Festplatte deinen Eltern. Dafür sorgt dann die Tabelle Verleih.

Aber: Wenn ich mir meine Tabellen hinter Medium ansehe, entdecke ich womöglich ein kleines Problem. Ich kann zum Beispiel nicht fragen, was ich der Person X ausgeliehen habe. Oder welche Medien zu welchem Hersteller gehören, oder welche Medien befinden sich im Aufbewahrungsort Schlafzimmer? Also rückwärts abfragen sieht in meiner Konstruktion schlecht aus. Oder was meinst du ukulele?
 
Werbung:
Nein ich finde das schon richtig. Ich würde es minimal anders machen, Beispiel:

1 Film
=> 1x VHS
=> 1x DVD (2 Disc Edition)
=> 1x Datei (2x 650MB Divx)

Für mich wäre das erstmal drei Einträge in der Tabelle FilmFassung_Medium. In 99% aller Fälle werden deine DVDs in der selben Hülle mit der selben EAN (war glaube ich EAN) beim selben Händler gekauft und immer am selben Ort lagern. Kurz gesagt: Deine Atribute beziehen sich im wesentlichen auf beide DVDs gleichzeitig, genauso wie Dateien in 90% der Fälle auf der selben Festplatte im selben Pfad liegen.

Auch muss man hier aus Sicht vieler Anwender sagen das sie vermutlich keine zwei Einträge für eine DVD erfassen wollen. Im Fall der DVD hast du also kein Problem und musst höchstens optional die Möglichkeit bieten, sowas zu erfassen. Die Tabelle könnte dann z.B. FilmFassung_Medium_Datentraegerdetails heißen, hier müsste aber nichts eingetragen werden.

Im Fall der Datei(en) hast du möglicherweise den umgekehrten Weg. Ein Script durchsucht eine Festplatte nach Dateien (die alle eigene Atribute haben wie Länge, Codec, etc.). Diese müssen vom Erfasser oder automatisch als ein Eintrag in FilmFassung_Medium eingepflegt werden. Die Datei-Atribute stehen in einer weiteren Tabelle z.B. FilmFassung_Medium_Dateidetails.
 
Hallo ukulele,

wie ich sehe, denkst du einen Schritt weiter. Du bist schon beim Thema »technische Details«. :) Was mir jedoch Kopfschmerzen bereitet, ist die Tatsache, dass ich in meiner bisherigen Modellierung nicht rückwärts abfragen kann. Hier noch einmal meine Modellierung:
Demo4-2.jpg
Schau dir mal alle Relationen rechts neben der Relationen Medium an. Ich kann zum Beispiel nicht abfragen, was die Person X alles von mir ausgeliehen hat? Oder, welche Medien liegen im Aufbewahrungsort X? Oder, zeige mir alle Medien mit dem Mediumtyp »Datei« etc. Meine erste Idee war, bei allen eine Zwischentabelle zu platzieren. Aber ich denke, das ist dann keine professionelle Modellierung mehr. Hast du da eine Idee?
 
Sry viel zu tun :)

Ich sehe nicht ganz das Problem alle Medien an einem Aufbewahrungsort zu ermitteln und sich dann durchzuhangeln zu den jeweiligen Filmfassungen oder was auch immer man haben möchte. Es wird zweifelsohne ein komplexer Select aber gehen tut das.
 
Wirklich? Ich sehe leider keinen Weg, denn von der Relation Medien aus besteht nur eine 1:n-Beziehung zu den anderen Relationen wie Aufbewahrungsort, Medientyp, Verpackung, Hersteller etc. Wenn der Anwender also einen Aufbewahrungsort angelegt hat, sagen wir mal "Keller", mit der ID 12. Und er will nun wissen, welche Medien alles im "Keller" sind. Ich wüsste nicht, wie ich ansetzen sollte, denn alle Schüssel des "Kellers" liegen als Fremdschlüssel in der Relation Medien. Du sagtest, es wäre eine sehr komplexe Abfrage. Wie könnte man es vereinfachen? Hast du eine Idee? Vielleicht doch als Notlösung eine m:n-Beziehung?
 
Wirklich? Ich sehe leider keinen Weg, denn von der Relation Medien aus besteht nur eine 1:n-Beziehung zu den anderen Relationen wie Aufbewahrungsort, Medientyp, Verpackung, Hersteller etc. Wenn der Anwender also einen Aufbewahrungsort angelegt hat, sagen wir mal "Keller", mit der ID 12. Und er will nun wissen, welche Medien alles im "Keller" sind. Ich wüsste nicht, wie ich ansetzen sollte, denn alle Schüssel des "Kellers" liegen als Fremdschlüssel in der Relation Medien. Du sagtest, es wäre eine sehr komplexe Abfrage. Wie könnte man es vereinfachen? Hast du eine Idee? Vielleicht doch als Notlösung eine m:n-Beziehung?
Wie wäre es einfach mit... ?
Code:
Select m.*
From  medien m

Inner Join aufbewahrungsort a
On  a.aufbewahrungsort_id = m.aufbewahrungsort_id
And  a.aufbewahrungsort = 'Keller'
 
Distrilec hat recht in diesem Fall würde es so gehen. Es wird halt ein "langer Weg", also mehrere Joins, vom Aufbewahrungsort zur Filmfassung (zum Beispiel). Aber es geht und es ist der normale Weg, einfacher geht das nicht.
 
Gut gut gut :) Ihr meint also, dass die Modellierung, worüber wir die ganze Zeit sprachen, völlig in Ordnung ist? Oder habt ihr noch etwas hinzufügen bzw. anzumerken? Ansonsten mache ich weiter mit der Modellierung und stelle euch dann weitere vor :)
 
Werbung:
Zurück
Oben