Projekt Cinema

Aus Informatik

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Die Aufgabenstellung

Ein Kino verfügt über mehrere Säle mit unterschiedlicher Anzahl von Sitzplätzen. Die Sitzplätze in einem Saal sind zu Verwaltungszwecken aufsteigend nummeriert. Für jeden Sitzplatz sind auch die Kategorie (Loge bzw. Parkett), die Reihe und seine spezielle Platznummer in der Reihe angegeben. In den Sälen finden die Vorstellungen statt, die durch eindeutige Vorstellungsnummern identifiziert werden. Zu jeder Vorstellung soll die Gesamtzahl der bisher verkauften Kinokarten gespeichert werden. Das Kinoprogramm gibt alle Vorstellungen nach Datum, Uhrzeit und gezeigtem Film an. Neben den Filmtiteln sind Regisseur, Dauer, Kategorie (Action, Komödie, ...) und FSK-Altersangabe wichtig. Auf jeder Kinokarte werden Reihe und Platznummer des gebuchten Sitzplatzes angegeben.

Das ER-Modell

Kino.png

Geschäftsregeln

  • Ein Saal verfügt über mindestens einen Sitz.
  • In mehreren Vorstellungen kann ein und derselbe Film gezeigt werden.
  • Ein Regisseur kann bei einem oder vielen Filmen Regie geführt haben.
  • Ein und dieselbe Kategorie kann ein Mal oder öfter erscheinen.
  • Vorstellungen finden in Säälen statt.

Das Relationenmodell

Saal(Saal_ID)
Sitze(Platznr, Reihe, Saal_ID, Kategorie, frei)
findet_statt_in(Saal_ID, Vorstellungsnr)
Vorstellungen(Vorstellungsnr, Film_ID, bisher_verkaufte_Karten, Uhrzeit, Datum)
Film(Film_ID, Reg_Nr, kategorienr, Dauer, Titel, FSK)
Regisseur(Reg_Nr, Name, Vorname)
Art(kategorienr, Kategorie)

Was hierbei zuerst nicht beachtet wurde, war, dass man in der Relation Sitze die Saal_ID nicht im Primäeschlüssel drin hatte, das führt dazu, dass es im gesamten Kino keinen zweiten Sitz mit der selben Platznr und Reihe gab, unglücklich, da man mehrere Sääle hat, und die Nummerierung stets bei A1 beginnt.

DB erstellen

Saal

CREATE TABLE `saal` (
 `Saal_ID` int(11) NOT NULL,
 PRIMARY KEY  (`Saal_ID`)
)

Sitze

CREATE TABLE `sitze` (
 `Platznr` int(11) NOT NULL,
 `Reihe` varchar(1) NOT NULL,
 `Saal_ID` int(11) NOT NULL,
 `Kategorie` varchar(7) NOT NULL default 'Parkett',
 `frei` varchar(1) NOT NULL default 'j',
 PRIMARY KEY  (`Platznr`,`Reihe`, `Saal_ID`)
)

findet_statt_in

CREATE TABLE `findet_statt_in` (
 `Saal_ID` int(11) NOT NULL,
 `Vorstellungsnr` int(11) NOT NULL,
 PRIMARY KEY  (`Saal_ID`,`Vorstellungsnr`)
)

Vorstellungen

CREATE TABLE `vorstellungen` (
 `Vorstellungsnr` int(11) NOT NULL auto_increment,
 `Film_ID` int(11) NOT NULL,
 `bisher_verkaufte_Karten` int(11) NOT NULL default '0',
 `Uhrzeit` time NOT NULL,
 `Datum` date NOT NULL,
 PRIMARY KEY  (`Vorstellungsnr`)
)

Film

CREATE TABLE `film` (
 `Film_ID` int(11) NOT NULL auto_increment,
 `Dauer` int(11) NOT NULL,
 `Titel` varchar(50) NOT NULL,
 `FSK` tinyint(4) default NULL,
 `Reg_Nr` int(11) NOT NULL,
 `kategorienr` int(11) NOT NULL,
 PRIMARY KEY  (`Film_ID`)
)

Regisseur

CREATE TABLE `regisseur` (
 `Reg_Nr` int(11) NOT NULL auto_increment,
 `Name` varchar(30) NOT NULL,
 `Vorname` varchar(30) default NULL,
 PRIMARY KEY  (`Reg_Nr`)
)

Art

CREATE TABLE `art` (
 `kategorienr` int(11) NOT NULL auto_increment,
 `Kategorie` varchar(30) NOT NULL,
 PRIMARY KEY  (`kategorienr`)
)

Abfragen

Gib jeden Film zusammen mit seiner Dauer und der Altersfreigabe aus.

SELECT Titel, Dauer, FSK
FROM film

Wie lange dauert es alle Filme nacheinander zu schauen?

SELECT  SUM(Dauer)
FROM film

Wie lange dauert ein Film durschnittlich?

SELECT  AVG(Dauer)
FROM film

Wieviele Filme hat jeder Regisseur gemacht?

SELECT  Vorname,Name , Count(titel)
FROM regisseur
Natural Join film
GROUP BY Name

Gib das Kinoprogramm aus.

SELECT Titel, Uhrzeit,Datum
FROM findet_statt_in
 Natural Join film
 Natural Join vorstellungen

Gib Filme mit ihren Regisseuren aus.

SELECT Titel, Vorname, Name
FROM film
 Natural Join regisseur
Persönliche Werkzeuge
Navigation