Pizzalieferdienst

Geschätzte Lektüre: 8 Minuten 102 Ansichten

Datenbank für einen kleinen Pizzalieferdienst

Szenario:
Ein kleiner Pizzalieferdienst möchte eine einfache Datenbank anlegen, um Bestellungen zu verwalten.

Folgende Infos sollen gespeichert werden:

  • Kunden: Name, Adresse, Telefonnummer
  • Pizzen: Name (z. B. Salami), Preis
  • Bestellungen: Welcher Kunde hat wann welche Pizza bestellt? (Datum der Bestellung)

Aufgabenstellung:

  1. Entwerfe die Datenbank: Zeichne ein ER-Diagramm und eine tabellarische Skizze für die drei benötigten Tabellen.
  2. Bestimme einen Primärschlüssel für jede Tabelle (z. B. „Kundennummer“, „Pizzanummer“, „Bestellnummer“).
  3. Erkläre kurz in einem Satz:
    Welche Spalte ist ein Fremdschlüssel? Auf welche Tabelle verweist sie?
  4. Schreibe die SQL-CREATE-Befehle für alle drei Tabellen (mit 3–4 Spalten pro Tabelle).

-- =====================================================
-- DATENBANK FÜR PIZZALIEFERDIENST
-- =====================================================

-- 1. Datenbank anlegen (falls nicht vorhanden)
CREATE DATABASE IF NOT EXISTS pizzaservice;
USE pizzaservice;

-- =====================================================
-- TABELLENSTRUKTUR
-- =====================================================

-- Tabelle: kunden
CREATE TABLE kunden (
    kundennummer INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    adresse VARCHAR(150) NOT NULL,
    telefon VARCHAR(30) NOT NULL
);

-- Tabelle: pizzen
CREATE TABLE pizzen (
    pizzanummer INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    preis DECIMAL(5,2) NOT NULL
);

-- Tabelle: bestellungen
CREATE TABLE bestellungen (
    bestellnummer INT AUTO_INCREMENT PRIMARY KEY,
    kundennummer INT NOT NULL,
    pizzanummer INT NOT NULL,
    datum DATETIME NOT NULL,
    FOREIGN KEY (kundennummer) REFERENCES kunden(kundennummer),
    FOREIGN KEY (pizzanummer) REFERENCES pizzen(pizzanummer)
);

-- =====================================================
-- FIKTIVE TESTDATEN EINFÜGEN
-- =====================================================

-- Kunden
INSERT INTO kunden (name, adresse, telefon) VALUES
('Anna Schmidt', 'Hauptstr. 12, 10115 Berlin', '030 1234567'),
('Mehmet Yılmaz', 'Bergweg 5, 10117 Berlin', '0176 9876543'),
('Lisa Wagner', 'Seestr. 23, 10179 Berlin', '0152 3344556'),
('Thomas Bauer', 'Kirchplatz 8, 10115 Berlin', '030 7654321'),
('Sofia Rossi', 'Gartenstr. 47, 10117 Berlin', '0163 9988776');

-- Pizzen
INSERT INTO pizzen (name, preis) VALUES
('Margherita', 7.50),
('Salami', 9.00),
('Hawaii', 9.50),
('Tonno (Thunfisch)', 9.50),
('Quattro Formaggi', 10.00),
('Vegetariana', 8.50),
('Diavolo (scharf)', 9.80),
('Calzone (gefaltet)', 10.50);

-- Bestellungen
INSERT INTO bestellungen (kundennummer, pizzanummer, datum) VALUES
-- Anna Schmidt (kundennummer 1)
(1, 2, '2024-03-15 12:30:00'),  -- Salami
(1, 5, '2024-03-20 18:45:00'),  -- Quattro Formaggi

-- Mehmet Yılmaz (kundennummer 2)
(2, 1, '2024-03-16 19:00:00'),  -- Margherita
(2, 7, '2024-03-18 13:15:00'),  -- Diavolo

-- Lisa Wagner (kundennummer 3)
(3, 4, '2024-03-17 20:30:00'),  -- Tonno
(3, 8, '2024-03-22 12:00:00'),  -- Calzone

-- Thomas Bauer (kundennummer 4)
(4, 3, '2024-03-19 18:20:00'),  -- Hawaii
(4, 6, '2024-03-21 15:10:00'),  -- Vegetariana

-- Sofia Rossi (kundennummer 5)
(5, 2, '2024-03-20 19:45:00'),  -- Salami
(5, 5, '2024-03-23 14:30:00'),  -- Quattro Formaggi
(5, 1, '2024-03-24 21:00:00');  -- Margherita
-- =====================================================
-- BEISPIEL-ABFRAGEN ZUM TESTEN
-- =====================================================

-- Alle Bestellungen mit Kundennamen und Pizza
SELECT 
    b.bestellnummer,
    k.name AS kunde,
    p.name AS pizza,
    p.preis,
    b.datum
FROM bestellungen b
JOIN kunden k ON b.kundennummer = k.kundennummer
JOIN pizzen p ON b.pizzanummer = p.pizzanummer
ORDER BY b.datum DESC;

-- Umsatz pro Pizza (wie oft bestellt und Gesamtsumme)
SELECT 
    p.name AS pizza,
    COUNT(b.bestellnummer) AS anzahl_bestellt,
    SUM(p.preis) AS gesamtumsatz
FROM pizzen p
JOIN bestellungen b ON p.pizzanummer = b.pizzanummer
GROUP BY p.pizzanummer
ORDER BY gesamtumsatz DESC;

-- Wie viel hat jeder Kunde insgesamt ausgegeben?
SELECT 
    k.name AS kunde,
    SUM(p.preis) AS insgesamt_ausgegeben
FROM kunden k
JOIN bestellungen b ON k.kundennummer = b.kundennummer
JOIN pizzen p ON b.pizzanummer = p.pizzanummer
GROUP BY k.kundennummer
ORDER BY insgesamt_ausgegeben DESC;

Die drei Tabellen im Überblick (tabellarische Skizze)

Tabelle 1: kunden

SpaltennameTypPrimärschlüssel
kundennummerINTJa (auto_increment)
nameVARCHAR(100)Nein
adresseVARCHAR(150)Nein
telefonVARCHAR(30)Nein

Tabelle 2: pizzen

SpaltennameTypPrimärschlüssel
pizzanummerINTJa (auto_increment)
nameVARCHAR(100)Nein
preisDECIMAL(5,2)Nein

Tabelle 3: bestellungen

SpaltennameTypPrimärschlüsselFremdschlüssel
bestellnummerINTJa (auto_increment)Nein
kundennummerINTNeinVerweist auf kunden.kundennummer
pizzanummerINTNeinVerweist auf pizzen.pizzanummer
datumDATETIMENeinNein

Fremdschlüssel-Satz:
In der Tabelle bestellungen ist kundennummer ein Fremdschlüssel, der auf die Tabelle kunden verweist, und pizzanummer ist ein Fremdschlüssel, der auf die Tabelle pizzen verweist.


Tabelle kunden erstellen:

CREATE TABLE kunden (
    kundennummer INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    adresse VARCHAR(150) NOT NULL,
    telefon VARCHAR(30) NOT NULL
);

Tabelle pizzen erstellen:

CREATE TABLE pizzen (
    pizzanummer INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    preis DECIMAL(5,2) NOT NULL
);

Tabelle bestellungen erstellen:

CREATE TABLE bestellungen (
    bestellnummer INT AUTO_INCREMENT PRIMARY KEY,
    kundennummer INT NOT NULL,
    pizzanummer INT NOT NULL,
    datum DATETIME NOT NULL,
    FOREIGN KEY (kundennummer) REFERENCES kunden(kundennummer),
    FOREIGN KEY (pizzanummer) REFERENCES pizzen(pizzanummer)
);
Dieses Dokument teilen

Pizzalieferdienst

Oder Link kopieren

INHALT

Abonnieren

×
Cancel