2016-03-20 14 views
0

Ich musste eine Tabelle mit all diesen Informationen erstellen, ist alles, was ich tun kann, um meine Tabelle besser zu machen, wie vielleicht sollte ich eine extra Tabelle für einige Informationen haben oder vielleicht eine löschen? Ich habe nicht viel SQL gemacht, aber ich muss diese Tabelle für ein Projekt erstellen und ich brauche es, um gut zu sein.Beratung mit Erstellen von Tabelle

drop table film_director; 
drop table film_actor; 
drop table film; 
drop table studio; 
drop table actor; 
drop table director; 

CREATE TABLE studio(
    studio_ID NUMBER NOT NULL, 
    studio_Name VARCHAR2(30), 
    PRIMARY KEY(studio_ID)); 

CREATE TABLE film(
    film_ID NUMBER NOT NULL, 
    studio_ID NUMBER NOT NULL, 
    genre VARCHAR2(30), 
    genre_ID NUMBER(1), 
    film_Len NUMBER(3), 
    film_Title VARCHAR2(30) NOT NULL, 
    year_Released NUMBER NOT NULL, 
    PRIMARY KEY(film_ID), 
    FOREIGN KEY (studio_ID) REFERENCES studio); 

CREATE TABLE director(
    director_ID NUMBER NOT NULL, 
    director_fname VARCHAR2(30), 
    director_lname VARCHAR2(30), 
    PRIMARY KEY(director_ID)); 

CREATE TABLE actor(
    actor_ID NUMBER NOT NULL, 
    actor_fname VARCHAR2(15), 
    actor_lname VARCHAR2(15), 
    PRIMARY KEY(actor_ID)); 

CREATE TABLE film_actor(
    film_ID NUMBER NOT NULL, 
    actor_ID NUMBER NOT NULL, 
    PRIMARY KEY(film_ID, actor_ID), 
    FOREIGN KEY(film_ID) REFERENCES film(film_ID), 
    FOREIGN KEY(actor_ID) REFERENCES actor(actor_ID)); 

CREATE TABLE film_director(
    film_ID NUMBER NOT NULL, 
    director_ID NUMBER NOT NULL, 
    PRIMARY KEY(film_ID, director_ID), 
    FOREIGN KEY(film_ID) REFERENCES film(film_ID), 
    FOREIGN KEY(director_ID) REFERENCES director(director_ID)); 

INSERT INTO studio (studio_ID, studio_Name) VALUES (1, 'Paramount'); 
INSERT INTO studio (studio_ID, studio_Name) VALUES (2, 'Warner Bros'); 
INSERT INTO studio (studio_ID, studio_Name) VALUES (3, 'Film4'); 
INSERT INTO studio (studio_ID, studio_Name) VALUES (4, 'Working Title Films'); 

INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (1, 1, 'Comedy', 1, 180, 'The Wolf Of Wall Street', 2013); 
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (2, 2, 'Romance', 2, 143, 'The Great Gatsby', 2013); 
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (3, 3, 'Science Fiction', 3, 103, 'Never Let Me Go', 2008); 
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (4, 4, 'Romance', 4, 127, 'Pride and Prejudice', 2005); 

INSERT INTO director (director_ID, director_fname, director_lname) VALUES (1, 'Martin', 'Scorcese'); 
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (2, 'Baz', 'Luhrmann'); 
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (3, 'Mark', 'Romanek'); 
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (4, 'Joe', 'Wright'); 

INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (1, 'Matthew', 'McConnaughy'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (2, 'Leonardo', 'DiCaprio'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (3, 'Margot', 'Robbie'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (4, 'Joanna', 'Lumley'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (5, 'Carey', 'Mulligan'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (6, 'Tobey', 'Maguire'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (7, 'Joel', 'Edgerton'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (8, 'Keira', 'Knightly'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (9, 'Andrew', 'Garfield'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (10, 'Sally', 'Hawkins'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (11, 'Judi', 'Dench'); 
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (12, 'Matthew', 'Macfadyen'); 

INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 1); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 2); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 3); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 4); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 2); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 5); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 6); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 7); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 5); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 8); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 9); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 10); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 5); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 8); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 11); 
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 12); 

INSERT INTO film_director (film_ID, director_ID) VALUES (1,1); 
INSERT INTO film_director (film_ID, director_ID) VALUES (2,2); 
INSERT INTO film_director (film_ID, director_ID) VALUES (3,3); 
INSERT INTO film_director (film_ID, director_ID) VALUES (4,4); 

Antwort

0

Ich würde vorschlagen, casting Tisch mit zwei Tabellen zu ersetzen - filmactor (mit einer Zeile pro Film pro Schauspieler) und filmdirector (mit einer Zeile pro Film pro Regisseur). Ihre casting Tabelle hat director_id Wiederholung für jede Zeile für einen bestimmten Film, der nicht benötigt wird (es ist auch nicht in 3NF). Außerdem wird das Szenario nicht richtig gehandhabt, wenn es mehr als einen Regisseur auf einem Film gibt (unwahrscheinlich, aber nicht unmöglich).
Ansonsten sieht das Design gut für mich aus.

+0

Wie soll ich dann den Gießtisch fixieren? Ich denke, dass das eines der Probleme für eine der Fragen verursachte, die ich ausführen wollte, weil es den Namen des Regisseurs viermal ausgab. – Poena

+0

Ich denke du brauchst den Tisch nicht "Casting". Ich bin mir nicht sicher, aber ich denke, es ist möglich, dass mehr als ein "Studio" mit einem "Film" assoziiert wird. In diesem Fall müssen Sie die 'studio_id' aus der Tabelle' film' entfernen und eine neue Tabelle 'filmstudio' erstellen, die einen' Film' mit 'studio' verbindet. – AKS

+0

Ok, mach das, danke für die Hilfe. – Poena