Раздел 4. Ключевые поля¶
Раздел фиксирует ключевые поля и связи сервисных БД BOX5-DIT-MGSN. Полный перечень PK/FK по каждой таблице приведён в приложении; ниже описаны используемые паттерны и связи, значимые для восстановления и интеграций.
4.1. Первичные ключи¶
В сервисных БД BOX5-DIT-MGSN основной паттерн ключа — суррогатный id с
sequence-default. Исключения используются там, где исторически сложился
собственный бизнес-ключ или где таблица является N:M связкой.
| Паттерн ключа | Примеры таблиц | Стратегия генерации / комментарий |
|---|---|---|
id integer |
st-auth.user, st-camera-storage.camera, st-event-storage.event, st-event-storage.primaryobject |
Последовательность PostgreSQL nextval(..._seq). Основной паттерн сервисных таблиц. |
| Собственное поле-ключ | st-event-storage.customappparam.param_id, eventadditionalfield.field_id, eventmeasuretaken.measure_id, extendedconfstatus.status_id, st-virt-cam-video-upload.videofile.file_id |
Поле выполняет роль PK и одновременно является прикладным идентификатором. |
| Ключ по FK | st-camera-storage.object_tree.object_id |
Узел объектного дерева идентифицируется объектом наблюдения; родитель хранится в parent_object_id. |
| Связующие таблицы без PK | camera_tags_camera, camera_workspaces_camera, risk_dangers_technical_barriers, zones_schedules_camera_zones |
Таблица состоит из пары FK и задаёт N:M связь. Уникальность пары контролируется прикладной логикой или ORM. |
| Внешняя БД ПК-КОТ | 773 из 774 таблиц svr-postgres-pk-kot |
PK/FK в основном не объявлены на уровне PostgreSQL; BOX5-DIT-MGSN читает эти таблицы как внешний справочник заказчика. |
Дополнительные уникальные ключи:
| Таблица | Unique-поля | Назначение |
|---|---|---|
st-auth.user |
username, guid, upn |
Уникальность логина и внешних идентификаторов пользователя. |
st-event-storage.severstal_event_datas |
violation_event_id |
Одна отраслевая классификация на одно событие BOX5-DIT-MGSN. |
st-virt-cam-video-upload.camera_repeat_queue |
camera_id |
Одна запись очереди повторов на виртуальную камеру. |
4.2. Внешние ключи¶
Внутри сервисных БД используются foreign key. Между разными сервисными БД PostgreSQL-ссылки обычно не объявляются: данные синхронизируются через API, Kafka и прикладные идентификаторы. Поэтому при восстановлении важно поднимать не только одну БД, а весь связанный набор БД/MinIO/ClickHouse.
| Связь | Ограничение | Поведение | Смысл |
|---|---|---|---|
st-auth.password_history.user_id → st-auth.user.id |
FK | ON DELETE CASCADE |
История паролей удаляется вместе с пользователем. |
st-camera-storage.camera.object_observation_id → object_observation.id |
FK | ON DELETE CASCADE |
Камера принадлежит объекту наблюдения. |
st-camera-storage.object_tree.object_id → object_observation.id |
FK | ON DELETE RESTRICT |
Узел дерева нельзя удалить, пока есть зависимые связи дерева. |
st-camera-storage.object_tree.parent_object_id → object_observation.id |
FK | ON DELETE RESTRICT |
Родительская связь объектного дерева. |
st-camera-storage.zone.camera_id → camera.id |
FK | ON DELETE CASCADE |
Зоны удаляются вместе с камерой. |
st-event-storage.event.image_id → image.id |
FK | ON DELETE CASCADE |
Основное изображение события. |
st-event-storage.event.model_id → modelinfo.id |
FK | ON DELETE CASCADE |
Модель, сформировавшая событие. |
st-event-storage.primaryobject.event_id → event.id |
FK | ON DELETE CASCADE |
Первичные объекты входят в событие. |
st-event-storage.primaryobject.bbox_id → bbox.id |
FK | ON DELETE CASCADE |
Координаты bbox первичного объекта. |
st-event-storage.secondaryobject.primary_object_id → primaryobject.id |
FK | ON DELETE CASCADE |
Вторичные объекты привязаны к первичному объекту. |
st-event-storage.severstal_event_datas.violation_event_id → event.id |
FK + UNIQUE |
ON DELETE CASCADE |
Отраслевая классификация события; связь 1:1 с событием. |
st-event-storage.eventfinish.event_id → event.id |
FK | ON DELETE CASCADE |
Завершение события и финальное изображение. |
Логические межсервисные ключи, которые не являются FK в PostgreSQL:
| Поле | Источник / получатель | Комментарий |
|---|---|---|
camera_id в st-event-storage.event |
st-camera-storage.camera.id, inference, ClickHouse |
Событие хранит ID камеры как прикладную ссылку; FK между БД не объявлен. |
message_uuid |
inference/NRI → st-event-storage → ClickHouse/reporting |
Основной идентификатор события в обмене, поиске, отчётах и проверках доставки. |
comments_thread_id |
st-event-storage ↔ st-comments |
Связь с обсуждением хранится прикладным ID, без FK между БД. |
protobuf_bytes / protobuf_bytes_hash_md5 |
st-camera-storage → inf-load-balancer |
Runtime-представление камеры для быстрой доставки конфигурации инференсу. |
violation_event_id / pk_kot_status |
st-event-storage ↔ svr-severstal-integration ↔ ПК-КОТ |
Связь события BOX5-DIT-MGSN с отраслевой классификацией и статусом отправки в ПК-КОТ. |
4.3. Связи между таблицами¶
Ниже показана упрощённая ER-схема ключевого контура. Она не заменяет полный реестр таблиц, но отражает связи, от которых зависит восстановление событий вместе с медиа, объектами детекции, классификацией и пользователями.
Исходный Mermaid-код схемы: В7-MER-002. 4.3. Связи между таблицами.
Связи между доменами строятся через события и зеркала данных:
st-camera-storage— владелец камер, объектов, зон и presets; downstream БД хранят локальные копии камер и зон для автономной работы.st-event-storage— владелец реляционной записи события; ClickHouse хранит денормализованные витрины и индексы для быстрого чтения.- MinIO и файловые каталоги не имеют FK, но связаны с PostgreSQL полями
file,preview,video_file,report_path,name_on_disk. - Redis-ключи не участвуют в ER-схеме: это кэши, locks, очереди и временные объекты, которые восстанавливаются иначе, чем PostgreSQL/ClickHouse/MinIO.