Projekt Busunternehmen

Aus Informatik
Version vom 27. Juli 2011, 13:24 Uhr von Ingo Höpping (Diskussion | Beiträge) (SQL Abfragen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche


Die Aufgabenstellung

Ein Busunternehmen bietet Tagesausflüge an. Stammkunden erhalten halbjährlich das Ausflugsprogramm, neue Kunden werden durch Annoncen in der Tageszeitung geworben. Für jede Fahrt wird höchstens ein Bus eingesetzt. Die Organisation der Ausflüge soll mit Hilfe einer Datenbank erfolgen, in der folgende Daten enthalten sein müssen: von jedem Bus, den das Unternehmen besitzt, das Kfz-Kennzeichen, der Bustyp, die Anzahl der Sitzplätze und das Baujahr, von jeder Fahrt das Reiseziel, das Datum, die Dauer in Stunden und der Preis pro Person, von jedem Fahrer des Unternehmens Name und Anschrift (Plz, Ort, StrasseNr, Telefon), dabei sei vorausgesetzt, dass es nicht zwei Fahrer mit demselben Namen in dem Busunternehmen gibt, von den Kunden Name und Anschrift (Plz, Ort, StrasseNr, Telefon) und ihre gebuchten Fahrten mit Angabe der für sie reservierten Plätze.

Das ER-Modell

Busunternehmen.png

Zum Editieren: Die Dia-Datei Datei:Busunternehmen.zip

Die Geschäftsregeln

  • Für eine Fahrt wird genau ein Bus eingesetzt.
  • Ein Bus hat mehrere Fahrten, vorrausgesetzt die Fahrten sind an verschiedenen Tagen.
  • Ein Fahrer fährt mehrere Busse zu verschiedenen Zeiten.
  • Eine Fahrt wird von einem Fahrer erledigt.
  • Eine Fahrt benötigt mindestens einen Kunden, der dieselbe bucht.
  • Ein Kunde kann mehrere Fahrten buchen

Das Relationenmodell

Fahrer (Fahrer_ID, Vorname, Nachname, Plz, Ort, StraßeNr, Telefon);

Bus (Kfz, Bustyp, Sitzplätze, Baujahr);

Fahrt (Fahrt_ID, Dauer, Datum, Reisziel, Preis, Kfz, Fahrer_ID);

Kunden (Kunde_ID, Vorname, Nachname, Plz, Ort, StraßeNr, Telefon);

Buchungen (Kunde_ID, Fahrt_ID, reservierte Plätze);

DB Aufbau (SQL)

Alles in SQL - Form Datei:Busunternehmen SQL.zip

Buchungen
 DROP TABLE IF EXISTS Buchungen;
 CREATE TABLE IF NOT EXISTS Buchungen (
   ID_Kunde int(11) NOT NULL,
   ID_Fahrt int(11) NOT NULL,
   `reservierte Plätze` int(11) NOT NULL,
   PRIMARY KEY  (ID_Kunde,ID_Fahrt)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Buchungen mit Werten füllen:
 INSERT INTO Buchungen (ID_Kunde, ID_Fahrt, reservierte Plätze) VALUES (3, 7, 2),(4, 1, 2), ... usw.


Bus
 DROP TABLE IF EXISTS Bus;
 CREATE TABLE IF NOT EXISTS Bus (
   Kfz varchar(15) NOT NULL,
   Typ tinytext NOT NULL,
   Sitzplätze int(11) NOT NULL,
   Baujahr year(4) NOT NULL,
   PRIMARY KEY  (Kfz)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1


Bus mit Werten füllen:
 INSERT INTO Bus (Kfz, Typ, Sitzplätze, Baujahr) VALUES ('FD-BU-101', 'Großraumbus', 8, 1995), ... usw.


Fahrer
 DROP TABLE IF EXISTS Fahrer;
 CREATE TABLE IF NOT EXISTS Fahrer (
   ID_Fahrer int(11) NOT NULL auto_increment,
   Vorname varchar(20) NOT NULL,
   Nachname varchar(20) NOT NULL,
   Plz int(8) NOT NULL,
   Ort varchar(40) NOT NULL,
   Straße varchar(40) NOT NULL,
   Telefon int(11) default NULL,
   PRIMARY KEY  (ID_Fahrer)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
Fahrer mit Werten füllen:
 INSERT INTO Fahrer (ID_Fahrer, Vorname, Nachname, Plz, Ort, Straße, Telefon) VALUES (1, 'Klaus', 
 'Müller', 41567, 'Unterhausen', 'Bergmannallee 4a', 2147483647), ... usw.


Fahrt
 DROP TABLE IF EXISTS Fahrt;
 CREATE TABLE IF NOT EXISTS Fahrt (
   ID_Fahrt int(11) NOT NULL auto_increment,
   Dauer float NOT NULL,
   Reiseziel varchar(40) NOT NULL,
   Preis float NOT NULL,
   Kfz varchar(15) NOT NULL,
   Datum date NOT NULL,
   ID_Fahrer int(11) NOT NULL,
   PRIMARY KEY  (ID_Fahrt)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
Fahrt mit Werten füllen:
 INSERT INTO Fahrt (ID_Fahrt, Dauer, Reiseziel, Preis, Kfz, Datum, ID_Fahrer) VALUES (1, 14, 'Paris',
 820, 'FD-MU-101', '2006-05-23', 5), ... usw.


Kunden
 DROP TABLE IF EXISTS Kunden;
 CREATE TABLE IF NOT EXISTS Kunden (
   ID_Kunde int(11) NOT NULL auto_increment,
   Vorname varchar(20) NOT NULL,
   Nachname varchar(20) NOT NULL,
   Plz int(8) NOT NULL,
   Ort varchar(40) NOT NULL,
   StraßeNr varchar(40) NOT NULL,
   Telefon int(11) default NULL,
   PRIMARY KEY  (ID_Kunde)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;


Kunden mit Werten füllen:
 INSERT INTO Kunden (ID_Kunde, Vorname, Nachname, Plz, Ort, StraßeNr, Telefon) VALUES (1, 'Matthias',
 'Matschke', 31047, 'Findelbingen', 'Fuchsweg 1a', 123876), ... usw.

SQL Abfragen

  • Gib die Anzahl der Tage aus, die jeder Fahrer zu fahren hat!
SELECT Vorname, Nachname, SUM(Dauer) AS 'Tage zu Fahren'
  FROM Fahrer
    NATURAL JOIN Fahrt
GROUP BY Nachname 

Geben Sie alle Busfahrer alphabetisch aus.

SELECT DISTINCT  Nachname, Vorname 
FROM fahrer 
ORDER BY Nachname 
 

Geben Sie die Namen (Vorname, Nachname) von den Kunden aus, die bereits etwas bestellt haben. Ordnen Sie diese alphabetisch an.

SELECT DISTINCT Nachname, Vorname  
FROM kunden 
NATURAL JOIN buchungen 
ORDER BY Nachname 
 

Geben Sie die Namen und die Tel. Nr. fuer alle Kunden aus, die am 05 29 2006 nach Berlin fahren.

SELECT Vorname, Nachname, Telefon 
FROM kunden 
 NATURAL JOIN fahrt 
  WHERE Reiseziel = 'Berlin' AND Datum = '2006-05-29' 
 

Geben Sie die Anzahl der Buchungen aller Kunden.

SELECT Vorname, Nachname, Preis, COUNT(Preis) AS 'Anzahl der Buchungen' 
FROM kunden 
 NATURAL JOIN buchungen 
  NATURAL JOIN fahrt 
   WHERE Vorname = 'Maria'  AND Nachname = 'Briest'  
    GROUP BY Vorname 
 
 

Geben Sie den minimalen bzw. maximalen Preis der Fahrten nach Berlin, als auch deren durchschnittlichen Dauer.

SELECT Reiseziel, MIN(Preis) AS 'Min Preis', MAX(Preis) AS 'Max Preis', AVG(Dauer) AS 'Durchschnitlicher Dauer' 
FROM fahrt 
WHERE  Reiseziel = 'Berlin' 
GROUP BY Reiseziel 
 

Geben Sie alle Kunden aus, die (Summe aller Bestellungen) auf 2000 Euro und mehr bestellt haben.

SELECT Vorname, Nachname, Preis, SUM(Preis) AS 'Bezahlt' 
FROM kunden 
 NATURAL JOIN buchungen 
  NATURAL JOIN fahrt 
    GROUP BY Vorname 
     HAVING Bezahlt > 2000 
 

Geben Sie den Typ und die Anzahl der Sitzplaetze von den Fahrzeugen, deren Anzahl der Sitzplaetze groesser als der Durschnitt ist. (Mit Hilfe einer Unterabfrage)

SELECT Typ,  Sitzplätze  
FROM bus AS b  
WHERE b.Sitzplätze >= 
                             (SELECT AVG(b.Sitzplätze) 
                               FROM bus AS b)  
 

Geben Sie eine virtuelle Tabelle aus, die das Reiseziel, Reisedauer und der Preis beinhalten.

CREATE VIEW Katalog 
 AS SELECT reiseziel, dauer, preis 
  FROM fahrt