Bronze слой
Слой Bronze содержит две различные схемы данных, каждая из которых обслуживает разные аспекты телематики и платформы бизнес-аналитики:
raw_business_data - содержащую таблицы, атрибуты и значения, связанные с бизнес-информацией, такими как транспортные средства, сотрудники, геозоны, добавленные пользователями, и т.д.
raw_telematics_data - содержащую таблицы, атрибуты и значения, связанные с телематическими данными, передаваемыми от устройств под наблюдением, такими как местоположения, входы, выходы и события.
Каждая схема оптимизирована для своей области данных и шаблонов доступа, обеспечивая всестороннее покрытие оперативных, телематических и задач управления активами.
raw_business_data structure
raw_business_data structureЭта схема содержит более 40 тщательно подобранных таблиц для охвата различных бизнес-аспектов и сценариев использования. Эти таблицы представляют ваши основные бизнес-объекты, организационную структуру и операционные данные.
Интерактивная диаграмма схемы raw_business_data доступна на dbdiagram.io: https://dbdiagram.io/d/V3-bronze-layer-68ecfd1c2e68d21b4131089a
Ниже приведены детали схемы raw business data.
Частота обновления
Данные в этой схеме синхронизируются с основной БД. Обновления происходят инкрементально по мере внесения изменений в исходную базу MySQL, обычно менее чем через 5 минут после изменения в источнике.
description_parameters
description_parametersСистема включает справочные данные для стандартизации значений по всей базе данных:
Определения типов
Стандартные типы сущностей
vehicle_type: car, truck, bus
Коды статусов
Значения статусов задач и системы
tasks_status: unassigned, assigned, done
Определения единиц
Единицы измерения для датчиков
units_type: liter, gallon, celsius
Классификации сущностей
Категории бизнес-сущностей
entities_type: place, task, customer
Ключевые таблицы по категориям
Таблицы в raw_business_data схеме организованы по функциональным категориям для удобной навигации. В таблице ниже подведены итоги ключевых таблиц по их бизнес-назначению:
Основные бизнес-сущности
users
Описание: Учетные записи пользователей, содержащие информацию профиля, принадлежность к компании, настройки локализации (часовой пояс, локаль) и иерархические связи через master_id для многоуровневых структур аккаунтов
Ключевые поля
- user_id - Уникальный идентификатор пользователя
- company_label - Название компании, связанной с пользователем
- first_name - Имя пользователя
- last_name - Фамилия пользователя
- middle_name - Отчество пользователя
- locale - Языковые настройки пользователя
- timezone_label - Часовой пояс в формате IANA
- master_id - Основной идентификатор пользователя (если текущий является подчинённым)
- registration_datetime - Дата и время регистрации в системе
- birth_date - Дата рождения пользователя
Связи
Родительский пользователь через master_id, связанный с employees, departments, places, tasks через user_id
Особые примечания
Центральная сущность, связывающая организационные данные; master_id обеспечивает иерархии пользователей для многоуровневых структур аккаунтов
employees
Описание: Записи сотрудников и водителей, используемые для представления людей, работающих в организации, включая персональную информацию, данные о правах, назначение в отделы, аппаратные ключи для идентификации iButton/RFID и данные о местоположении с поддержкой геозон
Ключевые поля
- employee_id - Идентификатор сущности сотрудника
- user_id - Идентификатор сущности пользователя
- object_id - Идентификатор сущности object
- department_id - Идентификатор отдела, в который назначен сотрудник
- first_name - Атрибут first_name таблицы employees
- last_name - Атрибут last_name таблицы employees
- middle_name - Атрибут middle_name таблицы employees
- driver_license_number - Номер водительского удостоверения
- driver_license_categories - Категории водительских прав
- driver_license_issue_date - Дата выдачи водительского удостоверения
- driver_license_valid_till - Дата, до которой действительны права
- hardware_key - Аппаратный ключ
- email - Электронная почта сотрудника
- phone_number - Телефон сотрудника без знака "+"
- address - Адрес местоположения
- personnel_number - Табельный номер сотрудника/водителя
- citizen_id_number - Номер социального страхования
- latitude - Местоположение, связанное с этим сотрудником
- longitude - Местоположение, связанное с этим сотрудником
- radius - Местоположение, связанное с этим сотрудником, в метрах
- fuel_consumption - Атрибут fuel_consumption таблицы employees
- fuel_cost - Атрибут fuel_cost таблицы employees
- is_deleted - Атрибут is_deleted таблицы employees
Связи
Связи с users, departments, objects (назначенный трекер), отслеживается в driver_history и checkins
Особые примечания
Аппаратный ключ обеспечивает идентификацию водителя через iButton или RFID; поддерживает геозоны с latitude, longitude, radius поля
departments
Описание: Организационные подразделения с географическими данными (широта, долгота, радиус), позволяющие аналитике на основе геозон для отчетности на уровне отделов и привязки сотрудников к местоположению
Ключевые поля
- department_id - Идентификатор сущности отдела
- user_id - Идентификатор сущности пользователя
- department_label - Атрибут department_label таблицы departments
- latitude - Местоположение, связанное с этим отделом
- longitude - Местоположение, связанное с этим отделом
- radius - Размер геолокации в метрах
- address - Атрибут address таблицы departments
Связи
Связывает сотрудников с организационной структурой через department_id
Особые примечания
Поля местоположения поддерживают аналитику на основе геозон для отчетности на уровне отделов
Отслеживание и мониторинг
devices
Описание: Реестр физических трекеров с аппаратными идентификаторами (IMEI), информацией о SIM-карте, статусом сетевого соединения (уровень сигнала, роуминг, оператор) и списком назначений статусов для управления жизненным циклом устройства
Ключевые поля
- device_id - Идентификатор устройства
- owner_id - Идентификатор владельца устройства в аккаунте, в котором был добавлен маячок
- device_imei - IMEI устройства
- phone - Номер SIM-карты устройства
- status_listing_id - Идентификатор статуса устройства
- network_label - Название сети, к которой подключена SIM-карта
- signal_level - Уровень сигнала устройства
- has_roaming - Флаг наличия роуминга
- is_sim_blocked - Флаг блокировки SIM-карты
- created_at - Дата и время создания записи
Связи
Основная сущность, связывающая с objects, models, sensor_description, counters; owner_id references users.user_id
Особые примечания
Вся телематическая информация в raw_telematics_data схеме ссылается на эту таблицу через device_id
objects
Описание: Центральный реестр контролируемых сущностей (транспортные средства, активы, персонал), связывающий физические устройства с организационной структурой через client_id и group_id, представляющий «отслеживаемую единицу» с одним активным объектом на устройство
Ключевые поля
- object_id - Идентификатор сущности object
- client_id - Идентификатор сущности клиента
- device_id - Идентификатор сущности устройства
- object_label - Название объекта
- model - Модель устройства
- group_id - Идентификатор группы сущностей
- create_datetime - Дата и время создания новой строки на сервере
- is_deleted - Атрибут is_deleted таблицы objects
- is_clone - Признак клона
Связи
Центральный узел, связывающий устройства с пользователями (client_id), данными транспортного средства, историей трекинга, задачами и правилами
Особые примечания
Представляет «отслеживаемую единицу» в системе; один объект на устройство в активном использовании
models
Описание: Центральный реестр контролируемых сущностей (транспортные средства, активы, персонал), связывающий физические устройства с организационной структурой через client_id и group_id, представляющий «отслеживаемую единицу» с одним активным объектом на устройство
Ключевые поля
- model_id - Идентификатор модели сущности
- model - Атрибут model таблицы models
- vendor - Название компании, выпустившей трекер
- alternative_label - Атрибут alternative_label таблицы models
- analog_amount - Количество аналоговых входов трекера
- digital_amount - Количество дискретных входов трекера
- outputs_amount - Количество дискретных выходов трекера
- has_battery_level - Определяет, передаёт ли трекер показания заряда батареи
- has_altitude - Определяет, передаёт ли трекер высоту
- has_phone - Есть ли SIM-карта?
- has_gsm_level - Может ли трекер передавать уровень GSM-сигнала?
- has_gsm_name - Может ли трекер передавать имя GSM-сети или код оператора (MCC + MNC)?
- has_gsm_roaming - Может ли трекер передавать статус роуминга?
- has_detach_button - Есть ли у трекера датчик отсоединения?
- type_output_control - Профиль управления выходами трекера
- type_special_control - Содержит специализированные настройки и функциональные модули для отдельных моделей устройств, например режим опасного вождения (hbm_telfm) для оборудования Teltonika
- is_clone - Является ли модель клоном другой модели?
Содержимое
Булевы флаги возможностей указывают, какие поля данных доступны для этого типа устройства
Особые примечания
Используйте флаги возможностей для определения допустимых датчиков и входов при запросе телематических данных
sensor_description
Описание: Полная конфигурация датчиков, связывающая входы устройства с бизнес-логикой, включая сопоставления входов, единицы измерения, коэффициенты преобразования (множитель/делитель), калибровочные таблицы для датчиков топлива, пороги точности и логику группировки для агрегированных показаний датчиков
Ключевые поля
- sensor_id - Идентификатор сущности датчика
- device_id - Идентификатор сущности устройства
- sensor_label - Название датчика для интерфейса
- input_label - Название поля сообщения (атрибута), из которого берутся данные датчика. Если равно "input_status", это дискретный датчик
- sensor_type - Тип датчика
- units_type - Единицы измерения
- multiplier - Множитель — число, на которое умножается значение поля. Только для измеряющих датчиков
- divider - Делитель — число, на которое делится значение поля. Только для измеряющих датчиков
- accuracy - Указанный процент для расчёта абсолютной погрешности объёма бака. Эта погрешность используется для определения момента заправок или сливов. Применяется только к датчикам топлива
- calibration_data - Атрибут calibration_data таблицы sensor_description
- input_id - Номер входа для дискретного датчика
- group_id - Датчики одного типа с одинаковыми group_id и source_id считаются принадлежащими одной группе. Их данные суммируются или усредняются в зависимости от значения group_type. Это требуется для агрегированных датчиков. Используется в измеряющих датчиках
- group_type - 0 - суммировать значения датчиков в группе, 1 - усреднять
- sensor_units - Название единицы, введённое пользователем, если units_type=0 (пользовательская)
- parameters - Необязательный объект с дополнительными параметрами parent_ids - необязательный массив parent_ids для составного датчика. volume - double. Необязательно. Объём для составного датчика. parent_ids - необязательно. int array. Массив parent_ids для составного датчика. volume - необязательно. Double. Объём для составного датчика. min - необязательно. Double. Минимальное допустимое сырое значение для датчика. max - необязательно. Double. Максимальное допустимое сырое значение для датчика. max_lowering_by_time - необязательно. Double. Максимально допустимое снижение значения в час. max_lowering_by_mileage - необязательно. Double. Максимально допустимое снижение значения на 100 км. ignore_drains_in_move - необязательно. Boolean. По умолчанию false. Если true, сливы топлива не будут детектироваться во время движения. ignore_refuels_in_move - необязательно. Boolean. По умолчанию false. Если true, заправки не будут детектироваться во время движения. refuel_gap_minutes - необязательно. Integer. По умолчанию 5. Время в минутах после начала движения, в течение которого заправки будут детектироваться во время движения. custom_field_name - необязательно. Boolean. По умолчанию false. Параметр определяет, было ли поле input_name введено пользователем как пользовательское значение. Имеет смысл только если модель трекера поддерживает возможность has_custom_fields
Связи
Связывает входы устройства (из raw_telematics_data.inputs) с бизнес-логикой через device_id и input_label matching
Особые примечания
calibration_data (JSONB) хранит специфичные для датчика калибровочные таблицы для датчиков уровня топлива; multiplier и divider преобразовать сырые значения в единицы
Управление активами
vehicles
Описание: Полный реестр транспортных средств, содержащий спецификации (габариты, вес, вместимость), документацию (VIN, регистрация, страхование), эксплуатационные параметры (расход топлива, объём бака) и текущее назначение трекера через object_id для управления парком и отслеживания соответствия требованиям
Ключевые поля
- vehicle_id - Идентификатор сущности транспортного средства
- user_id - Идентификатор сущности пользователя
- object_id - Идентификатор сущности object
- garage_id - Идентификатор гаража
- vehicle_label - Атрибут vehicle_label таблицы vehicles
- registration_number - Регистрационный номер / номерной знак транспортного средства
- vin - Атрибут vin таблицы vehicles
- manufacture_year - Атрибут manufacture_year таблицы vehicles
- fuel_type - Атрибут fuel_type таблицы vehicles
- fuel_cost - Атрибут fuel_cost таблицы vehicles
- fuel_tank_volume - Атрибут fuel_tank_volume таблицы vehicles
- max_speed - Атрибут max_speed таблицы vehicles
- model - Атрибут model таблицы vehicles
- color - Атрибут color таблицы vehicles
- trailer - Атрибут trailer таблицы vehicles
- additional_info - Атрибут additional_info таблицы vehicles
- vehicle_type - Атрибут vehicle_type таблицы vehicles
- vehicle_subtype - Атрибут vehicle_subtype таблицы vehicles
- vehicle_status_id - Идентификатор статуса транспортного средства
- chassis_number - Атрибут chassis_number таблицы vehicles
- frame_number - Атрибут frame_number таблицы vehicles
- trailer_reg_number - Атрибут trailer_reg_number таблицы vehicles
- payload_weight - Атрибут payload_weight таблицы vehicles
- payload_height - Атрибут payload_height таблицы vehicles
- payload_length - Атрибут payload_length таблицы vehicles
- payload_width - Атрибут payload_width таблицы vehicles
- passenger_capacity - Максимальное количество пассажиров
- gross_weight - Атрибут gross_weight таблицы vehicles
- standard_fuel_consumption - Нормальный средний расход топлива в литрах на 100 км
- fuel_grade - Атрибут fuel_grade таблицы vehicles
- wheel_arrangement - Атрибут wheel_arrangement таблицы vehicles
- tyre_size - Размеры транспортного средства: габариты и размер колёс
- tyres_number - Количество колес
- liability_insurance_policy_number - Атрибут liability_insurance_policy_number таблицы vehicles
- liability_insurance_valid_till - Дата до которой действует страховка гражданской ответственности
- free_insurance_policy_number - Атрибут free_insurance_policy_number таблицы vehicles
- free_insurance_valid_till_date - Дата до которой действует дополнительная страховка
Связи
Связи с objects (текущий трекер), garages (место обслуживания), vehicle_service_tasks; отслеживается в vehicle_trackers_history
Особые примечания
Поля физических размеров (payload_length, payload_width, payload_height, gross_weight) поддерживают аналитику планирования загрузок; даты страхования обеспечивают отслеживание соответствия требованиям
garages
Описание: Места сервисного обслуживания и техобслуживания с географическими координатами (широта, долгота, радиус), контактной информацией для механиков и диспетчеров, позволяющие детектировать посещения сервисов по геозонам и проводить анализ близости
Ключевые поля
- garage_id - Идентификатор гаража
- user_id - Идентификатор сущности пользователя
- latitude - Объект местоположения
- longitude - Объект местоположения
- radius - Размер геолокации в метрах
- address - Объект местоположения
- organization_label - Идентификатор депо
- mechanic_name - Имя механика
- dispatcher_name - Имя диспетчера
Связи
Используется в ссылках vehicles.garage_id для назначения места обслуживания
Особые примечания
Поля местоположения позволяют детектировать посещения сервисов по геозонам и проводить анализ близости
vehicle_service_tasks
Описание: Отслеживание графика обслуживания и истории сервисов с несколькими типами триггеров (по дате, пробегу, моточасам), периодичностью повторяющихся задач, много канальными уведомлениями (email, SMS, push) и разграничением планового (is_repeat) и внепланового обслуживания
Ключевые поля
- service_task_id - Идентификатор сущности сервисной задачи
- vehicle_id - Идентификатор сущности транспортного средства
- description - Атрибут description таблицы vehicle_service_tasks
- status - Значение статуса атрибута status
- cost - Атрибут cost таблицы vehicle_service_tasks
- start_date - Дата и время, связанные с атрибутом start_date
- end_date - Дата и время, связанные с атрибутом end_date
- completion_date - Дата и время, связанные с атрибутом completion_date
- predicted_datetime - Дата и время, связанные с атрибутом predicted_datetime
- mileage_limit - Атрибут mileage_limit таблицы vehicle_service_tasks
- engine_hours_limit - Атрибут engine_hours_limit таблицы vehicle_service_tasks
- start_mileage - Атрибут start_mileage таблицы vehicle_service_tasks
- start_engine_hours - Атрибут start_engine_hours таблицы vehicle_service_tasks
- mileage_notification_interval - Атрибут mileage_notification_interval таблицы vehicle_service_tasks
- engine_hours_notification_interval - Атрибут engine_hours_notification_interval таблицы vehicle_service_tasks
- date_notification_interval - Преобразование целого числа N в N дней
- mileage_repeat_interval - Атрибут mileage_repeat_interval таблицы vehicle_service_tasks
- engine_hours_repeat_interval - Атрибут engine_hours_repeat_interval таблицы vehicle_service_tasks
- date_repeat_interval - Преобразование целого числа N в N дней
- notification_emails - Атрибут notification_emails таблицы vehicle_service_tasks
- notification_sms_phone_numbers - Атрибут notification_sms_phone_numbers таблицы vehicle_service_tasks
- is_notification_push_enabled - Атрибут is_notification_push_enabled таблицы vehicle_service_tasks
- completion_mileage - Атрибут completion_mileage таблицы vehicle_service_tasks
- completion_engine_hours - Атрибут completion_engine_hours таблицы vehicle_service_tasks
- is_repeat - Атрибут is_repeat таблицы vehicle_service_tasks
- is_unplanned - Атрибут is_unplanned таблицы vehicle_service_tasks
- comment - Атрибут comment таблицы vehicle_service_tasks
Содержимое
Поддерживает три типа триггеров: по дате, по пробегу, по моточасам; настройки уведомлений для email, SMS, push
Особые примечания
is_repeat и поля интервалов позволяют задавать повторяющиеся графики обслуживания; is_unplanned различает плановое и реактивное обслуживание
Местоположение и маршрутизация
zones
Описание: Геозоны, определяющие виртуальные периметры с использованием окружностей или полигонов для мониторинга событий въезда и выезда транспортных средств/активов, поддерживающие автоматизацию на основе правил и аналитику местоположения с цветовой кодировкой для визуального различения
Ключевые поля
- zone_id - Идентификатор сущности зоны
- client_id - Идентификатор сущности клиента
- zone_label - Атрибут zone_label таблицы zones
- zone_type - Атрибут zone_type таблицы zones
- latitude - Необязательный объект, ограничивающий прямоугольник, который может полностью содержать возвращаемый результат
- longitude - Необязательный объект, ограничивающий прямоугольник, который может полностью содержать возвращаемый результат
- circle_center_latitude - Атрибут circle_center_latitude таблицы zones
- circle_center_longitude - Атрибут circle_center_longitude таблицы zones
- radius - Размер геолокации в метрах
- address - Атрибут address таблицы zones
- color - Атрибут color таблицы zones
Содержимое
Типы зон включают circle, polygon (определяется через geofence_points), и специальные классификации зон
Связи
Используется в ссылках rules2zones, users2zones; вершины полигона хранятся в geofence_points
Особые примечания
Функции PostGIS можно использовать для проверки попадания точки в полигон при сложном анализе геозон
places
Описание: Точки интереса с географическими координатами, определением радиуса и расширяемой поддержкой пользовательских полей для хранения контактной информации клиента и данных, специфичных для бизнеса, обеспечивая интеграцию CRM/ERP через external_id и создание отчетов на основе местоположения
Ключевые поля
- place_id - Идентификатор сущности place
- user_id - Идентификатор сущности пользователя
- place_label - Атрибут place_label таблицы places
- latitude - Объект местоположения
- longitude - Объект местоположения
- radius - Размер геолокации в метрах
- address - Атрибут address таблицы places
- description - Атрибут description таблицы places
- external_id - Идентификатор для интеграции с внешними системами (CRM)
- custom_fields - Дополнительные поля
- assigned_datetime - Дата и время назначения точки интереса пользователю
Связи
Расширяется значениями пользовательских полей через places_text_fields, places_decimal_fields, places_bigint_fields, places_longtext_fields, places_linked_entity_fields
Особые примечания
custom_fields JSONB обеспечивает быстрый доступ; связанные таблицы позволяют фильтровать и сортировать по пользовательским атрибутам
geofence_points
Описание: Упорядоченные координаты вершин (поле number определяет последовательность), задающие границы полигона для сложных форм геозон, обеспечивая точные географические периметры помимо простых круговых зон, используются вместе с PostGIS ST_MakePolygon для геометрических операций
Ключевые поля
- zone_id - Идентификатор зоны, к которой прикреплена эта запись формы
- number - Порядковый номер
- latitude - Местоположение
- longitude - Местоположение
Связи
Несколько записей на zone_id определяют границы полигона; number поле определяет порядок вершин
Особые примечания
Запрос с ORDER BY number чтобы восстановить путь полигона; используется вместе с PostGIS ST_MakePolygon для геометрических операций
Управление задачами и рабочими процессами
tasks
Описание: Назначения работ с проверкой местоположения (широта, долгота, радиус), окон времени (time_from, time_to), требованиями к времени пребывания (stay_duration_minutes, arrival_duration_minutes), иерархической структурой через parent_task_id и отслеживанием статусов для управления полевыми сервисами и доставкой
Ключевые поля
- task_id - Идентификатор сущности задачи
- user_id - Идентификатор сущности пользователя
- object_id - Идентификатор сущности object
- parent_task_id - Идентификатор родительской сущности задачи
- task_label - Атрибут task_label таблицы tasks
- status - Значение статуса атрибута status
- task_type - Тип задачи: task, route или checkpoint
- latitude - Атрибут latitude таблицы tasks
- longitude - Атрибут longitude таблицы tasks
- radius - Размер геолокации в метрах
- arrival_datetime - Когда трекер прибыл в зону задачи. ИГНОРИРУЕТСЯ при создании/обновлении
- created_at - Атрибут created_at таблицы tasks
- status_change_datetime - Дата и время обновления задачи
- time_from - Дата и время, соответствующие атрибуту time_from
- time_to - Дата и время, соответствующие атрибуту time_to
- stay_duration - Атрибут stay_duration таблицы tasks
- stay_duration_minutes - Продолжительность визита. Время, которое мобильный работник должен провести на месте назначения, чтобы успешно завершить задачу. Несколько визитов суммируются
- arrival_duration_minutes - Игнорировать случайные визиты короче указанной продолжительности. При расчете минимальной продолжительности визиты короче заданной будут игнорироваться
- max_delay_minuts - Допустимая опоздание. Максимальное время, на которое сотрудник может опоздать. Любая задача, выполненная в этот период, будет помечена как «опоздавшая»
- is_stay_control_enabled - Атрибут is_stay_control_enabled таблицы tasks
- address - Атрибут address таблицы tasks
- description - Атрибут description таблицы tasks
- custom_fields - Атрибут custom_fields таблицы tasks
- external_id - Идентификатор внешней сущности
- order_sort - Атрибут order_sort таблицы tasks
- created_by - Источник созданной задачи
Содержимое
Поддерживает иерархические задачи через parent_task_id; окна времени определяются с помощью time_from/time_to; проверка геозоны с местоположением и радиусом
Связи
Связи с forms (сбор данных), task_history (изменения статусов), objects (назначенный трекер)
Особые примечания
stay_duration и arrival_duration_minutes включает мониторинг соответствия для задач доставки и сервисного обслуживания
forms
Описание: Конфигурируемые формы сбора данных для фиксации структурированной информации при выполнении задачи или при чекине в мобильном приложении, с полями и значениями, хранящимися в формате JSON, опциональной проверкой местоположения (is_submission_in_zone) и обязательными требованиями по отправке при прикреплении к задачам
Ключевые поля
- form_id - Идентификатор сущности формы
- task_id - Идентификатор задачи, к которой прикреплена эта форма
- object_id - Идентификатор сущности object
- form_label - Метка формы, заданная пользователем
- поля - Если true, форму можно отправлять только в зоне задачи
- values - Карта с идентификаторами полей в качестве ключей и объектами field_value в качестве значений. Ключ используется для связывания поля и его соответствующего значения
- submitted_at - Дата, когда значения формы были в последний раз отправлены
- submission_latitude - Местоположение, в котором значения формы были в последний раз отправлены
- submission_longitude - Местоположение, в котором значения формы были в последний раз отправлены
- submission_address - Местоположение, в котором значения формы были в последний раз отправлены
- is_submission_in_zone - Если true, форму можно отправлять только в зоне задачи
- description - Дата создания этой формы (или прикрепления к задаче)
- created_at - Дата создания этой формы (или прикрепления к задаче)
Содержимое
поля определяет структуру формы (JSON); values содержит отправленные данные (JSON)
Связи
Связи с tasks (связанный заказ на работу), objects (отправитель), ссылается в checkins
Особые примечания
Флаг проверки местоположения is_submission_in_zone активирует правила отправки формы на основе геозон
checkins
Описание: Записи посещаемости и активности на основе местоположения, отправляемые через мобильное приложение, отслеживающие планируемые и фактические времена прибытия (planned_datetime vs actual_datetime) с географическими координатами и измерениями точности местоположения (radius) для отчетности по пунктуальности
Ключевые поля
- checkin_id - Идентификатор сущности чекина
- employee_id - Идентификатор сущности сотрудника, также является идентификатором для водителей
- object_id - Устройство сотрудника
- form_id - Идентификатор сущности формы
- user_id - Пользователь сотрудника
- planned_datetime - Время устройства, когда был выполнен чекин
- actual_datetime - Время сервера, когда запрос/сообщение было обработано
- latitude - Местоположение, в котором были отправлены чекины
- longitude - Местоположение, в котором были отправлены чекины
- radius - Погрешность определения позиции в точке в метрах
- address - Адрес чекина
- comment - Атрибут comment таблицы checkins
Связи
Соединяет сотрудников с формами и местами; отслеживает отклонения от планового графика
Особые примечания
Временная разница между planned_datetime и actual_datetime позволяет формировать отчеты по пунктуальности; radius определяет допустимую погрешность местоположения
task_history
Описание: Полная история событий жизненного цикла задачи, фиксирующая все изменения статусов, назначения, обновления и модификации полей с временными метками (event_datetime), указанием пользователя и типами активности (create, update, assign, status_change), хранящимися в поле payload для анализа соответствия и рабочих процессов
Ключевые поля
- task_history_id - Идентификатор сущности истории задач
- task_id - Идентификатор сущности задачи
- user_id - Идентификатор сущности пользователя
- activity - Операция, которая произошла. Может быть «create», «update», «assign» или «status_change»
- event_datetime - Дата и время события
- payload - Зависит от операции. Как правило, содержит поля, которые были изменены в ходе операции
Содержимое
Типы активности определены в description_parameters; payload содержит детали, специфичные для события (текст)
Особые примечания
Необходимо для анализа завершения задач, отчетности по переходам статусов и отслеживания активности пользователей
Правила и автоматизация
rules
Описание: Правила обнаружения событий с настраиваемыми условиями срабатывания (превышение скорости, нарушение геозоны, пороги датчиков, время простоя) хранятся в parameters (JSONB), и многоканковые настройки уведомлений (alert_email, alert_sms, alert_phone, is_push_enabled) для автоматического мониторинга и оповещений на основе данных устройства и сервера
Ключевые поля
- rule_id - Идентификатор сущности правила
- object_id - Идентификатор сущности object
- client_id - Идентификатор сущности клиента
- event_type - Атрибут event_type таблицы rules
- event_label - Атрибут event_label таблицы rules
- event_group - Атрибут event_group таблицы rules
- description - Атрибут description таблицы rules
- parameters - Параметры события. Для получения дополнительной информации о доступных параметрах смотрите Navixy API docs.
- alert_email - Почта для уведомлений
- alert_sms - Номера телефонов для SMS-уведомлений
- alert_phone - Телефоны для голосовых звонков
- is_push_enabled - Если true, push-уведомления доступны
- created_at - Атрибут created_at таблицы rules
- is_deleted - Атрибут is_deleted таблицы rules
- maximum - Ограничения, применяемые к различным правилам. Например, для правила простоя с работающим двигателем в минутах
- event_comment1 - Атрибут event_comment1 таблицы rules
- event_comment2 - Атрибут event_comment2 таблицы rules
Содержимое
Параметры правила (JSONB) определяют условия срабатывания; поддерживаются уведомления по электронной почте, SMS, телефону и push
Связи
Связи с объектами через rules2objects, с зонами через rules2zones
Особые примечания
event_type описывает конкретный сценарий мониторинга (превышение скорости, нарушение геозоны, порог датчика); maximum поле позволяет агрегировать события для оповещений на основе порогов
rules2objects
Описание: Отношение «многие-ко-многим», связывающее правила с мониторируемыми объектами с возможностью настройки параметров для каждого объекта через object_params (JSONB), позволяя задавать разные значения порогов (например, скоростные лимиты) для каждого транспортного средства или актива в рамках одного правила
Ключевые поля
- rule_id - Идентификатор сущности правила
- object_id - Идентификатор сущности object
- param_group_number - Атрибут param_group_number таблицы rules2objects
- object_params - Атрибут object_params таблицы rules2objects
Содержимое
object_params (JSONB) позволяет настраивать правило для каждого объекта (например, разные скоростные лимиты для каждого транспортного средства)
Особые примечания
Отношение «многие-ко-многим» позволяет одному правилу мониторить несколько объектов с разными параметрами
rules2zones
Описание: Отношение «многие-ко-многим», связывающее правила с геозонированными зонами, позволяющее одному правилу отслеживать события входа/выхода в нескольких географических областях для сложных пространственных сценариев мониторинга
Ключевые поля
- rule_id - Идентификатор сущности правила
- zone_id - Идентификатор сущности зоны
Особые примечания
Отношение «многие-ко-многим» позволяет мультизональный мониторинг для одного правила (например, оповещение при входе в любую из нескольких запрещенных зон)
Статус и категоризация
statuses
Описание: Пользовательские определения статусов в списках статусов, включая свойства отображения (color для отображения на сайте, order_sort для позиционирования) используемые для представления состояний устройства или сотрудника с поддержкой мягкого удаления через флаг is_deleted
Ключевые поля
- status_id - Идентификатор сущности статуса
- listing_id - Идентификатор сущности списка
- status_label - Значение статуса атрибута status_label
- color - Цвет, используемый для отображения на сайте
- order_sort - Позиция сортировки в списке статусов
- is_deleted - Атрибут is_deleted таблицы statuses
Связи
Группы статусов организованы через listing_id (ссылается на status_listings); используется в status_history
Особые примечания
order_sort определяет последовательность отображения; color позволяет визуально различать в отчетах
status_listings
Описание: Наборы статусов, контролирующие, какие значения статусов доступны для устройств или сотрудников, с флагами разрешений (is_supervisor_controlled, is_employee_controlled), определяющими, могут ли супервайзеры, сотрудники или оба изменять значения статусов
Ключевые поля
- status_listing_id - Идентификатор сущности списка статусов
- user_id - Идентификатор сущности пользователя
- status_listing_label - Значение атрибута status_listing_label
- is_supervisor_controlled - Если true, супервайзеры могут менять рабочий статус, например, используя мобильное приложение мониторинга
- is_employee_controlled - Если true, сотрудники могут менять свой рабочий статус, например, используя мобильное приложение отслеживания
- is_deleted - Атрибут is_deleted таблицы status_listings
Связи
Используется в ссылках devices.status_listing_id и statuses.listing_id
Особые примечания
Флаги управления определяют, кто может менять статусы: только супервайзер, самостоятельное изменение сотрудником или оба
status_history
Описание: Журнал аудита всех переходов статусов устройств с временными метками (changed_datetime на устройстве, server_datetime на сервере), указанием пользователя (updated_by) и фиксацией местоположения (latitude, longitude, address), позволяющий проводить географический анализ изменений статусов и отчетность по местам начала/окончания рабочего дня
Ключевые поля
- status_history_id - Идентификатор сущности истории статусов
- device_id - Идентификатор сущности устройства
- old_status_id - Идентификатор старого статуса
- new_status_id - Идентификатор нового статуса
- updated_by - Дата и время, связанные с атрибутом updated_by
- changed_datetime - Дата и время присвоения нового статуса на устройстве
- server_datetime - Дата и время присвоения нового статуса на сервере
- latitude - Определение местоположения устройств при изменениях статусов
- longitude - Определение местоположения устройств при изменениях статусов
- address - Определение местоположения устройств при изменениях статусов
Связи
Связи с devices, statuses (старый и новый), description_parameters (для updated_by role)
Особые примечания
Фиксация местоположения позволяет проводить географический анализ переходов статусов; полезно для отчётности по месту начала/окончания рабочего дня
tags
Описание: Метки категоризации, задаваемые пользователем, с цветовой кодировкой, позволяющие быстро фильтровать и искать по нескольким типам сущностей (places, geofences, employees, tasks, trackers, vehicles) для гибкой организации
Ключевые поля
- tag_id - Идентификатор сущности тега
- user_id - Идентификатор сущности пользователя
- tag_label - Атрибут tag_label таблицы tags
- color - Атрибут color таблицы tags
Связи
Применяется к сущностям через tag_links; область видимости определяется пользователем
Особые примечания
Гибкая система категоризации, поддерживающая несколько тегов для одной сущности
tag_links
Описание: Полиморфная таблица отношений, связывающая теги с любым типом сущности через entity_type и entity_id, с полем ordinal для управления порядком отображения, обеспечивая гибкую многосущностную маркировку
Ключевые поля
- tag_id - Идентификатор сущности тега
- entity_type - Атрибут entity_type таблицы tag_links
- entity_id - Идентификатор сущности
- ordinal - Атрибут ordinal таблицы tag_links
Содержимое
entity_type идентифицирует таблицу (vehicle, employee, task и т.д.); ordinal определяет порядок отображения
Особые примечания
Полиморфная связь позволяет присваивать теги разным типам сущностей
Группы и иерархия
groups
Описание: Организационная структура группировки для трекеров, обеспечивающая визуальную организацию в пользовательском интерфейсе с настраиваемыми цветами (group_color) и иерархическим управлением по типу папок, в настоящее время выполняющая чисто визуальную функцию
Ключевые поля
- group_id - Группа трекеров (связана через objects.group_id). Разделение на группы видно в списке маяков, например
- client_id - Идентификатор сущности клиента
- group_label - Название группы, заданное пользователем, 1–60 печатных символов, например «Employees"
- group_color - Цвет группы в веб-формате (без #), например "FF6DDC". Определяет цвет маркеров трекеров на карте
Связи
Используется в ссылках objects.group_id; владение клиентом через client_id (ссылается на users)
Особые примечания
Обеспечивает организацию сущностей мониторинга по принципу папок для отчетности и прав доступа
groups_objects
Описание: Отношение «многие-ко-многим» между группами и объектами с использованием составного первичного ключа (groups_client_id, objects_client_id), позволяющее объектам одновременно принадлежать нескольким группам для гибкой организационной структуры
Ключевые поля
- groups_client_id - Идентификатор сущности клиента для групп
- objects_client_id - Идентификатор сущности клиента для объектов
Особые примечания
Позволяет объектам одновременно принадлежать нескольким группам; выполняйте запрос с обоими client_id значениями для членства в группе
Пользовательские поля и сущности
entities
Описание: Реестр типов сущностей, определяющий, какие бизнес-сущности поддерживают пользовательские поля и структуру их расположения полей (sections, field_order), хранящуюся в entity_label (JSONB), обеспечивая динамическое расширение схемы для places, tasks и других сущностей без изменений в базе данных
Ключевые поля
- entity_id - Идентификатор сущности
- user_id - Идентификатор сущности пользователя
- entity_label - id - int. Идентификатор сущности. type - enum. В настоящее время поддерживается только «place». layout - объект описывает расположение полей для сущности. sections - массив объектов. Каждый раздел может содержать одно или несколько полей. В макете должен существовать как минимум один раздел. label - строка. Название раздела. field_order - массив строк. Встроенные поля и идентификаторы пользовательских полей (в виде строк)
- builtin_type - Атрибут builtin_type таблицы entities
Связи
Используется в ссылках custom_fields чтобы определить, какие пользовательские поля применяются к каким типам сущностей
Особые примечания
builtin_type ссылки на description_parameters для системно определенных классификаций сущностей
custom_fields
Описание: Определения пользовательских полей, позволяющие динамически расширять схему для типов сущностей, с настраиваемыми типами полей (custom_field_type), правилами валидации и опциями в parameters (JSONB), и флагами обязательности (is_required) для гибкого сбора данных по places, tasks и другим сущностям
Ключевые поля
- custom_field_id - Идентификатор сущности пользовательского поля
- entity_id - Идентификатор сущности
- custom_field_label - Название поля
- custom_field_type - Тип данных в поле
- description - Описание поля
- is_required - Является ли это обязательным?
- parameters - Параметры поля
Содержимое
parameters (JSONB) хранит конфигурацию, специфичную для типа поля (правила валидации, варианты выпадающего списка и т.д.)
Связи
Определяет доступные пользовательские атрибуты для сущностей; тип поля ссылается на description_parameters
Особые примечания
Обеспечивает динамическое расширение схемы без изменений в базе данных; широко используется в places и tasks
Исторический учёт
driver_history
Описание: Полный журнал назначений сотрудников на транспортные средства с течением времени, отслеживающий переходы от old_employee_id к new_employee_id с временными метками (changed_datetime, server_datetime), данными о местоположении (latitude, longitude, address), информацией о аппаратном ключе и указанием пользователя (updated_by), позволяющий аналитику, привязанную к водителям, при смене водителей между транспортными средствами
Ключевые поля
- driver_history_id - Идентификатор сущности истории водителей
- object_id - Идентификатор сущности object
- old_employee_id - Идентификатор старой сущности сотрудника
- new_employee_id - Идентификатор новой сущности сотрудника
- hardware_key - Атрибут hardware_key таблицы driver_history
- changed_datetime - Дата и время, когда были внесены изменения в устройство
- server_datetime - Дата и время изменений, внесенных на сервере
- updated_by - Дата и время, связанные с атрибутом updated_by
- latitude - Атрибут latitude таблицы driver_history
- longitude - Атрибут longitude таблицы driver_history
- address - Атрибут address таблицы driver_history
Связи
Отслеживает назначения водителей на транспортные средства с течением времени; ссылки на employees и objects
Особые примечания
Необходимо для отчетности по конкретным водителям при смене транспортных средств; фиксация местоположения позволяет анализировать место изменения назначения
vehicle_trackers_history
Описание: Журнал аудита, отслеживающий, какие GPS-устройства (object_id) были установлены в каких автомобилях (vehicle_id) с течением времени с временными метками изменений (changed_datetime), обеспечивая точную историческую атрибуцию данных и расчет пробега при перемещении трекеров между транспортными средствами
Ключевые поля
- vehicle_tracker_history_id - Идентификатор сущности истории установки трекеров в транспортные средства
- vehicle_id - Идентификатор сущности транспортного средства
- object_id - Идентификатор сущности object
- changed_datetime - Дата и время, связанные с атрибутом changed_datetime
Связи
Отслеживает, какое GPS-устройство было установлено в каком транспортном средстве с течением времени
Особые примечания
Критично для анализа исторических данных при перемещении трекеров между транспортными средствами; обеспечивает точную атрибуцию пробега и использования
Справочные и справочные данные
description_parameters
Описание: Системные справочные данные, предоставляющие читаемые человеком метки (description) для перечисляемых целочисленных значений (key), используемых по всей базе данных, организованные по полю type (например, task_status, fuel_type, counter_type, entity_classification) для согласованного перевода значений в отчетах и интерфейсе
Ключевые поля
- key - Возможное значение атрибута
- type - Составной атрибут, состоящий из имени таблицы, за которым следует подчёркивание и имя атрибута в таблице
- description - Подразумеваемое значение атрибута
Содержимое
Предоставляет читаемые метки для кодированных значений по всей базе данных (статус задачи, типы топлива, типы счетчиков и т.д.)
Связи
Ссылается через внешние ключи из нескольких таблиц для стандартизированной категоризации
Особые примечания
Необходимо для преобразования целочисленных кодов в читаемые значения в отчетах; type группы полей, связанные перечисления
counters
Описание: Конфигурации одометра и счетчика моточасов, связывающие показания датчиков устройства (sensor_id) с измерениями расстояния или времени с коэффициентами умножения для преобразования единиц (км, мили, часы) и counter_type из description_parameters, определяющим тип измерения
Ключевые поля
- counter_id - Внутренний идентификатор
- device_id - Идентификатор сущности устройства
- counter_type - Тип счетчика
- sensor_id - Идентификатор сущности датчика
- multiplier - Коэффициент для преобразования значений в одну из метрик (км, л и т.д.)
Связи
Связывает устройства с показаниями датчиков, представляющими счетчики расстояния или времени
Особые примечания
multiplier преобразует импульсы датчика в реальные единицы (км, мили, часы); counter_type from description_parameters определяет тип измерения
device_output_name
Описание: Пользовательские метки для каналов вывода устройства, сопоставляющие числовые идентификаторы выходов (number) с именами, заданными пользователем (label), такими как "Door Lock" или "Engine Block" для удобочитаемой отчетности и анализа команд и состояний вывода устройства
Ключевые поля
- device_id - Идентификатор сущности устройства
- number - Атрибут number таблицы device_output_name
- label - Атрибут label таблицы device_output_name
Содержимое
Сопоставляет номера каналов вывода с пользовательскими именами (например, "Door Lock", "Engine Block")
Особые примечания
Обеспечивает удобочитаемую отчетность при анализе команд и состояний вывода устройства
raw_telematics_data structure
raw_telematics_data structureСхема raw_telematics_data содержит три основных типа таблиц, которые работают вместе, чтобы обеспечить всесторонние данные устройства.
Интерактивная диаграмма схемы raw_telematics_data доступна на dbdiagram.io: https://dbdiagram.io/d/v1-schema-telematics-bd-67a0acef263d6cf9a0d8e750
Ниже приведены детали схемы raw telematics data.
Ключевые таблицы по категориям
Каждая таблица служит для конкретной цели при захвате различных аспектов информации об устройстве:
tracking_data_core
Назначение: Основные данные о местоположении и движении
Ключевые поля
device_id, device_time, platform_time, latitude, longitude, speed, altitude, satellites, hdop, event_id
Индексация
Оптимизировано с индексом на (device_id, device_time)
Особые примечания
Данные о местоположении (широта и долгота) используют целочисленный формат с точностью 10⁷ для оптимальной производительности TimescaleDB Скорость также хранится в виде целого числа, поэтому её необходимо делить на 100
inputs
Назначение: Показания датчиков от устройств
Ключевые поля
input_id, device_id, device_time, sensor_name, значение
Содержимое
Аналоговые показания (уровень топлива, температура, напряжение), вычисляемые значения (обороты двигателя)
Связи
состояния
Назначение: Индикаторы состояния устройства и режимы работы
Ключевые поля
state_id, device_id, device_time, state_name, значение
Содержимое
Индикаторы режимов работы (в работе, холостой ход, выключено), статусы компонентов (зажигание, двери)
Формат значения
Булевы значения (1/0) или специальные коды статуса
Данные в этой схеме поступают напрямую от устройств с минимальной задержкой (обычно секунды). Схема оптимизирована для временных рядов с использованием TimescaleDB для эффективного хранения и извлечения.
Дополнительная информация
Проверка данных
База данных обеспечивает целостность данных с помощью нескольких механизмов:
Ограничения CHECK проверяют, что значения находятся в допустимых пределах
Внешние ключи обеспечивают согласованность отношений между таблицами
Ограничения NOT NULL гарантируют, что обязательные поля всегда содержат значения
Значения по умолчанию предоставляют запасной вариант, когда данные явно не указаны
Оптимизация запросов
Таблицы организованы с использованием специальных стратегий индексирования:
Все таблицы включают индексы по времени на
record_added_atКолонки внешних ключей имеют выделенные индексы для повышения производительности соединений
Часто используемые комбинации столбцов имеют составные индексы
TimescaleDB предоставляет специализированные индексы для запросов по временным рядам
репозиторий структура данных
репозиторий структура данныхЭта схема в настоящее время находится в разработке. Если вы заинтересованы в раннем доступе или у вас есть вопросы по этой функциональности, пожалуйста, свяжитесь с [email protected].
Схема репозиторий схема предоставляет всеобъемлющую структуру для управления организационными структурами, активами, устройствами и их взаимосвязями в мультиарендных средах. Построенная на PostgreSQL 14+ с расширением ltree, схема поддерживает иерархические организации, определение настраиваемых полей для любых типов сущностей, управление доступом на основе ролей с ограничениями на уровне объектов и полные журналы аудита с отслеживанием изменений на уровне полей. Все сущности могут быть расширены без изменений схемы, локализованы для международных развертываний и связаны через гибкие полиморфные отношения.
Схема решает сложные сценарии управления данными, включая иерархии активов автопарка на разных уровнях организации, многопользовательские SaaS-платформы, требующие изоляции данных, операции, требующие соответствия с подробными требованиями аудита, и системы, которым нужны динамические модели данных, адаптируемые через настраиваемые поля вместо миграций базы данных.
Интерактивная схемарепозиторий данных доступна на dbdiagram.io: https://dbdiagram.io/d/Navixy-Repo-data-schema-68ad788c1e7a611967a0930e
Найдите репозиторий подробности схемы ниже.
Частота обновления
Данные в репозиторий схема синхронизируется в режиме реального времени с исходными системами. Обновления происходят немедленно по мере внесения изменений, при этом журналы аудита фиксируют все модификации для соответствия требованиям и исторического анализа.
ci_base
ci_baseСхема репозиторий схема использует шаблон Single Table Inheritance для всех справочных данных через ci_base таблицу:
Схема репозиторий схема использует Single Table Inheritance шаблон для всех справочных данных через ci_base таблицу. Этот дизайн консолидирует системные словари, классификации и элементы справочников, определяемые пользователями, в одну унифицированную структуру, обеспечивая согласованность и гибкость по всей схеме.
Архитектура:
Схема ci_base таблица служит основой для всех справочных данных, используя дискриминатор поле для идентификации конкретного типа справочника. Каждый тип справочника имеет соответствующую таблицу (например, ci_device_type, ci_asset_type) которая разделяет тот же id как ci_base, создавая типобезопасное отношение наследования.
Как бизнес-сущности подключаются к ci_base:
Все бизнес-сущности в репозиторий схеме ссылаются на ci_base подтипы для определения их классификации и поведения:
organization→ ссылается наci_organization_type(который наследует отci_entity_type→ci_base)user→ ссылается наci_user_type(который наследует отci_entity_type→ci_base)device→ ссылается наci_device_typeиci_device_status(оба наследуют отci_base)asset→ ссылается наci_asset_type(который наследует отci_entity_type→ci_base)inventory→ ссылается наci_inventory_type(который наследует отci_entity_type→ci_base)asset_group→ ссылается наci_asset_group_type(который наследует отci_entity_type→ci_base)
Категории типов справочников:
Конфигурация системы
ci_module, ci_country, ci_role
Определяет модули системы, географические ссылки и роли пользователей
Определения типов сущностей
ci_entity_type, ci_device_type, ci_asset_type, ci_inventory_type, ci_organization_type, ci_user_type, ci_asset_group_type
Классифицируйте все бизнес-сущности по типу
Статус и классификация
ci_device_status, ci_asset_type_category
Отслеживайте состояния сущностей и группируйте типы в категории
Контроль доступа
ci_permission_scope
Определяет, какие разрешения могут быть предоставлены (связано с ci_module и ci_entity_type)
Связи
ci_device_relation_type
Определяет типы отношений между устройствами (master-slave, резервирование и т. д.)
Категоризация
ci_tag, ci_catalog_category
Обеспечивает гибкое тегирование и организацию каталога
Ключевые таблицы по категориям
Таблицы в репозиторий Схема организована по функциональным категориям. Описания ниже суммируют наиболее важные таблицы по их бизнес-назначению.
organization
Назначение: Управление иерархической организацией
Ключевые поля
id, parent_id, path, organization_type_id, title_en, is_active, deleted_at
Индексация
GiST-индекс на path для иерархических запросов, индексы на parent_id и organization_type_id
Особые примечания
Использует ltree для многоуровневых иерархий, наследуется от customizable_entity для поддержки настраиваемых полей
user
Назначение: Учетные записи пользователей и аутентификация
Ключевые поля
id, organization_id, user_type_id, identity_provider, identity_provider_id, full_name, is_active
Индексация
Уникальный индекс на (organization_id, identity_provider, identity_provider_id)
Особые примечания
Интеграция с внешними провайдерами идентификации (Keycloak, Auth0, Okta), наследуется от customizable_entity
device
Назначение: Физические трекинговые устройства
Ключевые поля
id, organization_id, device_type_id, status_id, hw_id, label
Индексация
Индексы на organization_id, device_type_id, status_id, hw_id
Особые примечания
Аппаратный идентификатор для отслеживания устройства, наследуется от customizable_entity для настраиваемых полей
asset
Назначение: Физические или виртуальные активы
Ключевые поля
id, organization_id, asset_type_id, label, description
Индексация
Индексы на organization_id и asset_type_id
Особые примечания
Наследуется от customizable_entity, связаны с устройствами через device_asset_link
inventory
Назначение: Записи инвентаризации и складского учета
Ключевые поля
id, organization_id, inventory_type_id, code
Индексация
Уникальный индекс на (organization_id, code)
Особые примечания
Уникальные коды в рамках организации, связаны с устройствами через device_inventory_link
asset_group
Назначение: Группировка активов с историческим отслеживанием
Ключевые поля
id, organization_id, group_type_id, title_en, description
Связи
FROM repo.asset_group AS ag JOIN repo.asset_group_item AS agi ON agi.group_id = ag.id JOIN repo.asset AS a ON a.id = agi.asset_id WHERE agi.detached_at IS NULL
Особые примечания
Членство на основе времени через asset_group_item, запрос текущих участников с помощью WHERE detached_at IS NULL
custom_field_def
Назначение: Определения и метаданные настраиваемых полей
Ключевые поля
id, organization_id, owner_entity_type_id, code, field_type, is_multi, is_required
Содержимое
Типы полей включают text, number, boolean, date, datetime, entity_ref, catalog_item_ref
Особые примечания
Обеспечивает гибкие настраиваемые поля для любого типа сущности, значения хранятся в специфичных для типа custom_field_value_* таблицах
acl_role_permission
Назначение: Управление разрешениями на основе ролей
Ключевые поля
id, role_id, permission_scope_id, target_entity_id, actions
Содержимое
Битовая маска действий (READ=1, UPDATE=2, DELETE=4, CREATE=8), разрешения, специфичные для цели или для типа сущности в целом
Связи
FROM repo.user_role AS ur JOIN repo.acl_role_permission AS rp ON rp.role_id = ur.role_id WHERE ur.user_id = $user_id
Особые примечания
Работает с user_role и acl_user_scope для определения финальных разрешений пользователя
audit_event
Назначение: Единый журнал аудита для всех изменений в системе
Ключевые поля
id, event_category, user_id, aggregate_type, aggregate_id, event_type, event_data, occurred_at
Индексация
Индексы на (user_id, occurred_at), (aggregate_type, aggregate_id, occurred_at), (event_category, occurred_at)
Особые примечания
Партицирование по occurred_at (ежемесячно), две категории: auth (аутентификация) и domain (бизнес-события), сохраняет дельты изменений полей в event_data JSONB
Связи данных
Схема репозиторий Схема реализует сложные шаблоны отношений для гибкого моделирования данных:
Иерархические структуры
Организации используют ltree-пути для эффективных деревьев запросов
Элементы справочника (
ci_base) поддерживают опциональные иерархииАвтоматическое поддержание путей через триггеры базы данных
Шаблоны наследования
Наследование таблиц:
customizable_entity→ бизнес-сущности (organization,user,device,asset,inventory,asset_group)Наследование ID:
ci_base→ таблицы типов справочниковРазличение типов через
entity_type_idидискриминаторполя
Полиморфные отношения
Некоторые таблицы используют полиморфные ссылки без ограничений внешнего ключа для максимальной гибкости:
acl_role_permission.target_entity_id→ любойcustomizable_entityacl_user_scope.target_entity_id→ любойcustomizable_entityentity_tag.entity_id→ любойcustomizable_entity
Эти отношения проверяются на уровне приложения.
Дополнительная информация
Проверка данных
Схема репозиторий Схема обеспечивает целостность данных через несколько механизмов:
Ограничения базы данных
UNIQUE-ограничения с поддержкой мягкого удаления (частичные индексы WHERE
deleted_atIS NULL)CHECK-ограничения (например,
device_relationобеспечиваетmaster_id≠slave_id)NOT NULL-ограничения для обязательных полей
ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ для меток времени и булевых флагов
Проверка на уровне приложения
Проверка типа сущности для полиморфных ссылок
Проверка каталога для ссылок на настраиваемые поля
Проверка типов настраиваемых полей
Управление массивами для полей с несколькими значениями
Оптимизация запросов
Таблицы организованы с использованием специальных стратегий индексирования:
Стандартные индексы:
Все внешние ключи имеют выделенные индексы
Временные индексы на
created_at,updated_at,deleted_atСоставные индексы для часто соединяемых колонок
Специализированные индексы:
GiST-индексы на ltree-пути для иерархических запросов
Частичные уникальные индексы с поддержкой мягкого удаления
Индексы значений настраиваемых полей для фильтрации и сортировки
Индексы событий аудита по времени + сущности для эффективного поиска
Соображения по производительности:
Рекомендуется пул соединений (PgBouncer)
Регулярное обслуживание VACUUM для больших таблиц
Возможное будущее партицирование для
deviceтаблицы поorganization_idМатериализованные представления для сложных вычислений контроля доступа
Последнее обновление
Это было полезно?