Обновление кодовой базы, после изменения схемы БД

This commit is contained in:
Anton Dzyk
2026-01-09 17:17:29 +03:00
parent 6e7bf47814
commit 11b8f6aa82
18 changed files with 457 additions and 96 deletions
+137
View File
@@ -0,0 +1,137 @@
@startuml PostgreSQL Database Schema
!define PRIMARY_KEY(x) <b><color:#b8860b><&key></color> x</b>
!define FOREIGN_KEY(x) <color:#aaaaaa><&link-intact></color> <i>x</i>
!define COLUMN(x) <color:#588157>x</color>
!define INDEX(x) <color:#1e90ff><&magnifying-glass></color> x
scale 1024 width
skinparam linetype ortho
skinparam roundcorner 10
skinparam shadowing true
skinparam entity {
BackgroundColor #FFFEF0
BorderColor #2F4F4F
ArrowColor #2F4F4F
FontColor #333333
FontSize 12
AttributeFontSize 11
}
skinparam note {
BackgroundColor #FFFFCC
BorderColor #999999
}
package "External Tool schema" {
entity "**history**" as history {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты ..
COLUMN(deployment_id) : uuid [NOT NULL]
COLUMN(content_uuid) : uuid [NOT NULL]
COLUMN(created) : timestamp [NOT NULL]
COLUMN(message) : varchar(2048) [NOT NULL]
----
.. Ограничения ..
<&check> pk_history (PRIMARY KEY)
}
entity "**lms_content**" as lms_content {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты ..
COLUMN(deployment_id) : uuid [NOT NULL]
INDEX(content_uuid) : uuid [NOT NULL]
COLUMN(created) : timestamp [NOT NULL]
FOREIGN_KEY(task_id) : int8 [NOT NULL]
----
.. Ограничения ..
<&check> pk_lms_content (PRIMARY KEY)
<&link-intact> fk_lms_content_task (FOREIGN KEY)
----
.. Индексы ..
<&list> idx_content_uuid (content_uuid)
}
entity "**task**" as task {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты (обязательные) ..
COLUMN(name) : varchar(250) [NOT NULL]
COLUMN(description) : text [NOT NULL]
----
.. Атрибуты (опциональные) ..
COLUMN(init_script) : text [NULL]
COLUMN(verification_script) : text [NULL]
COLUMN(delete_script) : text [NULL]
----
.. Ограничения ..
<&check> pk_task (PRIMARY KEY)
}
}
' === СВЯЗИ ===
lms_content }o--|| task : " fk_lms_content_task\n (task_id → id) "
' === ЛОГИЧЕСКИЕ СВЯЗИ (пунктиром) ===
history ..> lms_content : " <size:10>content_uuid, deployment_id "
' === ПРИМЕЧАНИЯ ===
note right of history
**Таблица истории**
════════════════════
Хранит историю изменений
и событий в системе.
<b>Назначение полей:</b>
• deployment_id - ID развёртывания
• content_uuid - UUID контента
• created - время создания
• message - текст сообщения
<color:#006400>✓ Все поля обязательные</color>
<color:#cc0000>⚠ Нет явных FK связей</color>
end note
note left of task
**Таблица лабораторных работ**
════════════════════
Хранит определения задач
для системы обучения.
<b>Обязательные поля:</b>
• name - название задачи
• description - описание
<b>Скрипты (опциональные):</b>
• init_script - инициализация
• verification_script - проверка
• delete_script - очистка
end note
note left of lms_content
**Связь контента LMS с Task**
════════════════════
Связь контента из LMS с
лабораторными работами в
External Tool
<b>Индексы:</b>
• idx_content_uuid для
быстрого поиска по UUID
<b>Связи:</b>
• task_id → task.id (N:1)
<color:#006400>✓ Все поля обязательные</color>
end note
@enduml
+120
View File
@@ -0,0 +1,120 @@
@startuml PostgreSQL Database Schema
!define PRIMARY_KEY(x) <b><color:#b8860b><&key></color> x</b>
!define FOREIGN_KEY(x) <color:#aaaaaa><&link-intact></color> <i>x</i>
!define COLUMN(x) <color:#588157>x</color>
!define INDEX(x) <color:#1e90ff><&magnifying-glass></color> x
scale 1024 width
skinparam linetype ortho
skinparam roundcorner 10
skinparam shadowing true
skinparam entity {
BackgroundColor #FFFEF0
BorderColor #2F4F4F
ArrowColor #2F4F4F
FontColor #333333
FontSize 12
AttributeFontSize 11
}
skinparam note {
BackgroundColor #FFFFCC
BorderColor #999999
}
package "public schema" {
entity "**history**" as history {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты ..
COLUMN(deployment_id) : uuid [NULL]
COLUMN(content_uuid) : uuid [NULL]
COLUMN(created) : timestamp [NULL]
COLUMN(message) : varchar(2048) [NULL]
----
.. Ограничения ..
<&check> pk_history (PRIMARY KEY)
}
entity "**lms_content**" as lms_content {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты ..
COLUMN(deployment_id) : uuid [NULL]
INDEX(content_uuid) : uuid [NULL]
COLUMN(created) : timestamp [NULL]
FOREIGN_KEY(task_id) : int8 [NULL]
----
.. Ограничения ..
<&check> pk_lms_content (PRIMARY KEY)
<&link-intact> fk_lms_content_task (FOREIGN KEY)
----
.. Индексы ..
<&list> idx_content_uuid (content_uuid)
}
entity "**task**" as task {
.. Первичный ключ ..
PRIMARY_KEY(id) : int8 <<IDENTITY>>
----
.. Атрибуты ..
COLUMN(data) : jsonb [NULL]
----
.. Ограничения ..
<&check> pk_task (PRIMARY KEY)
}
}
' === СВЯЗИ ===
lms_content }o--|| task : " fk_lms_content_task\n (task_id → id) "
' === ЛОГИЧЕСКИЕ СВЯЗИ (пунктиром) ===
history ..> lms_content : " <size:10>логическая связь\n по content_uuid</size> "
' === ПРИМЕЧАНИЯ ===
note right of history
**Таблица истории**
════════════════════
Хранит историю изменений
и событий в системе.
<b>Назначение полей:</b>
• deployment_id - ID развёртывания
• content_uuid - UUID контента
• message - текст сообщения
<color:#cc0000>⚠ Нет явных FK связей</color>
end note
note bottom of task
**Таблица задач**
════════════════════
Хранит задачи в формате JSON.
<b>Поле data (jsonb):</b>
Гибкая структура для хранения
произвольных данных задачи.
end note
note left of lms_content
**Контент LMS**
════════════════════
Основная таблица контента
системы обучения.
<b>Индексы:</b>
• idx_content_uuid для
быстрого поиска по UUID
<b>Связи:</b>
• task_id → task.id (N:1)
end note
@enduml
+44
View File
@@ -0,0 +1,44 @@
@startuml
!define table(x) entity x << (T,#FFAAAA) >>
!define pk(x) <b><u>x</u></b>
!define fk(x) <i>x</i>
skinparam entity {
BackgroundColor #F5F5F5
BorderColor #333333
}
table(history) {
pk(id) : int8 <<IDENTITY>>
--
deployment_id : uuid
content_uuid : uuid
created : timestamp
message : varchar(2048)
}
table(lms_content) {
pk(id) : int8 <<IDENTITY>>
--
deployment_id : uuid
content_uuid : uuid <<INDEX>>
created : timestamp
fk(task_id) : int8
}
table(task) {
pk(id) : int8 <<IDENTITY>>
--
data : jsonb
}
lms_content }o--|| task : "task_id → id"
note bottom of history
Нет явных FK связей,
но content_uuid может
логически связываться
с lms_content.content_uuid
end note
@enduml