Hallo zusammen,
ich habe ein Problem, welches ich leider noch nicht geschafft habe zu lösen.
Ich habe folgendes Problem:
Wir bauen zur Zeit für unsere Studienarbeit ein Kinoinformations- und Reservierungssystem.
Bei uns ist es möglich, dass in einer Vorstellung 1-3 Filme gezeigt werden. Leider bekomme ich das nicht hin.
Wie kann ich Kinofilm mit Vorstellung verheiraten? Der PK von Kinofilm ist ja fk bei Vorstellung. Leider habe ich aber Hauptfilm, Teilfilm1,Teilfilm2 bei Vorstellung!
Dann habe ich noch das Problem, den PK bei Vorstellung zu bestimmen. Ein PK oder auch Teile davon dürfen nicht null sein. Muss ich dann mit unique arbeiten und was muss ich alles unique setzen.
Wie gehe ich dann weiter, da ich den PK von Vorstellung in Reservierung ziehen muss und dann weiter zu wirdreserviertfür.
Kann mir da jemand helfen?
Vielen Dank im Voraus.
Hier die wichtigen Tabellen:
CREATE TABLE wirdreserviertfür
(
KinoID INTEGER NOT NULL,
SaalNr INTEGER NOT NULL,
Reihe CHAR(2) NOT NULL,
Sitznummer INTEGER NOT NULL,
FilmId INTEGER NOT NULL,
Vorstellungsbeginn TIMESTAMP NOT NULL,
Reservierungsnummer INTEGER NOT NULL,
Nutzername INTEGER NOT NULL,
Reservierungsstatus enum (‚reserviert‘, ‚entgültig
reserviert‘) NOT NULL,
TeilfilmId1 INTEGER NULL,
TeilfilmId2 INTEGER NULL,
PRIMARY KEY (KinoID, SaalNr, Reihe, Sitznummer,
Reservierungsnummer, Nutzername),
UNIQUE (KinoID, SaalNr, Reihe, Sitznummer, Vorstellungsbeginn,
FilmId, TeilfilmId1, TeilfilmId2),
KEY (Reservierungsnummer, SaalNr, KinoID, FilmId,
Vorstellungsbeginn, TeilfilmId1, TeilfilmId2, Nutzername),
KEY (KinoID, SaalNr, FilmId, Vorstellungsbeginn, TeilfilmId1,
TeilfilmId2),
KEY (KinoID, SaalNr, Reihe, Sitznummer)
)
;
CREATE TABLE Vorstellung
(
KinoID INTEGER NOT NULL,
SaalID INTEGER NOT NULL,
FilmId INTEGER NOT NULL,
Beginn TIMESTAMP NOT NULL,
Ende TIMESTAMP NOT NULL,
Kinokartenpreis DECIMAL(4,2) NOT NULL,
TeilFilmId1 INTEGER NULL,
TeilFilmId2 INTEGER NULL,
PRIMARY KEY (KinoID, SaalID, FilmId, Beginn),
UNIQUE (KinoID, SaalID, FilmId, Beginn, TeilFilmId1,
TeilFilmId2),
KEY (FilmId, TeilFilmId1, TeilFilmId2),
KEY (KinoID, SaalID)
)
;
CREATE TABLE Reservierung
(
Reservierungsnummer INTEGER NOT NULL AUTO_INCREMENT,
SaalId INTEGER NOT NULL,
KinoID INTEGER NOT NULL,
FilmId INTEGER NOT NULL,
Filmbeginn TIMESTAMP NOT NULL,
Nutzername INTEGER NOT NULL,
TeilfilmId1 INTEGER NULL,
TeilfilmId2 INTEGER NULL,
PRIMARY KEY (Reservierungsnummer, SaalId, KinoID, FilmId,
Filmbeginn, Nutzername),
UNIQUE (Reservierungsnummer),
UNIQUE (Reservierungsnummer, SaalId, KinoID, FilmId,
Filmbeginn, Nutzername, TeilfilmId1, TeilfilmId2),
KEY (Nutzername),
KEY (KinoID, SaalId, FilmId, Filmbeginn, TeilfilmId1,
TeilfilmId2)
)
;
CREATE TABLE Kinofilm
(
ID INTEGER NOT NULL AUTO_INCREMENT,
Beschreibung VARCHAR(255) NOT NULL,
Titel VARCHAR(50) NOT NULL,
Genre enum (‚Action‘, ‚Komödie‘, ‚Thriller‘) NOT NULL,
Länge INTEGER NOT NULL,
FSK enum (‚0‘,‚6‘,‚12‘) NULL,
Bild BLOB NULL,
Trailer BLOB NULL,
PRIMARY KEY (ID)
)
;
ALTER TABLE wirdreserviertfür ADD CONSTRAINT FK_wirdreserviertfür_Reservierung
FOREIGN KEY (Reservierungsnummer, SaalNr, KinoID, FilmId, Vorstellungsbeginn, TeilfilmId1, TeilfilmId2, Nutzername) REFERENCES Reservierung (Reservierungsnummer, SaalId, KinoID, FilmId, Filmbeginn, TeilfilmId1, TeilfilmId2, Nutzername)
ON DELETE CASCADE
;
ALTER TABLE wirdreserviertfür ADD CONSTRAINT FK_wirdreserviertfür_Vorstellung
FOREIGN KEY (KinoID, SaalNr, FilmId, Vorstellungsbeginn, TeilfilmId1, TeilfilmId2) REFERENCES Vorstellung (KinoID, SaalID, FilmId, Beginn, TeilfilmId1, TeilfilmId2)
;
ALTER TABLE wirdreserviertfür ADD CONSTRAINT FK_wirdreserviertfür_Sitz
FOREIGN KEY (KinoID, SaalNr, Reihe, Sitznummer) REFERENCES Sitz (KinoId, SaalNr, Reihe, Nummer)
;
ALTER TABLE Vorstellung ADD CONSTRAINT FK_Vorstellung_Kinofilm
FOREIGN KEY (FilmId, TeilFilmId1, TeilFilmId2) REFERENCES Kinofilm (ID)
;
ALTER TABLE Vorstellung ADD CONSTRAINT FK_Vorstellung_Saal
FOREIGN KEY (KinoID, SaalID) REFERENCES Saal (Kinoid, SaalID)
ON DELETE CASCADE
;
ALTER TABLE Reservierung ADD CONSTRAINT FK_Reservierung_Nutzer
FOREIGN KEY (Nutzername) REFERENCES Nutzer (ID)
;
ALTER TABLE Reservierung ADD CONSTRAINT FK_Reservierung_Vorstellung
FOREIGN KEY (KinoID, SaalId, FilmId, Filmbeginn, TeilfilmId1, TeilfilmId2) REFERENCES Vorstellung (KinoID, SaalID, FilmId, Beginn, TeilfilmId1, TeilfilmId2)
ON DELETE CASCADE
;