Перейти к содержанию

Раздел 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_idst-auth.user.id FK ON DELETE CASCADE История паролей удаляется вместе с пользователем.
st-camera-storage.camera.object_observation_idobject_observation.id FK ON DELETE CASCADE Камера принадлежит объекту наблюдения.
st-camera-storage.object_tree.object_idobject_observation.id FK ON DELETE RESTRICT Узел дерева нельзя удалить, пока есть зависимые связи дерева.
st-camera-storage.object_tree.parent_object_idobject_observation.id FK ON DELETE RESTRICT Родительская связь объектного дерева.
st-camera-storage.zone.camera_idcamera.id FK ON DELETE CASCADE Зоны удаляются вместе с камерой.
st-event-storage.event.image_idimage.id FK ON DELETE CASCADE Основное изображение события.
st-event-storage.event.model_idmodelinfo.id FK ON DELETE CASCADE Модель, сформировавшая событие.
st-event-storage.primaryobject.event_idevent.id FK ON DELETE CASCADE Первичные объекты входят в событие.
st-event-storage.primaryobject.bbox_idbbox.id FK ON DELETE CASCADE Координаты bbox первичного объекта.
st-event-storage.secondaryobject.primary_object_idprimaryobject.id FK ON DELETE CASCADE Вторичные объекты привязаны к первичному объекту.
st-event-storage.severstal_event_datas.violation_event_idevent.id FK + UNIQUE ON DELETE CASCADE Отраслевая классификация события; связь 1:1 с событием.
st-event-storage.eventfinish.event_idevent.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-storagest-comments Связь с обсуждением хранится прикладным ID, без FK между БД.
protobuf_bytes / protobuf_bytes_hash_md5 st-camera-storageinf-load-balancer Runtime-представление камеры для быстрой доставки конфигурации инференсу.
violation_event_id / pk_kot_status st-event-storagesvr-severstal-integration ↔ ПК-КОТ Связь события BOX5-DIT-MGSN с отраслевой классификацией и статусом отправки в ПК-КОТ.

4.3. Связи между таблицами

Ниже показана упрощённая ER-схема ключевого контура. Она не заменяет полный реестр таблиц, но отражает связи, от которых зависит восстановление событий вместе с медиа, объектами детекции, классификацией и пользователями.

erDiagram USER ||--o{ PASSWORD_HISTORY : has USER ||--o{ USER_LOGIN_LOGS : logs USER ||--o{ USER_ROLE_CONFIGS : has USERROLE ||--o{ USER_ROLE_CONFIGS : grants OBJECT_OBSERVATION ||--o{ CAMERA : owns OBJECT_OBSERVATION ||--o{ OBJECT_TREE : node CAMERA ||--o{ ZONE : has CAMERA ||--o{ CAMERA_LOCATION_INFO : located EVENT ||--o{ PRIMARYOBJECT : contains EVENT ||--|| EVENTFINISH : finishes EVENT ||--|| SEVERSTAL_EVENT_DATAS : classifies EVENT ||--o{ EVENTCONFIRMATIONLOG : audit EVENT ||--o{ EVENTPROOF : proofs IMAGE ||--o{ EVENT : main_image IMAGE ||--o{ EVENTFINISH : finish_image IMAGE ||--o{ PRIMARYOBJECT : crop BBOX ||--o{ PRIMARYOBJECT : bounds BBOX ||--o{ SECONDARYOBJECT : bounds PRIMARYCATEGORY ||--o{ PRIMARYOBJECT : category PRIMARYOBJECT ||--o{ SECONDARYOBJECT : contains SECONDARYCATEGORY ||--o{ SECONDARYOBJECT : category EVENT_KINDS ||--o{ SEVERSTAL_EVENT_DATAS : kind EVENT_KIND_SECTIONS ||--o{ SEVERSTAL_EVENT_DATAS : section RISK_WORK_AREAS ||--o{ SEVERSTAL_EVENT_DATAS : work_area RISK_DANGERS ||--o{ SEVERSTAL_EVENT_DATAS : danger TECHNICAL_BARRIERS ||--o{ SEVERSTAL_EVENT_DATAS : barrier BASIC_RULES ||--o{ SEVERSTAL_EVENT_DATAS : rule

Исходный 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.