120 lines
3.4 KiB
Plaintext
120 lines
3.4 KiB
Plaintext
@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 |