feat(db): update init.sql with subjects, lesson types, classrooms, and schedules tables
This commit is contained in:
@@ -25,3 +25,89 @@ CREATE TABLE IF NOT EXISTS student_groups (
|
||||
name VARCHAR(100) UNIQUE NOT NULL,
|
||||
education_form_id BIGINT NOT NULL REFERENCES education_forms(id)
|
||||
);
|
||||
-- ==========================================
|
||||
-- Справочники
|
||||
-- ==========================================
|
||||
|
||||
-- Дисциплины
|
||||
CREATE TABLE IF NOT EXISTS subjects (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name VARCHAR(200) UNIQUE NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO subjects (name) VALUES
|
||||
('Высшая математика'),
|
||||
('Философия'),
|
||||
('Информатика'),
|
||||
('Базы данных'),
|
||||
('Английский язык')
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
|
||||
-- Типы занятий
|
||||
CREATE TABLE IF NOT EXISTS lesson_types (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name VARCHAR(50) UNIQUE NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO lesson_types (name) VALUES
|
||||
('Лекция'),
|
||||
('Практика'),
|
||||
('Лабораторная работа')
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
|
||||
-- Аудитории
|
||||
CREATE TABLE IF NOT EXISTS classrooms (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name VARCHAR(50) UNIQUE NOT NULL,
|
||||
capacity INT NOT NULL,
|
||||
is_available BOOLEAN DEFAULT TRUE,
|
||||
hardware_tags VARCHAR(255) -- например: "Проектор, ПК, Лаборатория"
|
||||
);
|
||||
|
||||
INSERT INTO classrooms (name, capacity, hardware_tags) VALUES
|
||||
('101 Ленинская', 120, 'Проектор, Доска'),
|
||||
('202 IT Lab', 20, 'ПК, Проектор, Лаборатория'),
|
||||
('303 Обычная', 30, 'Доска')
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
|
||||
-- ==========================================
|
||||
-- Связи для преподавателей и студентов
|
||||
-- ==========================================
|
||||
|
||||
-- Подгруппы (например: "ИВТ-21-1 Подгруппа 1")
|
||||
CREATE TABLE IF NOT EXISTS subgroups (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
group_id BIGINT NOT NULL REFERENCES student_groups(id) ON DELETE CASCADE,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
UNIQUE(group_id, name)
|
||||
);
|
||||
|
||||
-- Тестовая базовая группа для работы
|
||||
INSERT INTO student_groups (name, education_form_id)
|
||||
VALUES ('ИВТ-21-1', 1)
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
|
||||
-- Привязка преподавателей к дисциплинам
|
||||
CREATE TABLE IF NOT EXISTS teacher_subjects (
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
subject_id BIGINT NOT NULL REFERENCES subjects(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY(user_id, subject_id)
|
||||
);
|
||||
|
||||
-- ==========================================
|
||||
-- Основная таблица Расписания (Lessons)
|
||||
-- ==========================================
|
||||
CREATE TABLE IF NOT EXISTS lessons (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
teacher_id BIGINT NOT NULL REFERENCES users(id),
|
||||
subject_id BIGINT NOT NULL REFERENCES subjects(id),
|
||||
lesson_type_id BIGINT NOT NULL REFERENCES lesson_types(id),
|
||||
classroom_id BIGINT NOT NULL REFERENCES classrooms(id),
|
||||
group_id BIGINT NOT NULL REFERENCES student_groups(id), -- первичная группа
|
||||
subgroup_id BIGINT REFERENCES subgroups(id), -- необязательно (если делим группу)
|
||||
|
||||
day_of_week INT NOT NULL CHECK (day_of_week BETWEEN 1 AND 7), -- 1=Понедельник, 7=Воскресенье
|
||||
is_even_week BOOLEAN NOT NULL, -- Четная/нечетная неделя
|
||||
start_time TIME NOT NULL, -- Напр. '08:00:00'
|
||||
end_time TIME NOT NULL -- Напр. '09:30:00'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user