Files
CineBook/cinebook_setup.sql

113 lines
5.2 KiB
SQL

-- ============================================================
-- CineBook — Datenbankschema + Testdaten
-- Datenbank: pbt3h24akv_Kino
-- Erstellt: 2026-03-05
-- ============================================================
-- Tabellen in korrekter Reihenfolge erstellen (wegen FK-Abhängigkeiten)
-- 1. BENUTZER
CREATE TABLE IF NOT EXISTS Users (
UserID INT NOT NULL AUTO_INCREMENT,
Username VARCHAR(60) NOT NULL UNIQUE,
Email VARCHAR(120) NOT NULL,
PasswordHash VARCHAR(255) NOT NULL,
Role ENUM('admin','customer') NOT NULL DEFAULT 'customer',
IsActive TINYINT(1) NOT NULL DEFAULT 1,
CreatedAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (UserID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. FILME
CREATE TABLE IF NOT EXISTS Movies (
MovieID INT NOT NULL AUTO_INCREMENT,
Title VARCHAR(200) NOT NULL,
Genre VARCHAR(60) NOT NULL DEFAULT '',
DurationMinutes INT NOT NULL,
Description TEXT,
AgeRating VARCHAR(10) NOT NULL DEFAULT 'FSK 0',
IsActive TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (MovieID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. SÄLE
CREATE TABLE IF NOT EXISTS Halls (
HallID INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(60) NOT NULL,
Capacity INT NOT NULL,
IsActive TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (HallID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 4. VORSTELLUNGEN
CREATE TABLE IF NOT EXISTS Screenings (
ScreeningID INT NOT NULL AUTO_INCREMENT,
MovieID INT NOT NULL,
HallID INT NOT NULL,
StartTime DATETIME NOT NULL,
PricePerSeat DECIMAL(8,2) NOT NULL,
PRIMARY KEY (ScreeningID),
FOREIGN KEY (MovieID) REFERENCES Movies(MovieID) ON DELETE CASCADE,
FOREIGN KEY (HallID) REFERENCES Halls(HallID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 5. BUCHUNGEN
CREATE TABLE IF NOT EXISTS Bookings (
BookingID INT NOT NULL AUTO_INCREMENT,
UserID INT NOT NULL,
ScreeningID INT NOT NULL,
BookingDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
SeatCount INT NOT NULL,
TotalPrice DECIMAL(10,2) NOT NULL,
Status ENUM('confirmed','cancelled') NOT NULL DEFAULT 'confirmed',
PRIMARY KEY (BookingID),
FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE,
FOREIGN KEY (ScreeningID) REFERENCES Screenings(ScreeningID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- TESTDATEN
-- ============================================================
-- Benutzer
-- Passwort für beide: 'admin123' (BCrypt-Hash)
INSERT INTO Users (Username, Email, PasswordHash, Role, IsActive) VALUES
('admin', 'admin@cinebook.de', '$2a$11$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lh7y', 'admin', 1),
-- Passwort: 'kunde123'
('max', 'max@example.de', '$2a$11$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'customer', 1),
('anna', 'anna@example.de', '$2a$11$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'customer', 1);
-- Filme
INSERT INTO Movies (Title, Genre, DurationMinutes, Description, AgeRating, IsActive) VALUES
('Interstellar', 'Sci-Fi', 169, 'Ein Team von Astronauten reist durch ein Wurmloch auf der Suche nach einem neuen Zuhause für die Menschheit.', 'FSK 12', 1),
('The Dark Knight', 'Action', 152, 'Batman kämpft gegen den Joker, der Gotham City in Chaos und Angst stürzt.', 'FSK 12', 1),
('Inception', 'Thriller', 148, 'Ein Dieb dringt in die Träume anderer Menschen ein, um Geheimnisse zu stehlen.', 'FSK 12', 1),
('The Grand Budapest Hotel', 'Komödie', 99, 'Der legendäre Concierge eines berühmten europäischen Hotels und sein Lehrling erleben Abenteuer.', 'FSK 6', 1),
('Parasite', 'Drama', 132, 'Zwei Familien unterschiedlicher sozialer Klassen verstricken sich in einem brisanten Spiel.', 'FSK 16', 1),
('Dune: Part Two', 'Sci-Fi', 166, 'Paul Atreides vereint sich mit den Fremen und kämpft um Arrakis.', 'FSK 12', 1);
-- Säle
INSERT INTO Halls (Name, Capacity, IsActive) VALUES
('Saal 1 - Classic', 80, 1),
('Saal 2 - Premium', 50, 1),
('Saal 3 - IMAX', 120, 1),
('Saal 4 - 4DX', 40, 1);
-- Vorstellungen (alle in der Zukunft)
INSERT INTO Screenings (MovieID, HallID, StartTime, PricePerSeat) VALUES
(1, 3, DATE_ADD(NOW(), INTERVAL 1 DAY), 14.50),
(2, 1, DATE_ADD(NOW(), INTERVAL 1 DAY), 10.00),
(3, 2, DATE_ADD(NOW(), INTERVAL 2 DAY), 13.00),
(4, 1, DATE_ADD(NOW(), INTERVAL 2 DAY), 9.50),
(5, 4, DATE_ADD(NOW(), INTERVAL 3 DAY), 16.00),
(6, 3, DATE_ADD(NOW(), INTERVAL 3 DAY), 15.50),
(1, 2, DATE_ADD(NOW(), INTERVAL 5 DAY), 13.00),
(2, 4, DATE_ADD(NOW(), INTERVAL 7 DAY), 12.00);
-- Buchungen (Testdaten)
INSERT INTO Bookings (UserID, ScreeningID, BookingDate, SeatCount, TotalPrice, Status) VALUES
(2, 1, DATE_SUB(NOW(), INTERVAL 2 DAY), 2, 29.00, 'confirmed'),
(3, 2, DATE_SUB(NOW(), INTERVAL 1 DAY), 3, 30.00, 'confirmed'),
(2, 3, NOW(), 1, 13.00, 'confirmed');