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


-- =========================================================
-- СОЗДАНИЕ СХЕМЫ
-- =========================================================
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 INDEX uq_parents_phone (phone),
    UNIQUE INDEX uq_parents_email (email),
    UNIQUE INDEX 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 INDEX uq_children_snils (snils),
    INDEX 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 INDEX 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 INDEX uq_teachers_phone (phone),
    UNIQUE INDEX uq_teachers_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =========================================================
-- 5. ГРУППЫ
-- =========================================================
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),
    INDEX idx_groups_program (program_id),
    INDEX 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),
    INDEX idx_applications_child (child_id),
    INDEX idx_applications_group (group_id),
    INDEX idx_applications_status (status),
    INDEX 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),
    INDEX 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),
    INDEX 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;