Загрузка данных


DROP DATABASE IF EXISTS it_cube;
CREATE DATABASE it_cube
    DEFAULT CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;
USE it_cube;

-- =========================================================
-- 1. РОДИТЕЛИ
-- =========================================================
CREATE TABLE `parents` (
    `parent_id`     INT NOT NULL AUTO_INCREMENT,
    `last_name`     VARCHAR(50)  NOT NULL,
    `first_name`    VARCHAR(50)  NOT NULL,
    `middle_name`   VARCHAR(50)  NULL DEFAULT NULL,
    `phone`         VARCHAR(20)  NOT NULL,
    `email`         VARCHAR(100) NOT NULL,
    `snils`         CHAR(11)     NULL DEFAULT NULL,
    `registered_at` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `address`       VARCHAR(200) NULL DEFAULT NULL,
    PRIMARY KEY (`parent_id`),
    UNIQUE KEY `uq_parents_phone` (`phone`),
    UNIQUE KEY `uq_parents_email` (`email`),
    UNIQUE KEY `uq_parents_snils` (`snils`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 2. ДЕТИ
-- =========================================================
CREATE TABLE `children` (
    `child_id`    INT NOT NULL AUTO_INCREMENT,
    `last_name`   VARCHAR(50) NOT NULL,
    `first_name`  VARCHAR(50) NOT NULL,
    `middle_name` VARCHAR(50) NULL DEFAULT NULL,
    `birth_date`  DATE        NOT NULL,
    `snils`       CHAR(11)    NULL DEFAULT NULL,
    `parent_id`   INT         NOT NULL,
    `gender`      ENUM('М','Ж') NULL DEFAULT NULL,
    PRIMARY KEY (`child_id`),
    UNIQUE KEY `uq_children_snils` (`snils`),
    KEY `idx_children_parent` (`parent_id`),
    CONSTRAINT `fk_children_parent`
        FOREIGN KEY (`parent_id`) REFERENCES `parents` (`parent_id`)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 3. ПРОГРАММЫ
-- =========================================================
CREATE TABLE `programs` (
    `program_id`     INT NOT NULL AUTO_INCREMENT,
    `name`           VARCHAR(100) NOT NULL,
    `description`    TEXT         NULL DEFAULT NULL,
    `min_age`        TINYINT UNSIGNED NOT NULL,
    `max_age`        TINYINT UNSIGNED NOT NULL,
    `duration_hours` SMALLINT UNSIGNED NOT NULL,
    `is_active`      TINYINT(1) NOT NULL DEFAULT 1,
    PRIMARY KEY (`program_id`),
    UNIQUE KEY `uq_programs_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 4. ПРЕПОДАВАТЕЛИ
-- =========================================================
CREATE TABLE `teachers` (
    `teacher_id`     INT NOT NULL AUTO_INCREMENT,
    `last_name`      VARCHAR(50)  NOT NULL,
    `first_name`     VARCHAR(50)  NOT NULL,
    `middle_name`    VARCHAR(50)  NULL DEFAULT NULL,
    `specialization` VARCHAR(100) NOT NULL,
    `phone`          VARCHAR(20)  NOT NULL,
    `email`          VARCHAR(100) NOT NULL,
    `hire_date`      DATE         NULL DEFAULT NULL,
    PRIMARY KEY (`teacher_id`),
    UNIQUE KEY `uq_teachers_phone` (`phone`),
    UNIQUE KEY `uq_teachers_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 5. ГРУППЫ  (groups — зарезервированное слово → кавычки обязательны)
-- =========================================================
CREATE TABLE `groups` (
    `group_id`      INT NOT NULL AUTO_INCREMENT,
    `program_id`    INT NOT NULL,
    `teacher_id`    INT NOT NULL,
    `room`          VARCHAR(20)  NULL DEFAULT NULL,
    `academic_year` VARCHAR(9)   NOT NULL,
    `max_seats`     SMALLINT UNSIGNED NOT NULL,
    `free_seats`    SMALLINT UNSIGNED NOT NULL,
    `notes`         VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`group_id`),
    KEY `idx_groups_program` (`program_id`),
    KEY `idx_groups_teacher` (`teacher_id`),
    CONSTRAINT `fk_groups_program`
        FOREIGN KEY (`program_id`) REFERENCES `programs` (`program_id`)
        ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `fk_groups_teacher`
        FOREIGN KEY (`teacher_id`) REFERENCES `teachers` (`teacher_id`)
        ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 6. ЗАЯВКИ
-- =========================================================
CREATE TABLE `applications` (
    `application_id` INT NOT NULL AUTO_INCREMENT,
    `child_id`       INT NOT NULL,
    `group_id`       INT NULL DEFAULT NULL,
    `status`         ENUM('новая','на рассмотрении','одобрена','отклонена','зачислен')
                     NOT NULL DEFAULT 'новая',
    `submitted_at`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `comment`        TEXT     NULL DEFAULT NULL,
    `updated_at`     DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`application_id`),
    KEY `idx_applications_child` (`child_id`),
    KEY `idx_applications_group` (`group_id`),
    KEY `idx_applications_status` (`status`),
    KEY `idx_applications_submitted` (`submitted_at`),
    CONSTRAINT `fk_applications_child`
        FOREIGN KEY (`child_id`) REFERENCES `children` (`child_id`)
        ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `fk_applications_group`
        FOREIGN KEY (`group_id`) REFERENCES `groups` (`group_id`)
        ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 7. ИСТОРИЯ ЗАЯВОК
-- =========================================================
CREATE TABLE `application_history` (
    `history_id`     INT NOT NULL AUTO_INCREMENT,
    `application_id` INT NOT NULL,
    `old_status`     VARCHAR(20) NULL DEFAULT NULL,
    `new_status`     VARCHAR(20) NULL DEFAULT NULL,
    `changed_at`     DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`history_id`),
    KEY `idx_history_application` (`application_id`),
    CONSTRAINT `fk_history_application`
        FOREIGN KEY (`application_id`) REFERENCES `applications` (`application_id`)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 8. РАСПИСАНИЕ
-- =========================================================
CREATE TABLE `schedule` (
    `lesson_id`  INT NOT NULL AUTO_INCREMENT,
    `group_id`   INT NOT NULL,
    `weekday`    ENUM('Пн','Вт','Ср','Чт','Пт','Сб','Вс') NOT NULL,
    `start_time` TIME NOT NULL,
    `end_time`   TIME NOT NULL,
    PRIMARY KEY (`lesson_id`),
    KEY `idx_schedule_group` (`group_id`),
    CONSTRAINT `fk_schedule_group`
        FOREIGN KEY (`group_id`) REFERENCES `groups` (`group_id`)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;