new schemas
This commit is contained in:
154
sql/schema.sql
Normal file
154
sql/schema.sql
Normal file
@@ -0,0 +1,154 @@
|
||||
CREATE DATABASE IF NOT EXISTS hotel_reservations
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE hotel_reservations;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
-- LOOKUP / REFERENCE TABLES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CREATE TABLE hotel_chain (
|
||||
hotel_chain_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code VARCHAR(10) NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (hotel_chain_id),
|
||||
UNIQUE KEY uq_chain_code (code)
|
||||
);
|
||||
|
||||
CREATE TABLE country (
|
||||
country_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code CHAR(2) NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
currency VARCHAR(10) NOT NULL,
|
||||
PRIMARY KEY (country_id),
|
||||
UNIQUE KEY uq_country_code (code)
|
||||
);
|
||||
|
||||
CREATE TABLE star_rating (
|
||||
star_rating_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code TINYINT UNSIGNED NOT NULL,
|
||||
description VARCHAR(20) NOT NULL,
|
||||
PRIMARY KEY (star_rating_id),
|
||||
UNIQUE KEY uq_star_code (code)
|
||||
);
|
||||
|
||||
CREATE TABLE hotel_characteristic (
|
||||
characteristic_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code VARCHAR(20) NOT NULL,
|
||||
description VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (characteristic_id),
|
||||
UNIQUE KEY uq_char_code (code)
|
||||
);
|
||||
|
||||
CREATE TABLE room_type (
|
||||
room_type_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code VARCHAR(20) NOT NULL,
|
||||
description VARCHAR(100) NOT NULL,
|
||||
standard_rate DECIMAL(10,2) NOT NULL,
|
||||
smoking_yn BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (room_type_id),
|
||||
UNIQUE KEY uq_room_type_code (code)
|
||||
);
|
||||
|
||||
CREATE TABLE rate_period (
|
||||
rate_period_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
code VARCHAR(20) NOT NULL,
|
||||
description VARCHAR(50) NOT NULL,
|
||||
month_from TINYINT UNSIGNED NOT NULL,
|
||||
month_to TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (rate_period_id),
|
||||
UNIQUE KEY uq_rate_period_code (code)
|
||||
);
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
-- CORE ENTITIES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CREATE TABLE hotel (
|
||||
hotel_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
hotel_chain_id INT UNSIGNED,
|
||||
country_id INT UNSIGNED NOT NULL,
|
||||
star_rating_id INT UNSIGNED NOT NULL,
|
||||
code VARCHAR(20) NOT NULL,
|
||||
name VARCHAR(150) NOT NULL,
|
||||
address VARCHAR(200),
|
||||
postcode VARCHAR(20),
|
||||
city VARCHAR(100) NOT NULL,
|
||||
url VARCHAR(200),
|
||||
PRIMARY KEY (hotel_id),
|
||||
UNIQUE KEY uq_hotel_code (code),
|
||||
CONSTRAINT fk_hotel_chain FOREIGN KEY (hotel_chain_id) REFERENCES hotel_chain (hotel_chain_id),
|
||||
CONSTRAINT fk_hotel_country FOREIGN KEY (country_id) REFERENCES country (country_id),
|
||||
CONSTRAINT fk_hotel_star FOREIGN KEY (star_rating_id) REFERENCES star_rating (star_rating_id)
|
||||
);
|
||||
|
||||
CREATE TABLE hotel_room (
|
||||
room_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
hotel_id INT UNSIGNED NOT NULL,
|
||||
room_type_id INT UNSIGNED NOT NULL,
|
||||
room_number VARCHAR(10) NOT NULL,
|
||||
floor TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (room_id),
|
||||
UNIQUE KEY uq_hotel_room (hotel_id, room_number),
|
||||
CONSTRAINT fk_room_hotel FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id),
|
||||
CONSTRAINT fk_room_type FOREIGN KEY (room_type_id) REFERENCES room_type (room_type_id)
|
||||
);
|
||||
|
||||
CREATE TABLE guest (
|
||||
guest_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
country_id INT UNSIGNED,
|
||||
name VARCHAR(150) NOT NULL,
|
||||
email VARCHAR(150),
|
||||
address VARCHAR(200),
|
||||
city VARCHAR(100),
|
||||
PRIMARY KEY (guest_id),
|
||||
CONSTRAINT fk_guest_country FOREIGN KEY (country_id) REFERENCES country (country_id)
|
||||
);
|
||||
|
||||
CREATE TABLE booking (
|
||||
booking_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
guest_id INT UNSIGNED NOT NULL,
|
||||
hotel_id INT UNSIGNED NOT NULL,
|
||||
date_from DATE NOT NULL,
|
||||
date_to DATE NOT NULL,
|
||||
status ENUM('confirmed', 'cancelled', 'completed', 'no_show') NOT NULL DEFAULT 'confirmed',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (booking_id),
|
||||
CONSTRAINT fk_booking_guest FOREIGN KEY (guest_id) REFERENCES guest (guest_id),
|
||||
CONSTRAINT fk_booking_hotel FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id)
|
||||
);
|
||||
|
||||
CREATE TABLE room_booking (
|
||||
room_booking_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
booking_id INT UNSIGNED NOT NULL,
|
||||
room_id INT UNSIGNED NOT NULL,
|
||||
date_from DATE NOT NULL,
|
||||
date_to DATE NOT NULL,
|
||||
nightly_rate DECIMAL(10,2) NOT NULL,
|
||||
total_amount DECIMAL(10,2) NOT NULL,
|
||||
PRIMARY KEY (room_booking_id),
|
||||
CONSTRAINT fk_rb_booking FOREIGN KEY (booking_id) REFERENCES booking (booking_id),
|
||||
CONSTRAINT fk_rb_room FOREIGN KEY (room_id) REFERENCES hotel_room (room_id)
|
||||
);
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
-- JUNCTION TABLES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
CREATE TABLE hotel_hotel_characteristic (
|
||||
hotel_id INT UNSIGNED NOT NULL,
|
||||
characteristic_id INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (hotel_id, characteristic_id),
|
||||
CONSTRAINT fk_hhc_hotel FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id),
|
||||
CONSTRAINT fk_hhc_char FOREIGN KEY (characteristic_id) REFERENCES hotel_characteristic (characteristic_id)
|
||||
);
|
||||
|
||||
CREATE TABLE period_room_rate (
|
||||
room_type_id INT UNSIGNED NOT NULL,
|
||||
rate_period_id INT UNSIGNED NOT NULL,
|
||||
rate DECIMAL(10,2) NOT NULL,
|
||||
PRIMARY KEY (room_type_id, rate_period_id),
|
||||
CONSTRAINT fk_prr_type FOREIGN KEY (room_type_id) REFERENCES room_type (room_type_id),
|
||||
CONSTRAINT fk_prr_period FOREIGN KEY (rate_period_id) REFERENCES rate_period (rate_period_id)
|
||||
);
|
||||
Reference in New Issue
Block a user