Initial commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
-- Create table "Genres" to store movie genres
|
||||
|
||||
CREATE TABLE genres (
|
||||
genre_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
genre_name TEXT NOT NULL UNIQUE CHECK(length(genre_name) > 0), -- Genre name cannot be empty
|
||||
CONSTRAINT no_double_spaces_in_genre_name CHECK (genre_name NOT LIKE '% %') -- Genre name cannot contain double spaces
|
||||
);
|
||||
|
||||
-- Create table "Movies" to store movie details
|
||||
|
||||
CREATE TABLE movies (
|
||||
movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT NOT NULL UNIQUE CHECK(length(title) > 0), -- Movie title cannot be empty
|
||||
genre_id INTEGER,
|
||||
duration INTEGER CHECK(duration > 0), -- Movie duration must be greater than 0
|
||||
FOREIGN KEY (genre_id) REFERENCES genres (genre_id) ON DELETE CASCADE,
|
||||
CONSTRAINT no_double_spaces_in_title CHECK (title NOT LIKE '% %') -- Movie title cannot contain double spaces
|
||||
);
|
||||
|
||||
-- Create table "Halls" to store cinema hall details
|
||||
|
||||
CREATE TABLE halls (
|
||||
hall_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
hall_name TEXT NOT NULL UNIQUE CHECK(length(hall_name) > 0), -- Hall name cannot be empty
|
||||
capacity INTEGER NOT NULL CHECK(capacity > 0), -- Hall capacity must be positive
|
||||
CONSTRAINT no_double_spaces_in_hall_name CHECK (hall_name NOT LIKE '% %') -- Hall name cannot contain double spaces
|
||||
);
|
||||
|
||||
-- Create table "Sessions" to store session details
|
||||
|
||||
CREATE TABLE sessions (
|
||||
session_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
movie_id INTEGER,
|
||||
hall_id INTEGER,
|
||||
begin_at TIMESTAMP NOT NULL, -- Date and time of the session
|
||||
ticket_price REAL NOT NULL CHECK(ticket_price >= 0), -- Ticket price cannot be negative
|
||||
FOREIGN KEY (movie_id) REFERENCES movies (movie_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (hall_id) REFERENCES halls (hall_id) ON DELETE CASCADE,
|
||||
CONSTRAINT unique_hall_time UNIQUE (hall_id, begin_at) -- Prevent duplicate sessions in the same hall at the same time
|
||||
);
|
||||
|
||||
-- Create table "Tickets" to store sold tickets
|
||||
|
||||
CREATE TABLE tickets (
|
||||
ticket_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id INTEGER,
|
||||
seat_number INTEGER NOT NULL CHECK(seat_number > 0), -- Seat number must be positive
|
||||
sold_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Sale time defaults to current time
|
||||
FOREIGN KEY (session_id) REFERENCES sessions (session_id) ON DELETE CASCADE,
|
||||
CONSTRAINT unique_session_seat UNIQUE(session_id, seat_number) -- Unique combination of session and seat number
|
||||
);
|
||||
|
||||
-- Create table "Refunds" to store refunded tickets
|
||||
|
||||
CREATE TABLE refunds (
|
||||
refund_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
ticket_id INTEGER NOT NULL UNIQUE,
|
||||
refund_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
refund_amount REAL NOT NULL CHECK (refund_amount >= 0), -- Refund amount cannot be negative
|
||||
FOREIGN KEY (ticket_id) REFERENCES tickets(ticket_id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Create table "Roles" to store user roles
|
||||
|
||||
CREATE TABLE roles (
|
||||
role_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
role_name TEXT UNIQUE NOT NULL CHECK(length(role_name) > 0), -- Role name cannot be empty
|
||||
access_level INTEGER UNIQUE NOT NULL CHECK(access_level > 0), -- Access level must be positive
|
||||
CONSTRAINT no_spaces_in_role_name CHECK (role_name NOT LIKE '% %') -- Role name cannot contain spaces
|
||||
);
|
||||
|
||||
-- Create table "Users" to store user details
|
||||
|
||||
CREATE TABLE users (
|
||||
user_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT UNIQUE NOT NULL CHECK(length(username) > 0), -- Username cannot be empty
|
||||
password_hash TEXT NOT NULL CHECK(length(password_hash) > 0), -- Password hash cannot be empty
|
||||
salt TEXT UNIQUE NOT NULL CHECK(length(salt) > 0), -- Salt cannot be empty
|
||||
role_id INTEGER NOT NULL,
|
||||
FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE CASCADE,
|
||||
CONSTRAINT no_spaces_in_username CHECK (username NOT LIKE '% %') -- Username cannot contain spaces
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user