Слой необработанных данных
Просмотрите исходные наборы данных для бизнес-сущностей, телеметрии устройств и активов/инвентаря, а также ключевые таблицы и время их обновления.
Слой Raw data содержит 3 различных схемы данных, каждая из которых обслуживает разные аспекты платформы телематики и бизнес-аналитики:
raw_business_data- содержит таблицы, атрибуты и значения, связанные с бизнес-информацией, такими как транспортные средства, сотрудники, геозоны, добавленные пользователями, и т.д.raw_telematics_data- содержит таблицы, атрибуты и значения, связанные с телематическими данными, передаваемыми от устройств под мониторингом, такими как местоположения, входы, выходы и события.repo- содержит таблицы для управления активами и инвентарём, включая настраиваемые типы активов, пользовательские поля, связи между активами и геопространственные данные для отслеживания ресурсов организации.
Каждая схема оптимизирована для своей доменной области данных и шаблонов доступа, обеспечивая всестороннее покрытие потребностей в операционном, телематическом и управлении активами.
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 - Идентификатор сущности объекта
- 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 - Идентификатор сущности объекта
- 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. Массив 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 - Идентификатор сущности объекта
- 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 - ID зоны, к которой прикреплена эта форма
- number - Порядковый номер
- latitude - Местоположение
- longitude - Местоположение
Связи
Несколько записей для zone_id определяют границы полигона; number поле определяет порядок вершин
Особые замечания
Запрос с ORDER BY number для восстановления пути полигона; используйте совместно с PostGIS ST_MakePolygon для геометрических операций
Управление задачами и рабочими процессами
tasks
Описание: Назначения заказов на работу с проверкой местоположения (latitude, longitude, radius), временными окнами (time_from, time_to), требованиями по продолжительности визита (stay_duration_minutes, arrival_duration_minutes), иерархической структурой через parent_task_id и отслеживанием статуса для управления полевыми сервисами и доставкой
Ключевые поля
- task_id - Идентификатор сущности task
- user_id - Идентификатор сущности пользователя
- object_id - Идентификатор сущности объекта
- 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 - Идентификатор сущности form
- task_id - ID задачи, к которой прикреплена эта форма
- object_id - Идентификатор сущности объекта
- form_label - Метка формы, заданная пользователем
- поля - Если true, форма может быть отправлена только в зоне задачи
- values - Отображение с ID полей в качестве ключей и объектами field_value в качестве значений. Ключ используется для связывания поля и его соответствующего значения
- submitted_at - Дата последней отправки значений формы
- submission_latitude - Местоположение, в котором значения формы были отправлены в последний раз
- submission_longitude - Местоположение, в котором значения формы были отправлены в последний раз
- submission_address - Местоположение, в котором значения формы были отправлены в последний раз
- is_submission_in_zone - Если true, форма может быть отправлена только в зоне задачи
- description - Дата создания этой формы (или прикрепления к задаче)
- created_at - Дата создания этой формы (или прикрепления к задаче)
Содержимое
поля определяет структуру формы (JSON); values содержит отправленные данные (JSON)
Связи
Связи с tasks (связанный work order), objects (отправитель), ссылается в checkins
Особые замечания
Флаг проверки местоположения is_submission_in_zone включает правила отправки форм на основе геозон
checkins
Описание: Записи о посещениях и активности на основе местоположения, отправляемые через мобильное приложение, отслеживающие запланированное и фактическое время прибытия (planned_datetime vs actual_datetime) с географическими координатами и измерениями точности местоположения (radius) для отчетности по пунктуальности
Ключевые поля
- checkin_id - Идентификатор сущности checkin
- employee_id - Идентификатор сущности сотрудника, также является идентификатором водителей
- object_id - Устройство сотрудника
- form_id - Идентификатор сущности form
- user_id - Пользователь-сотрудник
- planned_datetime - Время устройства, когда был выполнен чек-ин
- actual_datetime - Время сервера, когда запрос/сообщение было обработано
- latitude - Местоположение, в котором были отправлены чек-ины
- longitude - Местоположение, в котором были отправлены чек-ины
- radius - Ошибка позиционирования в метрах
- address - Адрес чек-ина
- comment - Атрибут comment таблицы checkins
Связи
Соединяет сотрудников с формами и местоположениями; отслеживает отклонения от запланированного расписания
Особые замечания
Временное отклонение между planned_datetime и actual_datetime позволяет формировать отчеты о пунктуальности; радиус определяет допустимую погрешность местоположения
task_history
Описание: Полный аудиторский след событий жизненного цикла задачи, фиксирующий все изменения статусов, назначения, обновления и модификации полей с отметками времени (event_datetime), указанием пользователя и типами активности (create, update, assign, status_change), хранящимися в поле payload для целей соответствия и анализа рабочих процессов
Ключевые поля
- task_history_id - Идентификатор сущности истории задач
- task_id - Идентификатор сущности task
- 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 - Идентификатор сущности rule
- object_id - Идентификатор сущности объекта
- 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) определяют условия срабатывания; поддерживаются уведомления по email, SMS, телефону и push
Связи
Связи с объектами через rules2objects, зоны через rules2zones
Особые замечания
event_type определяет конкретный сценарий мониторинга (превышение скорости, нарушение геозоны, порог датчика); maximum поле позволяет агрегировать события для оповещений на основе порогов
rules2objects
Описание: Отношение «многие ко многим», связывающее правила с мониторируемыми объектами с возможностью настройки параметров для каждого объекта через object_params (JSONB), позволяя задать различные пороговые значения (например, скоростные лимиты) для каждого транспортного средства или актива в рамках одного правила
Ключевые поля
- rule_id - Идентификатор сущности rule
- object_id - Идентификатор сущности объекта
- param_group_number - Атрибут param_group_number таблицы rules2objects
- object_params - Атрибут object_params таблицы rules2objects
Содержимое
object_params (JSONB) позволяет настраивать правило для каждого объекта (например, разные скоростные лимиты для разных транспортных средств)
Особые замечания
Отношение «многие ко многим» позволяет одному правилу мониторить несколько объектов с разными параметрами
rules2zones
Описание: Отношение «многие ко многим», связывающее правила с геозонами, что позволяет одному правилу отслеживать события входа/выхода в нескольких географических областях для сложных сценариев пространственного мониторинга
Ключевые поля
- rule_id - Идентификатор сущности rule
- zone_id - Идентификатор сущности зоны
Особые замечания
Отношение «многие ко многим» позволяет мониторить несколько зон для одного правила (например, оповестить при входе в любую из нескольких запрещенных зон)
Статус и категоризация
statuses
Описание: Пользовательские определения статусов в списках статусов, включая свойства отображения (color для отображения на сайте, order_sort для позиционирования), используемые для представления состояний устройства или сотрудника с поддержкой мягкого удаления через флаг is_deleted
Ключевые поля
- status_id - Идентификатор сущности status
- listing_id - Идентификатор сущности listing
- status_label - Значение атрибута status_label
- color - Цвет, используемый для отображения на сайте
- order_sort - Позиция сортировки в списке статусов
- is_deleted - Атрибут is_deleted таблицы statuses
Связи
Группы статусов, организованные через listing_id (ссылается на status_listings); используется в status_history
Особые замечания
order_sort определяет последовательность отображения; цвет позволяет визуально дифференцировать в отчетах
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 - Идентификатор сущности объекта
- 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 - Идентификатор сущности объекта
- 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 - Внутренний 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, value
Содержимое
Аналоговые показания (уровень топлива, температура, напряжение), вычисляемые значения (обороты двигателя)
Связи
states
Назначение: Индикаторы состояния устройства и режимы работы
Ключевые поля
state_id, device_id, device_time, state_name, value
Содержимое
Индикаторы режимов работы (работа, простои, выключено), состояния компонентов (зажигание, двери)
Формат значения
Булевы значения (1/0) или специальные коды состояния
Данные в этой схеме поступают непосредственно от устройств с минимальной задержкой (как правило — секунды). Схема оптимизирована для временных рядов с использованием TimescaleDB для эффективного хранения и выборки.
Дополнительная информация
Валидация данных
База данных обеспечивает целостность данных посредством нескольких механизмов:
CHECK ограничения проверяют, что значения находятся в допустимых пределах
Внешние ключи обеспечивают согласованность связей между таблицами
NOT NULL ограничения гарантируют, что обязательные поля всегда имеют значения
Значения по умолчанию обеспечивают запасной вариант, когда данные не предоставлены явно
Оптимизация запросов
Таблицы организованы со специфическими стратегиями индексирования:
Во всех таблицах присутствуют индексы по времени по
record_added_atКолонки внешних ключей имеют выделенные индексы для ускорения объединений
Часто используемые комбинации колонок имеют составные индексы
TimescaleDB предоставляет специализированные индексы для запросов по временным рядам
repo структура данных
repo структура данныхЭта схема в настоящее время находится в разработке. Если вы заинтересованы в раннем доступе или у вас есть вопросы по этой функциональности, пожалуйста, свяжитесь с iotquery@navixy.com.
Схема repo схема предоставляет всестороннюю основу для управления организационными структурами, активами, устройствами и их отношениями в многопользовательских средах. Построенная на PostgreSQL 14+ с расширением ltree, схема поддерживает иерархические организации, определения пользовательских полей для любых типов сущностей, ролевой доступ с ограничениями на уровне объектов и полные журналы аудита с отслеживанием изменений на уровне полей. Все сущности могут быть расширены без модификации схемы, локализованы для международных развертываний и связаны через гибкие полиморфные отношения.
Схема решает сложные сценарии управления данными, включая иерархии активов автопарка на разных уровнях организации, многопользовательские SaaS-платформы, требующие изоляции данных, операции, требующие соответствия с подробными требованиями аудита, и системы, нуждающиеся в динамических моделях данных, адаптируемых через пользовательские поля вместо миграций базы данных.
Интерактивная диаграммаrepo схемы данных доступна на dbdiagram.io: https://dbdiagram.io/d/Navixy-Repo-data-schema-68ad788c1e7a611967a0930e
Найдите repo подробности схемы ниже.
Частота обновления
Данные в repo схема синхронизируется в режиме реального времени с исходными системами. Обновления происходят немедленно по мере внесения изменений, а журналы аудита фиксируют все модификации для целей соответствия и исторического анализа.
ci_base
ci_baseСхема repo схема использует паттерн Single Table Inheritance для всех справочных данных через ci_base таблицу:
Схема repo схема использует Single Table Inheritance паттерн для всех справочных данных через ci_base таблицу. Этот подход объединяет системные словари, классификации и элементы справочников, определяемые пользователем, в единую структуру, обеспечивая согласованность и гибкость по всей схеме.
Архитектура:
Схема ci_base таблица служит основой для всех справочных данных, используя discriminator поле для идентификации конкретного типа справочной записи. Каждый тип справочника имеет соответствующую таблицу (например, ci_device_type, ci_asset_type) которая разделяет тот же id как ci_base, создавая типобезопасное отношение наследования.
Как деловые сущности подключаются к ci_base:
Все деловые сущности в repo схеме ссылаются на 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
Обеспечивает гибкую систему тегирования и организацию каталогов
Ключевые таблицы по категориям
Таблицы в repo схема организована по функциональным категориям. Описания ниже суммируют наиболее важные таблицы по их бизнес-назначению.
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
Связи данных
Схема repo схема реализует сложные шаблоны отношений для гибкого моделирования данных:
Иерархические структуры
Организации используют пути ltree для эффективных запросов по дереву
Элементы справочников (
ci_base) поддерживают опциональные иерархииАвтоматическое поддержание путей через триггеры базы данных
Шаблоны наследования
Наследование таблиц:
customizable_entity→ бизнес-сущности (organization,user,device,asset,inventory,asset_group)Наследование ID:
ci_base→ таблицы типов справочниковРазличение типов через
entity_type_idиdiscriminatorполя
Полиморфные связи
Некоторые таблицы используют полиморфные ссылки без внешних ключей для максимальной гибкости:
acl_role_permission.target_entity_id→ любуюcustomizable_entityacl_user_scope.target_entity_id→ любуюcustomizable_entityentity_tag.entity_id→ любуюcustomizable_entity
Эти связи проверяются на уровне приложения.
Дополнительная информация
Валидация данных
Схема repo схема обеспечивает целостность данных посредством нескольких механизмов:
Ограничения базы данных
ОГРАНИЧЕНИЯ UNIQUE с поддержкой мягкого удаления (частичные индексы WHERE
deleted_atIS NULL)Ограничения CHECK (например,
device_relationобеспечиваетmaster_id≠slave_id)Ограничения NOT NULL для обязательных полей
ЗНАЧЕНИЯ DEFAULT для временных меток и булевых флагов
Проверки на уровне приложения
Проверка типа сущности для полиморфных ссылок
Проверка каталога для ссылок пользовательских полей
Валидация типов пользовательских полей
Управление массивами для полей с множественными значениями
Оптимизация запросов
Таблицы организованы со специфическими стратегиями индексирования:
Стандартные индексы:
Все внешние ключи имеют выделенные индексы
Временные индексы на
created_at,updated_at,deleted_atСоставные индексы для часто объединяемых столбцов
Специализированные индексы:
GiST-индексы на ltree-путях для иерархических запросов
Частичные уникальные индексы, поддерживающие мягкое удаление
Индексы значений пользовательских полей для фильтрации и сортировки
Индексы событий аудита по времени + сущности для эффективного поиска
Соображения по производительности:
Рекомендуется пул соединений (PgBouncer)
Регулярное обслуживание VACUUM для больших таблиц
Возможное будущее партиционирование для
deviceтаблицы поorganization_idМатериализованные представления для сложных вычислений контроля доступа
Последнее обновление
Это было полезно?