Projekt Cinema
Aus Informatik
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
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
