Modellierung meiner Datenbank

Ich hoffe das veranschaulicht das ganze etwas :)
Code:
Create Table Person_Rolle
(
Person_ID      Number Not Null,
Rolle_ID       Number Not Null,
FilmAllgemein_ID Number Not Null

Constraint FK_Person Foreign Key (Person_ID) References Person (Person_ID),
Constraint FK_Rolle Foreign Key (Rolle_ID) References Rolle (Rolle_ID),
Constraint FK_FilmAllgemein Foreign Key (FilmAllgemein_ID) References FilmAllgemein (FilmAllgemein_ID)
);

Alter Table Add Constraint PK_Person_Rolle Primary Key (Person_ID, Rolle_ID, FilmAllgemein_ID);
 
Werbung:
Ich versuche mal wiederzugeben, wie ich deinen Statement interpretiere. Du erstellst eine Zwischentabelle mit dem Namen Person_Rolle. Du legst in dieser eben genannten Zwischentabelle sämtliche Schlüssel zunächst als FK an, und referenzierst diese auf die entsprechenden PKs. Nur im letzten Abschnitt bei Alter Table Add komme ich ins Schleudern. Legst du hierbei eine »künstliche ID« an oder sagst du hier nur, dass all die Schlüssel, die zunächst als FK hinterlegt hast nun als PK fungieren sollen? Wenn letztes stimmt, dann sind die Schlüssel sozusagen gleichzeitig beides, einmal FK und dann PK? Um nun keine Verwirrung hinzubringen, wie soll ich dann die Schlüssel in den jeweiligen Zwischentabellen deklarieren? Als beides?
 
sagst du hier nur, dass all die Schlüssel, die zunächst als FK hinterlegt hast nun als PK fungieren sollen? Wenn letztes stimmt, dann sind die Schlüssel sozusagen gleichzeitig beides, einmal FK und dann PK?
Richtig :) Und das solltest du eig. bei allen Zwischentabellen machen.
(Erst wenn dein Modell fertig ist natürlich)
 
Super, so langsam steige ich durch die Statements durch. In meinen älteren Projekt-Versionen habe ich bislang nur mit Access gearbeitet, und dort habe ich kaum mit SQL-Statements gearbeitet, sondern nur mit »Access_spezifische-Befehle« :) Aber um zukünftig der Verwirrung aus dem Weg zu gehen, soll ich die Schlüssel in den Zwischentabellen gleichzeitig als beides deklarieren. Zum Beispiel: Person_ID (FK) (PK). Ich arbeite ja nur mit dem Dia-Programm und stelle dies nur grafisch dar.
 
Hier also die aktuelle Version der Tabellen in grafischer Form:
7cc5043c5d.jpg
 
Hallo Leute,

bevor wir zum Thema »Film« übergehen, fiel mir noch eine Sache zum Thema »Person« ein. Wie wir alle wissen bekommen Schauspieler für bestimmte Filme bestimmte Auszeichnungen oder wurden nur für bestimmte Filme nominiert. Das hatte ich fast vergessen. Zunächst einmal ein Bild, wie ich das mir grafisch vorstelle:
auszeichnungennm5j3g0zt1.jpg


Und diese grafische Darstellung habe ich versucht in die Datenbankstruktur einzubinden. Mein vorläufiges Ergebnis sieht wie folgt aus:

xaphusfilmser48hefndkm0.jpg

Damit wir uns noch in diesen Tabellen zurechtfinden habe ich das Thema »Auszeichnung« mit einem roten Rahmen kenntlich gemacht.

Wie bin ich zu meinem vorläufigen Ergebnis gekommen? Die Tabelle Auszeichnung zu diesem Thema soll als Herzstück fungieren. In diesem Herzstück wird nur der primäre Schlüssel dieser Tabelle und das Jahr, wann die Auszeichnung vergeben oder nominiert wurde, gespeichert. In der Tabelle Preis werden sämtliche Preise, die es in der Filmbranche gibt, gespeichert. In der Tabelle Kategorie werden Informationen gespeichert, wie "bester Nebendarsteller" oder "schlechtester Nebendarsteller" oder "Bester Hauptdarsteller" etc. gespeichert werden. Und deren Schlüssel (FilmAllgemein_ID, Preis_ID, Person_ID und Kategorie_ID) werden als FK in die Tabelle Auszeichnung hinterlegt. Bei den Beziehungen, die zu der Tabelle Auszeichnungen hergestellt werden habe ich mir für eine 1:n-Beziehung entschieden. Meines Wissen nach kann eine Person für einen Film für eine Kategorie nur einen Preis gewinnen.

Beispiel (denke ich mir jetzt mal aus): Leonardo Dicaprio bekam für den Film Titanic den Preis Oskar als bester Hauptdarsteller. Hierbei sehe ich also nur eine 1:n-Beziehung. Es wäre ja unmöglich und unsinnig zugleich, wenn der gleiche Schauspieler nochmal den exakt gleichen Preis bekommen würde. Was allerdings möglich ist, ist, dass er für den gleichen Film noch einen Preis Empire Adwards als bester Neuling bekommen würde. Auch hier ist es meiner Meinung nach eine 1:n-Beziehung.

Ich freue mich auf eure Kritikpunke und Anmerkungen.
 
Zuletzt bearbeitet:
Irgendwas mag mir an den neuen Tabellen noch nicht gefallen... Weiß aber gerade auch nicht was.
Vllt. eine Zwischentabelle: Preis_Kategorie (mit neuem künstlichen Schlüssel) um die Referenzen etwas zu reduzieren ?
 
Magst du die gesamten neuen Tabellen nicht oder steckst du an einer bestimmten Tabelle fest? Die anderen mögen uns wohl nicht mehr helfen :)
 
Also, wenn der Schuh irgendwo drückt, wird es wohl auch seine Berechtigung haben :) Ihr seid ja die Datenbank-Genie :) Wenn also irgendwo Bauchschmerzen bereitet, dann sollten wir daran umbasteln. Später will man da nicht nochmal ran, wenn die Struktur erst einmal steht :) Mir fällt zum Beispiel auf, dass ich die Spalte »Resultat« vergessen habe. Nun überlege ich, ob ich dies mit aufnehmen soll.

Frage an euch: Würdet ihr es begrüßen, wenn ich die Option hättet auch »nur« die Nominierungen im Programm mit anzugeben oder reicht es vollkommen aus nur die Gewinne der Auszeichnungen anzugeben und die Nominierungen sozusagen zu ignorieren? Allgemein strebe ich danach mein Programm zu zu schreiben, dass der Anwender nachmöglichst viele Optionen hat - jedoch weiß ich nicht ab welchem Punkt man zu übertrieben ran geht :)
 
Hallo, ich dachte, bevor ich mit meiner Modellierung weitermache, sollte ich mir nebenbei Gedanken über die Datentypen meiner Felder machen. An einigen Felder stolper ich noch ein wenig. Zum Beispiel weiß ich nicht, ob man beim Typ LONGTEXT oder MEDIUMTEXT auch noch die Länge angeben muss wie es bei VARCHAR der Fall ist - z.B.: VARCHAR (25). Hier meine Darstellung:
xaphusfilmser69u4hq2gmi.jpg

Grundlegend möchte ich noch ein paar Anmerkungen hinzufügen. Also bei den IDs wird es um GUID handeln, also eine ID aus Zahlen und Buchstaben. Die GUID besteht aus 32 Zahlen/Buchstaben, denn die Bindestriche werden von meinem Programm entfernt. Welcher Datentyp wäre hierbei denn notwendig?

Des Weiteren wusste ich in der Tabelle Person nicht, welchen Datentyp ich beim Status nehmen soll. Hierbei soll es sich um BOOLEAN handeln - Wahrheitswerte.

Allgemein wollte ich euch mal fragen, ob ihr einen Blick drüber werfen, und schauen könnt, ob ich die Datentypen richtig gesetzt habe und was ich vermutlich anders machen sollte. Danach können wir uns dann wieder weiter an die Modellierung machen :) Zu meiner neuen Modellierung werde ich später was sagen. Jetzt ist mir nur erst einmal wichtig, dass die Datentypen richtig gesetzt werden.
 
Die Tabelle "Gesamtbewertung" ist ja mal sowas von unnötig :D
Ob du jetzt den Schlüssel "1" einträgst oder die Bewertung "1" macht da wirklich keinen Unterschied :)
 
Bei der Tabelle GesamtBewertung geht es um ein Fünf-Stufen-System. Dort gibt es dann 5 Sterne, die dann auf meiner Programmoberfläche zu sehen sind. Ähnlich wie bei Ebay, wenn man den Käufer oder den Verkäufer bewerten will. Daher dachte ich, wären die Tabelle GesamtBewertung sinnvoll. Aber du hast Recht, man kann die Tabelle reduzieren, und daraus ein Feld in der Tabelle FilmAllgemein machen.

Hast du eine ID bei meinen Problemchen? Einmal das mit dem Datentyp für das Feld Status in der Tabelle Person, in der es um Tod und Lebendig geht? In diesem Status wird nur vermerkt, ob der Schauspieler tot ist. Dazu bräuchte ich nach meinem Verständnis ein Boolean. Welchen Datentyp nimmt man da? Und dann mit der ID, die ich in Form von GUID verwenden werde. Mein Programm generiert eine GUID und dies soll dann in die Datenbank als ID fungieren. Idee für einen Datentyp?

Ansonsten, hast du noch etwas anzumerken, zu meinen bisherigen Datentypen?
 
Werbung:
Hi Sophus
Und dann mit der ID, die ich in Form von GUID verwenden werde. Mein Programm generiert eine GUID und dies soll dann in die Datenbank als ID fungieren. Idee für einen Datentyp?

Ein GUID ist ein String. In MySQL würde wohl ein Longtext passend sein - nur würde ich sowas nie als ID verwenden. Ein Index sollte aus Performancegründen immer ein Integer sein.

Ich habe mir dein Datenmodell nur ganz zu Anfang des Threads angesehen.
In diesem Status wird nur vermerkt, ob der Schauspieler tot ist. Dazu bräuchte ich nach meinem Verständnis ein Boolean. Welchen Datentyp nimmt man da?
Belege das Feld mit einem Datumswert und erlaube, dass es auch NULL sein kann. Wenn da ein Datum drin steht, lebt die Person nicht mehr. Das Feld solltest du dann eventuell 'Sterbedatum' nennen, oder, Falls du schon ein solches hast, ganz weglassen.

Meines Wissens kennt MySQL keinen boolschen Datentyp - allerdings gründet diese Aussage auf Versuche meinerseits, die etwas länger zurückliegen.

Gruss
Delbor
 
Zurück
Oben