-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema MCHS_project
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema MCHS_project
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `MCHS_project` DEFAULT CHARACTER SET utf8 ;
USE `MCHS_project` ;

-- -----------------------------------------------------
-- Table `MCHS_project`.`position_group`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`position_group` (
  `id` INT NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`position`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`position` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `group` INT NOT NULL,
  PRIMARY KEY (`id`, `group`),
  INDEX `group_idx` (`group` ASC) VISIBLE,
  CONSTRAINT `group`
    FOREIGN KEY (`group`)
    REFERENCES `MCHS_project`.`position_group` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`rank`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`rank` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`employee`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`employee` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `last_name` VARCHAR(45) NOT NULL,
  `first_name` VARCHAR(45) NOT NULL,
  `middle_name` VARCHAR(45) NULL,
  `birthday` DATE NOT NULL,
  `position` INT NOT NULL,
  `rank` INT NOT NULL,
  PRIMARY KEY (`id`, `position`, `rank`),
  INDEX `position_to_employee_idx` (`position` ASC) VISIBLE,
  INDEX `rank_to_employee_idx` (`rank` ASC) INVISIBLE,
  CONSTRAINT `position_to_employee`
    FOREIGN KEY (`position`)
    REFERENCES `MCHS_project`.`position` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `rank_to_employee`
    FOREIGN KEY (`rank`)
    REFERENCES `MCHS_project`.`rank` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`attestation_type`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`attestation_type` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`attestation`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`attestation` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `type` INT NOT NULL,
  `status` TINYINT NOT NULL,
  `no_attestation_reason` VARCHAR(45) NULL,
  `date` DATETIME NOT NULL,
  PRIMARY KEY (`id`, `type`),
  INDEX `att.type_to_attestation_idx` (`type` ASC) VISIBLE,
  CONSTRAINT `att.type_to_attestation`
    FOREIGN KEY (`type`)
    REFERENCES `MCHS_project`.`attestation_type` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`exercise_type`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`exercise_type` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`exercise`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`exercise` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `exercise_type` INT NOT NULL,
  `address` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`, `exercise_type`),
  INDEX `ex.type_to_exercise_idx` (`exercise_type` ASC) VISIBLE,
  CONSTRAINT `ex.type_to_exercise`
    FOREIGN KEY (`exercise_type`)
    REFERENCES `MCHS_project`.`exercise_type` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`exercises_report`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`exercises_report` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `start_date` DATETIME NOT NULL,
  `finish_date` DATETIME NOT NULL,
  `count_plan` SMALLINT NOT NULL,
  `count_actual` SMALLINT NOT NULL,
  `count_reason` VARCHAR(45) NULL,
  `comment` TEXT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`employee_exercise`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`employee_exercise` (
  `id_employee` INT NOT NULL,
  `id_exercise` INT NOT NULL,
  PRIMARY KEY (`id_employee`, `id_exercise`),
  INDEX `exercise_idx` (`id_exercise` ASC) VISIBLE,
  CONSTRAINT `employee`
    FOREIGN KEY (`id_employee`)
    REFERENCES `MCHS_project`.`employee` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `exercise`
    FOREIGN KEY (`id_exercise`)
    REFERENCES `MCHS_project`.`exercise` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`employee_attestation`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`employee_attestation` (
  `id_employee` INT NOT NULL,
  `id_attestation` INT NOT NULL,
  PRIMARY KEY (`id_employee`, `id_attestation`),
  INDEX `attestation_idx` (`id_attestation` ASC) VISIBLE,
  CONSTRAINT `employe`
    FOREIGN KEY (`id_employee`)
    REFERENCES `MCHS_project`.`employee` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `attestation`
    FOREIGN KEY (`id_attestation`)
    REFERENCES `MCHS_project`.`attestation` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`fire_vehicle`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`fire_vehicle` (
  `serial_number` INT NOT NULL,
  `brand` VARCHAR(100) NOT NULL,
  `production_date` DATE NOT NULL,
  `year_in_service` DATE NOT NULL,
  `type` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`serial_number`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`callout`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`callout` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `duration` VARCHAR(45) NOT NULL,
  `head_of_departure` INT NOT NULL,
  `saved` SMALLINT NOT NULL,
  `evacuated` SMALLINT NOT NULL,
  `date` DATE NULL,
  `type` VARCHAR(45) NOT NULL,
  `address` VARCHAR(100) NOT NULL,
  `fire_rank` VARCHAR(45) NULL,
  `fire_vehicle_id` INT NOT NULL,
  PRIMARY KEY (`id`, `head_of_departure`, `fire_vehicle_id`),
  INDEX `head_of_department_idx` (`head_of_departure` ASC) VISIBLE,
  INDEX `vehicle_idx` (`fire_vehicle_id` ASC) VISIBLE,
  CONSTRAINT `head_of_department`
    FOREIGN KEY (`head_of_departure`)
    REFERENCES `MCHS_project`.`employee` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `vehicle`
    FOREIGN KEY (`fire_vehicle_id`)
    REFERENCES `MCHS_project`.`fire_vehicle` (`serial_number`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`employee_to_callout`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`employee_to_callout` (
  `callout_id` INT NOT NULL,
  `employee_id` INT NOT NULL,
  PRIMARY KEY (`callout_id`, `employee_id`),
  INDEX `employee_idx` (`employee_id` ASC) VISIBLE,
  CONSTRAINT `callout`
    FOREIGN KEY (`callout_id`)
    REFERENCES `MCHS_project`.`callout` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `employee`
    FOREIGN KEY (`employee_id`)
    REFERENCES `MCHS_project`.`employee` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `employee_id` INT NULL,
  `login` VARCHAR(45) NOT NULL,
  `password_hash` VARCHAR(45) NOT NULL,
  `created` DATETIME NOT NULL,
  `updated` DATETIME NOT NULL,
  PRIMARY KEY (`id`, `employee_id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
  INDEX `employee_idx` (`employee_id` ASC) VISIBLE,
  CONSTRAINT `employee`
    FOREIGN KEY (`employee_id`)
    REFERENCES `MCHS_project`.`employee` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`privilege`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`privilege` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MCHS_project`.`user_privilege`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `MCHS_project`.`user_privilege` (
  `user_id` INT NOT NULL,
  `privilege_id` INT NOT NULL,
  PRIMARY KEY (`user_id`, `privilege_id`),
  INDEX `privilege_idx` (`privilege_id` ASC) VISIBLE,
  CONSTRAINT `user`
    FOREIGN KEY (`user_id`)
    REFERENCES `MCHS_project`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `privilege`
    FOREIGN KEY (`privilege_id`)
    REFERENCES `MCHS_project`.`privilege` (`id`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
