Eisbär: DB Aufbau und Auswahl - Was nicht ganz verstanden.

Beitrag lesen

Hallo Stefan

Also habe ich nun in der Tabelle Cast nur Primary Keys?
Film_ID (primary key)
Artist_ID(primary key)
Regie_ID (primary key) (falls ich die Tabelle erweitern will)
etc.

In Deinem Fall ist die Tabelle "Cast" eine Beziehungsentität zwischen den Hauptentitäten "Film" und "Artist", die in einer n:m-Beziehung stehen.
In einer Beziehungsentität sollten nur Informationen verwaltet werden, die im direkten Zusammenhang mit der Beziehung(!) stehen. Falls Du z.B. die Zeit des Schauspielers in allen von ihm in diesem Film gespielten Szenen (17'35") speichern willst oder die Rolle die er in diesem Film gespielt hat (Weibliche Hauptrolle, etc). So könntest Du z.B. die Tabelle um das Attribut "Rolle" erweitern:
Film_ID
Artikel_ID
Rolle

Für die weiteren n:m-Beziehungen zu anderen Entitäten wie "Regie" benötigst Du eine separate Beziehungsentität, z.B. "Filmregie" (oder sonst was) die etwa so aussehen müsste:
Film_ID  (kombinierter Primary Key)
Regie_ID (kombinierter Primary Key)

Du solltest nicht Beziehungsentitäten unterschiedlicher Beziehungen in einer Tabelle mischen.
Besser ist es, für jede zum Film in einer n:m-Beziehung stehende Entität (Regie, Produzent, etc) eine eigene Tabelle und zugehörige Beziehungstabelle zu schaffen.

Weiter Abstrahiert könnte man aber den Begriff "Artist" nicht nur auf die Schauspieler beschränken, sondern ihn auf alle am Film Mitwirkenden (Regisseur, Produzent, Kamera, Ton, Schnitt, Maske, etc.) erweitern. Diese hätten dann in einem Film eine Ihnen zugeordnete Rolle.
In diesem Fall würde die Beziehungsentität "Cast" ein weiteres Attribut "Rolle" erhalten:
Film_ID    (Foreignkey aus Tabelle "Film")
Artist_ID  (Foreignkey aus Tabelle "Film")
Rolle      (z.B. "männlicher Hauptdarsteller", "Regisseur", ...)

Noch weiter Normalisiert (und dies ist bei vielen unterschiedlichen Rollen durchaus sinnvoll) müsste man für die Rollen eine eigene Entität "Rollen" definieren. Diese enthält alle möglichen Rollen der Filmmitwirkung und weist etwa folgende Struktur auf:
Rolle_ID
Rolle_Titel
...

Die Beziehungsentität "Cast" müsste dann so angepasst werden:
Film_ID   (Foreignkey aus Tabelle "Film")
Artist_ID (Foreignkey aus Tabelle "Artist")
Rolle_ID  (Foreignkey aus Tabelle "Rolle")

Die Datensätze in der Tabelle "Cast" sehen dann etwa so aus:
Film_ID Artist_ID Rolle_ID
1       23        3        (männlicher Hauptdarsteller)
1       278       2        (weiblicher Hauptdarsteller)
1       5         1        (Regisseur)
2       47        2        (weiblicher Hauptdarsteller)
2       5         3        (männlicher Hauptdarsteller)
2       53        1        (Regisseur)

Hinweis: Der Artist mit der ID=5 kann sowohl in einem Film der Regisseur, im anderen Film der männliche Hauptdarsteller sein.

Diese zweite Modellierung ist zugegebenermassen etwas abstrakter und komplizierter, sie ist aber flexibler, falls Du alle bei einem Film Mitwirkenden (Schnitt, Ton, Make-Up, Beleuchtung, Polizist Nr. 7, etc.) verwalten möchtest.

Sind Dir aber nur einige wenige Rollen wichtig (z.B. die Hauptdarster und der Regisseur), so ist es einfacher und übersichtlicher für jede Rolle eine eigene Tabelle mit der n:m-Beziehung zum Film anzulegen.

Ich hoffe, das hilft ewas weiter.

Grüsse
Eisbär