113 lines
5.2 KiB
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');
|