Описание базы данных
Архитектура базы данных terra_school_service#

terra_school_service.cluster
Предназначение: Хранит список названий кластеров для школьных категорий.
Структура:
| Поле | Тип | Описание | Обязательное | Пример |
|---|---|---|---|---|
UUID |
STRING |
Уникальный идентификатор кластера | ✅ | b7612086-efb0-400d-a2e6-9ce89c8afe21 |
name |
STRING |
Название кластера | ❌ | IT, Аналитика, Финансы |
priority |
INT |
Приоритет отображения кластера | ❌ | 1 |
Связь:#
ПолеUUID таблицы кластеров является первичным ключом, а поле cluster_uuid в таблице (terra_school_service.cluster_category) — внешним ключом, ссылающимся на него.
terra_school_service.cluster_category
Предназначение: Таблица для связи cluster и school_category
Структура:
| Поле | Тип | Описание | Обязательное | Пример |
|---|---|---|---|---|
UUID |
STRING |
Уникальный идентификатор связи | ✅ | cfa53dfd-2014-434b-ac41-75a109c1761d |
cluster_uuid |
STRING |
Ссылка на кластер, к которому относится категория | ❌ | b7612086-efb0-400d-a2e6-9ce89c8afe21 |
category_uuid |
STRING |
Ссылка на категорию, входящую в кластер | ❌ | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a13 |
Связь:#
Таблица cluster_category играет роль промежуточной связующей таблицы, реализуя связь многие-ко-многим. ПолеUUID таблицы cluster_category является первичным ключом, поле cluster_uuid в таблице cluster_category — внешним ключом, ссылающимся на него.
Аналогично, поле category_uuid в таблице cluster_category является внешним ключом на полеUUID таблицы school_category.
Таблица: terra_school_service.lesson
Предназначение: Содержит информацию об учебных уроках.
Структура:
| Поле | Тип | Описание | Обязательное | Пример |
|---|---|---|---|---|
UUID |
STRING |
Уникальный идентификатор урока | ✅ | b7612086-efb0-400d-a2e6-9ce89c8afe21 |
title |
STRING |
Название урока | ✅ | Основы математики |
tag |
STRING |
Тег или порядковый номер урока | ✅ | урок 1 |
description |
STRING |
Подробное описание содержания урока | ❌ | Урок по основам алгебры и логики |
brief_information |
STRING |
Краткая аннотация | ❌ | Введение в предмет |
school_uuid |
STRING |
Идентификатор школы, к которой относится урок | ✅ | 990aa177-4d0a-41f8-993f-312c5a74d048 |
priority |
INT |
Приоритет отображения | ✅ | 1 |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2024-10-09 08:48:20.189941 |
updated_at |
TIMESTAMP |
Дата последнего обновления записи | ✅ | 2024-10-09 08:48:20.189941 |
deleted_at |
TIMESTAMP |
Дата удаления записи (если была удалена) | ❌ | 2024-10-09 08:48:20.189941 |
Связь:#
Поле school_uuid в таблице lesson является внешним ключом, указывающим на полеUUID таблицы school. Эта связь определяет, к какой школе принадлежит каждый конкретный урок.
Таблица: terra_school_service.mentor_flow_reg
Предназначение: Служит для фиксации факта ввода учеником уникального кода, полученного с браслета, в рамках заданного потока. Это служит подтверждением его участия и прохождения этапа регистрации.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
id |
INT |
Уникальный идентификатор записи | ✅ | 1 |
mentor_flow_id |
INT |
Идентификатор наставнического потока | ✅ | 123 |
student_uuid |
UUID |
Уникальный идентификатор ученика | ✅ | 603e9656-64a7-423c-8ecf-2ebb1ae7e065 |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-23 10:15:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления записи | ✅ | 2025-05-23 11:00:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления записи (soft delete) | ❌ | 2025-05-24 09:00:00 |
Таблица: terra_school_service.permissions
Предназначение: Таблица permissions хранит информацию о правах доступа пользователей (админов) к конкретным школам или функциональности в системе. Она позволяет централизованно управлять доступами и правами на уровне сущностей.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
id |
INT |
Уникальный идентификатор записи | ✅ | 1 |
admin_uuid |
UUID |
Уникальный идентификатор администратора | ✅ | 8c1b02c4-3af7-4b90-a831-2d0a45fe391b |
permission |
JSONB |
Список школ и выданные для них разрешения | ✅ | {"c94520fa-a45f-4991-889e-b865b0b4acc2": ["view_school", "edit_school_flow", "edit_school_flow_students", "edit_school_flow_materials"]} |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-22 14:00:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления записи | ✅ | 2025-05-23 09:15:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления записи (soft delete) | ❌ | 2025-05-23 09:15:00 |
Таблица: terra_school_service.school
Предназначение: Хранит информацию о школах, включая описание, менторов и ключевые характеристики. Используется для отображения и фильтрации школ в интерфейсе системы.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
UUID |
UUID |
Уникальный идентификатор школы | ✅ | b2c1c70e-3056-4d09-9e47-2a6cb4c4f779 |
name |
STRING |
Название школы | ✅ | Школа программирования для начинающих |
image_url |
STRING |
Ссылка на изображение/обложку | ❌ | https://terra-photo.fra1.cdn.digitaloceanspaces.com/images/school_image.png |
category_uuid |
UUID |
Идентификатор категории, к которой относится школа | ✅ | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a17 |
format |
STRING |
Формат обучения (онлайн, офлайн, смешанный и т.д.) | ✅ | online |
main_information |
JSONB |
Основная информация о школе (цели, методики, ключевые особенности) | ❌ | {"Date": {"dateEnd": "2024-12-01T00:00:00Z", "dateStart": "2024-12-01T00:00:00Z"}, "Extra": "какой-то экстра", "Duration": 16, "Schedule": "расписание", "LessonsCount": 8, "SpeakersCount": 1} |
mentor_uuids |
UUID[] |
Список UUID менторов, привязанных к школе | ✅ | {bda09f62-7e4d-4724-a949-ac6c809f7edc} |
graduation_results |
JSONB |
Результаты по окончании школы (сертификат, проект, стажировка и т.д.) | ❌ | [{"priority": 1, "description": "Освоите РВД позиции в коммуникации, транзактный анализ по Эрику Берну"}, {"priority": 2, "description": "Поймете, как работать с контекстом, текстом и подтекстом"} |
description |
STRING |
Общее описание школы | ✅ | Научишься видеть цифры за любыми действиями и задачами в твоем бизнесе. Изучичишь методы влияния на них. Ты уже любишь их — ведь тебе нравится их рост на банковском счете! Аналитика — это сверхспособность современного человека для принятия эффективных управленческих решений. На основе твердых фактов и цифр, а не интуиции. |
target_audience |
JSONB |
Целевая аудитория | ❌ | [{"title": "Для новичков", "iconURL": null, "priority": 1, "description": "Наша школа подойдёт и новичкам, и маленьким цехам и даже большим швейным фабрикам."}] |
acquired_skills |
JSONB |
Навыки, которые получает ученик | ❌ | [{"priority": 0, "description": "Ответы на вопросы. а самые активные участники получат индивидулаьные разборы и возможность работать в группе самых сильных."}] |
question_and_answers |
JSONB |
Часто задаваемые вопросы и ответы | ❌ | [{"answer": "Terra — некоммерческое сообщество, благотворительный проект. На территории бизнес-клуба запрещено продавать какие-либо услуги.\n\nНашей миссией является борьба с бедностью, с помощью образования и бизнес-интеллекта. Мы создаем и выращиваем миллиардные компании, которые также помогают вырасти начинающим предпринимателям.\n\nБезвозмездно помогая другим, участники клуба наполняют свою жизнь смыслом и сами растут быстрее.","priority": 0,"question": "Почему бесплатно?}]" |
level |
STRING |
Уровень школы (старт, запуск, прорыв, опора) | ✅ | launch |
learning_process |
JSONB |
Описание процесса обучения | ✅ | [{"title": "Очные занятия", "imageURL": "https://terra-photo.fra1.cdn.digitaloceanspaces.com/images/lecture.png", "description": "2,5 месяца"}, {"title": "Длительность занятия", "imageURL": "https://terra-photo.fra1.cdn.digitaloceanspaces.com/images/feedback.png", "description": "2 часа"}, {"title": "Практика", "imageURL": "https://terra-photo.fra1.cdn.digitaloceanspaces.com/images/practice.png", "description": "10 личных встреч, может быть дольше"}] |
video_url |
STRING |
Ссылка на видео школы | ❌ | https://youtube.com/school_promo |
link |
STRING |
Внешняя ссылка на сайт школы | ✅ | https://school.example.com |
flow_id |
INT |
Идентификатор потока, с которым связана школа | ❌ | 123 |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-01 10:00:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления | ✅ | 2025-05-20 16:30:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления | ❌ | 2025-05-20 16:30:00 |
loсation |
JSONB |
Локация | ❌ | {"cityID": 1, "countryID": 1, "districtID": 33} |
Связь:#
| name key | Связь с таблицей | Тип связи | Описание связи |
|---|---|---|---|
category_uuid |
school_category |
Многие к одному | Категория, к которой относится школа |
scool_uuid |
school_flow |
Один к одному/многим | Текущий или основной запуск школы (если используется) |
mentor_uuids |
(внутренняя логика / app_user) |
Массив внешних ключей | Список UUID менторов, связанных с этой школой |
scool_uuid |
lesson |
Один ко многим | Уроки, привязанные к конкретной школе |
scool_uuid |
school_page_templates |
Один к одному | Шаблон отображения страницы конкретной школы на фронте |
Таблица: terra_school_service.school_category
Предназначение: Таблица school_category содержит список категорий, к которым может относиться школа. Используется для классификации школ по направлениям, тематике или типу программы.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
uuid |
UUID |
Уникальный идентификатор категории | ✅ | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a13 |
alias |
STRING |
Уникальное символьное имя категории (используется как ключ) | ✅ | ecommerce |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-01 09:00:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления записи | ✅ | 2025-05-10 12:30:00 |
deleted_at |
TIMESTAMP |
Дата и время мягкого удаления категории | ❌ | 2025-05-10 12:30:00 |
Связь:#
Поле category_uuid в таблице school является внешним ключом, указывающим на поле uuid таблицы school_category.
Таблица: terra_school_service.school_flow_material
Предназначение: Контент и материалы, привязанные к запуску внутри конкретной школы
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
uuid |
UUID |
Уникальный идентификатор записи | ✅ | fbc86311-061c-426c-bff8-48eb7d70082e |
school_flow_uuid |
UUID |
Уникальный идентификатор потока/запуска | ✅ | 4e05fbb2-38c1-49e6-b3df-c2a63ff12a6e |
name |
STRING |
Название запуска | ✅ | Весенний поток 2025 |
tag |
STRING |
Краткий тег или ярлык для запуска | ✅ | spring_2025 |
content |
STRING |
Контент и материалы, связанный с запуском | ✅ | Этот поток ориентирован на новичков... |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-04-01 10:00:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления записи | ✅ | 2025-05-10 15:30:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления | ❌ | 2025-06-01 09:45:00 |
Связь:#
Поле flow_uuid в таблице school_flow_material является внешним ключом, указывающим на поле uuid таблицы school_flow.
Эта связь определяет, к какому запуску школы (school_flow) относится конкретный учебный материал.
Таблица: terra_school_service.school_flow
Предназначение: Таблица school_flow представляет собой связь конкретной школы с её запуском. Используется для организации образовательного процесса по конкретным датам и условиям запуска.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
uuid |
UUID |
Уникальный идентификатор запуска | ✅ | a13b9a2c-0d5f-4d5c-9876-2a4ec4319081 |
school_uuid |
UUID |
Ссылка на школу из school |
✅ | b2c1c70e-3056-4d09-9e47-2a6cb4c4f779 |
name |
STRING |
Название конкретного запуска/потока | ✅ | Весенний набор 2025 |
study_period |
JSONB |
Период обучения | ✅ | { "start": "2025-04-01", "end": "2025-07-01" } |
registration_opened |
BOOLEAN |
Флаг открыта ли регистрация | ✅ | true |
invite_code_registration |
BOOLEAN |
Требуется ли инвайт-код для регистрации | ✅ | false |
need_cover_letter |
BOOLEAN |
Нужно ли мотивационное письмо | ✅ | true |
registrations_auto_confirmation |
BOOLEAN |
Автоматически ли подтверждаются регистрации | ✅ | false |
created_at |
TIMESTAMP |
Дата создания записи | ✅ | 2025-03-01 10:00:00 |
updated_at |
TIMESTAMP |
Дата последнего обновления записи | ✅ | 2025-05-20 15:30:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления | ❌ | 2025-06-15 08:45:00 |
students_limit |
INTEGER |
Ограничение на количество студентов | ❌ | 100 |
format |
STRING |
Формат запуска (онлайн, офлайн и т.п.) | ✅ | online |
mentor_flow_id |
INTEGER |
Ссылка на поток менторов, если используется | ❌ | 42 |
tg_link |
STRING |
Ссылка на Telegram-группу или канал | ✅ | https://t.me/school_launch_2025 |
schedule |
STRING |
Текстовое описание расписания | ❌ | Вторник 17:00 |
Связь:#
Поле school_uuid в таблице school_flow является внешним ключом, указывающим на поле uuid таблицы school.
Эта связь определяет, к какой школе относится каждый конкретный запуск (поток) обучения
Таблица: terra_school_service.school_flow_registration
Предназначение: Таблица school_flow_registration фиксирует регистрацию конкретного пользователя на конкретный запуск школы. Содержит информацию о статусе, сопроводительном письме и инвайт-коде.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
id |
SERIAL |
Уникальный идентификатор записи | ✅ | 1 |
flow_uuid |
UUID |
Ссылка на запуск школы (school_flow) |
✅ | fbc86311-061c-426c-bff8-48eb7d70082e |
student_uuid |
UUID |
Уникальный идентификатор студента | ✅ | 603e9656-64a7-423c-8ecf-2ebb1ae7e065 |
status |
TEXT |
Статус регистрации (например: pending, approved, rejected) |
✅ | pending |
cover_letter |
TEXT |
Сопроводительное письмо (если требуется) | ❌ | Я хочу попасть в эту школу, потому что... |
invite_code |
TEXT |
Инвайт-код, если он необходим для регистрации | ❌ | X9F-42XZ |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-10 14:20:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления | ❌ | 2025-05-11 09:00:00 |
deleted_at |
TIMESTAMP |
Дата и время удаления | ❌ | 2025-05-11 09:00:00 |
Связь:#
Поле flow_uuid в таблице school_flow_registration является внешним ключом, указывающим на поле uuid таблицы school_flow.
Эта связь определяет, на какой конкретный запуск школы (поток) зарегистрирован студент.
Таблица: terra_school_service.school_page_templates
Предназначение:
Таблица school_page_templates хранит шаблон отображения страницы конкретной школы — последовательность компонентов, из которых должна быть собрана страница на фронтенде. Позволяет гибко настраивать контентную структуру.
Структура:
| Столбец | Тип данных | Описание | Обязательность | Пример |
|---|---|---|---|---|
id |
SERIAL |
Уникальный идентификатор шаблона | ✅ | 1 |
school_uuid |
UUID |
Ссылка на школу из таблицы school |
✅ | b2c1c70e-3056-4d09-9e47-2a6cb4c4f779 |
components |
JSONB |
Список компонентов, отображаемых на странице, в нужном порядке | ✅ | [{"type": "hero", "title": "Добро пожаловать"}, {"type": "faq"}] |
created_at |
TIMESTAMP |
Дата и время создания записи | ✅ | 2025-05-01 10:00:00 |
updated_at |
TIMESTAMP |
Дата и время последнего обновления | ✅ | 2025-05-15 13:00:00 |
deleted_at |
TIMESTAMP |
Мягкое удаление — дата деактивации шаблона | ❌ | 2025-05-15 13:00:00 |
Связь:#
Поле school_uuid в таблице school_page_templates является внешним ключом, указывающим на поле uuid таблицы school.
Эта связь определяет, какой школе принадлежит конкретный шаблон отображения страницы на фронте.