Загрузка данных
-- ============================================================
-- DATABASE: it_cube
-- MySQL 8.0.16+
-- Автоматизация приёма и распределения заявок
-- 7 таблиц
-- ============================================================
CREATE DATABASE IF NOT EXISTS it_cube
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE it_cube;
-- Для повторного запуска удаляем таблицы в порядке,
-- обратном зависимостям внешних ключей.
DROP TABLE IF EXISTS applications;
DROP TABLE IF EXISTS schedule;
DROP TABLE IF EXISTS `groups`;
DROP TABLE IF EXISTS programs;
DROP TABLE IF EXISTS teachers;
DROP TABLE IF EXISTS children;
DROP TABLE IF EXISTS parents;
-- ============================================================
-- 1. PARENTS: родители
-- ============================================================
CREATE TABLE parents (
parent_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(50) NOT NULL,
first_name VARCHAR(50) NOT NULL,
middle_name VARCHAR(50) DEFAULT NULL,
phone VARCHAR(20) NOT NULL,
email VARCHAR(100) NOT NULL,
snils CHAR(11) DEFAULT NULL,
registered_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uq_parents_phone UNIQUE (phone),
CONSTRAINT uq_parents_email UNIQUE (email),
CONSTRAINT uq_parents_snils UNIQUE (snils)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
-- ============================================================
-- 2. CHILDREN: дети
-- ============================================================
CREATE TABLE children (
child_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(50) NOT NULL,
first_name VARCHAR(50) NOT NULL,
middle_name VARCHAR(50) DEFAULT NULL,
birth_date DATE NOT NULL,
snils CHAR(11) DEFAULT NULL,
parent_id INT NOT NULL,
CONSTRAINT uq_children_snils UNIQUE (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. TEACHERS: преподаватели
-- ============================================================
CREATE TABLE teachers (
teacher_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(50) NOT NULL,
first_name VARCHAR(50) NOT NULL,
middle_name VARCHAR(50) DEFAULT NULL,
specialization VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL,
email VARCHAR(100) NOT NULL,
CONSTRAINT uq_teachers_phone UNIQUE (phone),
CONSTRAINT uq_teachers_email UNIQUE (email)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
-- ============================================================
-- 4. PROGRAMS: образовательные программы
-- ============================================================
CREATE TABLE programs (
program_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT DEFAULT NULL,
min_age TINYINT UNSIGNED NOT NULL,
max_age TINYINT UNSIGNED NOT NULL,
duration_hours SMALLINT UNSIGNED NOT NULL,
CONSTRAINT uq_programs_name UNIQUE (name),
CONSTRAINT chk_programs_age
CHECK (min_age <= max_age),
CONSTRAINT chk_programs_duration
CHECK (duration_hours > 0)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
-- ============================================================
-- 5. GROUPS: учебные кружки
-- ============================================================
CREATE TABLE `groups` (
group_id INT AUTO_INCREMENT PRIMARY KEY,
program_id INT NOT NULL,
teacher_id INT NOT NULL,
room VARCHAR(20) DEFAULT NULL,
academic_year VARCHAR(9) NOT NULL,
max_seats SMALLINT UNSIGNED NOT NULL,
free_seats SMALLINT UNSIGNED NOT NULL,
INDEX idx_groups_program (program_id),
INDEX idx_groups_teacher (teacher_id),
CONSTRAINT chk_groups_max_seats
CHECK (max_seats > 0),
CONSTRAINT chk_groups_free_seats
CHECK (free_seats <= max_seats),
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. SCHEDULE: расписание занятий
-- ============================================================
CREATE TABLE schedule (
lesson_id INT AUTO_INCREMENT PRIMARY KEY,
group_id INT NOT NULL,
weekday ENUM('Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс')
NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
INDEX idx_schedule_group (group_id),
CONSTRAINT chk_schedule_time
CHECK (end_time > start_time),
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;
-- ============================================================
-- 7. APPLICATIONS: заявки на обучение
-- ============================================================
CREATE TABLE applications (
application_id INT AUTO_INCREMENT PRIMARY KEY,
child_id INT NOT NULL,
group_id INT DEFAULT NULL,
status ENUM(
'новая',
'на рассмотрении',
'одобрена',
'отклонена',
'зачислен'
) NOT NULL DEFAULT 'новая',
submitted_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
comment TEXT DEFAULT NULL,
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;
-- ============================================================
-- ПРОВЕРКА СОЗДАНИЯ ТАБЛИЦ
-- ============================================================
SHOW TABLES;
-- Проверка структуры таблиц:
DESCRIBE parents;
DESCRIBE children;
DESCRIBE teachers;
DESCRIBE programs;
DESCRIBE `groups`;
DESCRIBE schedule;
DESCRIBE applications;
-- ============================================================
-- END OF SCRIPT
-- ============================================================