2016-11-26 1 views
1

ich von einem nicht normalisierten Tabelle normalisiert bewege, aber ich habe in der folgenden Situation verwirrt:MySQL Normalisierung Dilemma Herausforderung

MovieID(pk) | MovieTitle 
--------------------- 
1   | Imagination 
2   | Creativity 
3   | Bodyguard 


ActorID(pk) | Name 
--------------------- 
25   | John 
26   | Charlie 
27   | George 
28   | Lincoln 

MovieID(ck) | ActorID(ck)  <---- Indexed Table 
--------------------- 
1   | 25 
1   | 26 
2   | 25 
2   | 28 
3   | 26 
3   | 27 
3   | 28 

Bis hier sollte alles in Ordnung sein, aber dann hat jeder Akteur eine Rolle (oder mehr) im Film.

Meine Lösung ist:

Hinzufügen der folgenden Tabelle:

RoleID(pk) | RoleTitle 
--------------------- 
84   | Doctor 
85   | Lawyer 
86   | Farmer 
87   | Judge 
88   | Farmer John 
89   | The Police 
90   | Policeman 
91   | Mother of Johny 
92   | Prisoner 
93   | Doctor 

Und die indizierte Tabelle zu dieser Modifikation:

MovieID(ck) | ActorID(ck) | RoleID(ck)  <---- Indexed Table 
------------------------------------------ 
1   | 25   | 84 
1   | 25   | 85 
1   | 26   | 86 
2   | 25   | 87 
2   | 28   | 88 
3   | 26   | 89 
3   | 27   | 90 
3   | 28   | 91 
3   | 28   | 92 
3   | 28   | 93 

Aber dann, was ist der Punkt, um eine neue Tabelle zu erstellen , mit Werten, die sich wiederholen, wie in unserem Fall: RolleID: 84 und 93, und wissend, dass jede Zeile nur einmal von einem Akteur benutzt wird?

Kann mir jemand mit dieser Sorge helfen?

Ich kann mehr Details geben, wenn es nicht klar ist.

+0

Es gibt nicht viel Sinn! – Strawberry

+0

Warum du Tite der Rolle duplizierst? – Sparky

+2

Ich würde nicht weiter normalisieren und nur bei indizierten Tabellen aber mit zusätzlichen Spalten "Rolle" bleiben. Mein Grund: Rollen in Filmen sollten deskriptiv sein ... was bedeutet, dass ein "Doktor" (generisch, der von dem, was du getan hast, implementiert werden kann) Rolle ist anders als "verrückter Doktor" oder "Doktor mit schöner Frau" ... – barudo

Antwort

1

Die Lösung wäre, die Tabelle Rolles zu entfernen und der roleTitle der indizierten Tabelle hinzuzufügen. Um mehr Rollentitel hinzufügen zu können, sollte dies der Primärschlüssel mit den anderen in der indizierten Tabelle sein.

0

Ein Film enthält Rollen von Schauspielern gespielt. So sehe ich diese Tabellen (Primärschlüssel ist fett gedruckt):

  • Film (movie_no, MOVIE_TITLE)
  • Schauspieler (actor_no, actor_name)
  • movie_role (movie_no, ROLE_NAME, actor_no)