-- MySQL Script generated by MySQL Workbench
-- Mon Jun 15 12:10:45 2020
-- Model: New Model    Version: 1.0
-- 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 traffico_aeronautico
-- -----------------------------------------------------

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

-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`aeroporto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`aeroporto` (
  `codice` CHAR(3) NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  `citta` VARCHAR(45) NOT NULL,
  `nazione` VARCHAR(45) NOT NULL,
  `lunghezza_pista` INT NOT NULL,
  PRIMARY KEY (`codice`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`tipo_aeromobile`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`tipo_aeromobile` (
  `costruttore` VARCHAR(45) NOT NULL,
  `modello` VARCHAR(45) NOT NULL,
  `spazio_atterraggio` INT NOT NULL,
  `numero_motori` TINYINT NOT NULL,
  `lunghezza` INT NOT NULL,
  `numero_passeggeri` INT NOT NULL,
  PRIMARY KEY (`costruttore`, `modello`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`compatibilita`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`compatibilita` (
  `costruttore_aereo` VARCHAR(45) NOT NULL,
  `modello_aereo` VARCHAR(45) NOT NULL,
  `codice_aeroporto` CHAR(3) NOT NULL,
  PRIMARY KEY (`costruttore_aereo`, `modello_aereo`, `codice_aeroporto`),
  INDEX `fk_compatibilita_aeroporto1_idx` (`codice_aeroporto` ASC) VISIBLE,
  CONSTRAINT `fk_compatibilita_tipo_aeromobile`
    FOREIGN KEY (`costruttore_aereo` , `modello_aereo`)
    REFERENCES `traffico_aeronautico`.`tipo_aeromobile` (`costruttore` , `modello`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_compatibilita_aeroporto1`
    FOREIGN KEY (`codice_aeroporto`)
    REFERENCES `traffico_aeronautico`.`aeroporto` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`alleanza`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`alleanza` (
  `codice` INT NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  `sede` VARCHAR(45) NOT NULL,
  `anno_fondazione` YEAR NOT NULL,
  `frequent_flyer` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`codice`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`compagnia_aerea`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`compagnia_aerea` (
  `codice` CHAR(2) NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  `sede` VARCHAR(45) NOT NULL,
  `anno_fondazione` YEAR NOT NULL,
  `alleanza` INT NULL,
  PRIMARY KEY (`codice`),
  INDEX `fk_compagnia_aerea_alleanza1_idx` (`alleanza` ASC) VISIBLE,
  CONSTRAINT `fk_compagnia_aerea_alleanza1`
    FOREIGN KEY (`alleanza`)
    REFERENCES `traffico_aeronautico`.`alleanza` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`aeromobile`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`aeromobile` (
  `codice` VARCHAR(45) NOT NULL,
  `anno_immatricolazione` YEAR NOT NULL,
  `miglia_percorse` INT NOT NULL,
  `costruttore_aereo` VARCHAR(45) NOT NULL,
  `modello_aereo` VARCHAR(45) NOT NULL,
  `compagnia_aerea` CHAR(2) NOT NULL,
  PRIMARY KEY (`codice`),
  INDEX `fk_aeromobile_tipo_aeromobile1_idx` (`costruttore_aereo` ASC, `modello_aereo` ASC) VISIBLE,
  INDEX `fk_aeromobile_compagnia_aerea1_idx` (`compagnia_aerea` ASC) VISIBLE,
  CONSTRAINT `fk_aeromobile_tipo_aeromobile1`
    FOREIGN KEY (`costruttore_aereo` , `modello_aereo`)
    REFERENCES `traffico_aeronautico`.`tipo_aeromobile` (`costruttore` , `modello`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_aeromobile_compagnia_aerea1`
    FOREIGN KEY (`compagnia_aerea`)
    REFERENCES `traffico_aeronautico`.`compagnia_aerea` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`volo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`volo` (
  `codice` INT NOT NULL,
  `data` DATE NOT NULL,
  `orario_partenza` TIME NOT NULL,
  `aeroporto_partenza` CHAR(3) NOT NULL,
  `orario_arrivo` TIME NOT NULL,
  `aeroporto_arrivo` CHAR(3) NOT NULL,
  `stato` ENUM("schedulato", "in volo", "atterrato", "ritardato", "cancellato") NOT NULL,
  `aeromobile` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`codice`, `data`),
  INDEX `fk_volo_aeroporto1_idx` (`aeroporto_partenza` ASC) VISIBLE,
  INDEX `fk_volo_aeroporto2_idx` (`aeroporto_arrivo` ASC) VISIBLE,
  INDEX `fk_volo_aeromobile1_idx` (`aeromobile` ASC) VISIBLE,
  CONSTRAINT `fk_volo_aeroporto1`
    FOREIGN KEY (`aeroporto_partenza`)
    REFERENCES `traffico_aeronautico`.`aeroporto` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_volo_aeroporto2`
    FOREIGN KEY (`aeroporto_arrivo`)
    REFERENCES `traffico_aeronautico`.`aeroporto` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_volo_aeromobile1`
    FOREIGN KEY (`aeromobile`)
    REFERENCES `traffico_aeronautico`.`aeromobile` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `traffico_aeronautico`.`hub`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `traffico_aeronautico`.`hub` (
  `alleanza` INT NOT NULL,
  `aeroporto` CHAR(3) NOT NULL,
  `numero_hangar` INT NOT NULL,
  PRIMARY KEY (`alleanza`, `aeroporto`),
  INDEX `fk_hub_aeroporto1_idx` (`aeroporto` ASC) VISIBLE,
  CONSTRAINT `fk_hub_alleanza1`
    FOREIGN KEY (`alleanza`)
    REFERENCES `traffico_aeronautico`.`alleanza` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_hub_aeroporto1`
    FOREIGN KEY (`aeroporto`)
    REFERENCES `traffico_aeronautico`.`aeroporto` (`codice`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


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