CREATE DATABASE IF NOT EXISTS guide_tours CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE guide_tours;
CREATE TABLE role (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO role (title) VALUES
('admin'),
('guide'),
('tourist');
CREATE TABLE user (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(255) NOT NULL,
login VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
phone VARCHAR(50) NOT NULL,
role_id INT UNSIGNED NOT NULL,
FOREIGN KEY (role_id) REFERENCES role(id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE difficulty (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO difficulty (title) VALUES
('легкий'),
('средний'),
('сложный');
CREATE TABLE tour_format (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO tour_format (title) VALUES
('экскурсия'),
('поход'),
('автобусный тур');
CREATE TABLE tour (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
guide_id INT UNSIGNED NOT NULL,
title VARCHAR(255) NOT NULL,
country VARCHAR(100) NOT NULL,
description TEXT NOT NULL,
date_start DATE NOT NULL,
date_end DATE NOT NULL,
days_count INT UNSIGNED NOT NULL,
image VARCHAR(255) DEFAULT NULL,
price DECIMAL(10,2) NOT NULL,
max_members INT UNSIGNED NOT NULL,
difficulty_id INT UNSIGNED NOT NULL,
format_id INT UNSIGNED NOT NULL,
min_age INT UNSIGNED DEFAULT NULL,
max_age INT UNSIGNED DEFAULT NULL,
is_unlimited TINYINT(1) NOT NULL DEFAULT 0,
FOREIGN KEY (guide_id) REFERENCES user(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (difficulty_id) REFERENCES difficulty(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (format_id) REFERENCES tour_format(id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE application_status (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
alias VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO application_status (title, alias) VALUES
('Новая', 'new'),
('Подтверждена', 'approved'),
('Отклонена', 'rejected');
CREATE TABLE application (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tour_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
status_id INT UNSIGNED NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tour_id) REFERENCES tour(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (status_id) REFERENCES application_status(id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE review (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tour_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
comment TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tour_id) REFERENCES tour(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;