Перейти к основному контенту

MyEMS Документация по проектированию базы данных

Данный документ предназначен для программистов и подробно объясняет архитектуру базы данных, структуру таблиц и философию проектирования системы управления энергопотреблением MyEMS.

Содержание


Архитектура базы данных

Концепция проектирования

  1. Разделение данных: Разделение данных на разные базы данных в зависимости от типа и назначения данных, чтобы избежать чрезмерного разрастания одной базы.
  2. Разделение операций чтения и записи: Исторические данные хранятся в формате временных рядов для обеспечения эффективных запросов.
  3. Горизонтальное масштабирование: Большие базы данных (myems_historical_db, myems_energy_db) можно масштабировать независимо.
  4. Унифицированные стандарты: Все базы данных используют одинаковый набор символов и правила сортировки.

Конфигурация базы данных

Все базы данных единообразно используют следующую конфигурацию:

  • Набор символов (Character Set): utf8mb4 (поддерживает полный набор символов UTF-8, включая эмодзи)
  • Правило сортировки (Collation): utf8mb4_unicode_ci (правило сортировки Unicode)
  • Движок хранения (Storage Engine): InnoDB (по умолчанию, поддерживает транзакции и внешние ключи)

Соглашения об именовании

  • Именование баз данных: myems_{функция}_db (нижний регистр, разделено подчеркиванием)
  • Именование таблиц: tbl_{имя_сущности} (нижний регистр, разделено подчеркиванием)
  • Именование полей: Нижний регистр, разделено подчеркиванием, например start_datetime_utc
  • Именование индексов: tbl_{имя_таблицы}_index_{порядковый_номер}

Подробное описание баз данных

1. myems_system_db (База данных системной конфигурации)

Назначение: Хранение базовых конфигураций и метаданных системы, является центральной конфигурационной базой всей системы.

Характеристики:

  • Содержит наибольшее количество таблиц (примерно 150+)
  • Относительно небольшой объем данных, но сложная структура
  • Содержит множество таблиц связей

Основные категории таблиц:

1.1 Таблицы базовой конфигурации

Имя таблицыОписаниеКлючевые поля
tbl_energy_categoriesКлассификация энергии (электричество, вода, газ, холод, тепло и т.д.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsПодкатегории энергопотребления (освещение, кондиционирование, питание и т.д.)id, name, energy_category_id
tbl_cost_centersЦентры затратid, name, external_id
tbl_data_sourcesКонфигурация источников данныхid, name, gateway_id, protocol, connection
tbl_protocolsКонфигурация протоколовid, name, protocol_type

1.2 Таблицы управления оборудованием

Имя таблицыОписаниеКлючевые поля
tbl_equipmentsИнформация об оборудованииid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsКомбинированное оборудование (объединение нескольких устройств)id, name, is_input_counted, is_output_counted
tbl_metersИнформация о счетчикахid, name, uuid, energy_category_id, is_counted
tbl_offline_metersОфлайн-счетчики (ручной ввод)id, name, energy_category_id
tbl_virtual_metersВиртуальные счетчики (расчетные)id, name, expression (в формате JSON)
tbl_pointsИнформация о точках данныхid, name, data_source_id, object_type, object_id

1.3 Таблицы пространственной организации

Имя таблицыОписаниеКлючевые поля
tbl_spacesИнформация о пространствах (помещения, этажи и т.д.)id, name, uuid, parent_space_id, area
tbl_storesИнформация о магазинахid, name, uuid, space_id
tbl_tenantsИнформация об арендаторахid, name, uuid, space_id
tbl_shopfloorsИнформация о цехахid, name, uuid, space_id

1.4 Таблицы связей

Система использует множество таблиц связей для установления отношений "многие ко многим":

  • tbl_equipments_meters: Связь между оборудованием и счетчиками
  • tbl_equipments_offline_meters: Связь между оборудованием и офлайн-счетчиками
  • tbl_equipments_virtual_meters: Связь между оборудованием и виртуальными счетчиками
  • tbl_spaces_equipments: Связь между пространством и оборудованием
  • tbl_spaces_meters: Связь между пространством и счетчиками
  • tbl_combined_equipments_equipments: Связь между комбинированным оборудованием и устройствами
  • и т.д.

1.5 Таблицы оборудования новых источников энергии

Имя таблицыОписаниеКлючевые поля
tbl_photovoltaic_power_stationsФотоэлектрические станцииid, name, capacity, contact_id
tbl_energy_storage_containersКонтейнеры накопления энергииid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsСтанции накопления энергииid, name, rated_capacity
tbl_microgridsМикросетиid, name, address
tbl_charging_stationsЗарядные станцииid, name, rated_capacity, rated_power

1.6 Таблицы управления и планирования

Имя таблицыОписаниеКлючевые поля
tbl_commandsКоманды управленияid, name, topic, payload (в формате JSON)
tbl_control_modesРежимы управленияid, name, is_active
tbl_control_modes_timesВременные периоды режимов управленияid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Другие таблицы конфигурации

  • tbl_contacts: Контактная информация
  • tbl_distribution_systems: Распределительные системы
  • tbl_distribution_circuits: Распределительные цепи
  • tbl_energy_flow_diagrams: Диаграммы потоков энергии
  • tbl_tariffs: Конфигурация тарифов на электроэнергию
  • tbl_working_calendars: Рабочие календари
  • tbl_web_messages: Веб-сообщения

Примечания для разработки:

  • У всех таблиц есть 'id' (BIGINT AUTO_INCREMENT) в качестве первичного ключа.
  • У большинства таблиц есть поле 'uuid' (CHAR(36)) для интеграции с внешними системами.
  • Таблицы связей обычно содержат только 'id' и два поля внешнего ключа.
  • Поля JSON используют тип 'LONGTEXT' для хранения форматированных строк JSON.

2. myems_historical_db (База данных исторических данных)

Назначение: Хранение данных мониторинга в реальном времени и исторических данных, одна из баз данных системы с наибольшим объемом данных.

Характеристики:

  • Огромный объем данных, используется хранение временных рядов
  • Содержит необработанные данные и таблицы кэша последних значений
  • Поддерживает маркировку качества данных (is_bad, is_published)

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поляСтратегия индексирования
tbl_analog_valueАналоговые исторические данныеpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestПоследнее аналоговое значение (кэш)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueЦифровые исторические данныеpoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestПоследнее цифровое значение (кэш)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueИсторические данные энергопотребленияpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestПоследнее значение энергопотребления (кэш)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueТекстовые исторические данныеpoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestПоследнее текстовое значение (кэш)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Таблицы хранения файлов:

Имя таблицыОписаниеКлючевые поля
tbl_cost_filesДокументы затрат (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesФайлы данных офлайн-счетчиковfile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesФайлы восстановления данныхfile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesДокументы плана энергопотребленияfile_name, uuid, upload_datetime_utc, status, file_object

Описание типов данных:

  • actual_value: DECIMAL(21,6) - Поддерживает высокоточные числовые значения с 6 десятичными знаками.
  • utc_date_time: DATETIME - Время UTC, все время используется унифицированно в UTC.
  • is_bad: BOOL - Метка качества данных, True указывает на плохие данные.
  • is_published: BOOL - Флаг публикации, True указывает на опубликованные данные.

Примечания для разработки:

  • Все поля времени используют время UTC, на фронтенде выполняется преобразование в местное время для отображения.
  • Таблицы _latest используются для быстрого запроса последних значений, чтобы избежать сканирования исторических таблиц.
  • Файловые таблицы используют LONGBLOB для хранения бинарных файлов, обратите внимание на ограничения размера.
  • Регулярно очищайте исторические данные, чтобы избежать снижения производительности из-за слишком больших таблиц.

3. myems_energy_db (База данных энергопотребления)

Назначение: Хранение статистики энергопотребления различного оборудования, агрегированной по часам, дням, месяцам и годам.

Характеристики:

  • Данные рассчитываются и генерируются сервисом myems-aggregation.
  • Разделение по гранулярности времени: часовые, дневные, месячные, годовые таблицы.
  • Поддерживает статистику по категориям энергии и подкатегориям потребления.

Правила именования таблиц:

  • tbl_{тип_объекта}_{направление}_{классификация}_{гранулярность_времени}
  • Тип объекта: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Направление: input (ввод), output (вывод)
  • Классификация: category (категория энергии), item (подкатегория потребления)
  • Гранулярность времени: hourly, daily, monthly, yearly

Основная структура таблиц:

3.1 Таблицы энергопотребления счетчиков

Имя таблицыОписаниеКлючевые поля
tbl_meter_hourlyЧасовое энергопотребление счетчикаmeter_id, start_datetime_utc, actual_value
tbl_meter_dailyДневное энергопотребление счетчикаmeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyМесячное энергопотребление счетчикаmeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyГодовое энергопотребление счетчикаmeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyЧасовое энергопотребление офлайн-счетчикаoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyЧасовое энергопотребление виртуального счетчикаvirtual_meter_id, start_datetime_utc, actual_value

3.2 Таблицы энергопотребления оборудования

Имя таблицыОписаниеКлючевые поля
tbl_equipment_input_category_hourlyВходящее энергопотребление оборудования (по категориям)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyВходящее энергопотребление оборудования (по подкатегориям)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyИсходящее энергопотребление оборудования (по категориям)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyВходящее энергопотребление комбинированного оборудования (по категориям)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyИсходящее энергопотребление комбинированного оборудования (по категориям)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Таблицы энергопотребления пространств

Имя таблицыОписаниеКлючевые поля
tbl_space_input_category_hourlyВходящее энергопотребление пространства (по категориям)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyВходящее энергопотребление пространства (по подкатегориям)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyИсходящее энергопотребление пространства (по категориям)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyВходящее энергопотребление магазинаstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyВходящее энергопотребление арендатораtenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyВходящее энергопотребление цехаshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Таблицы энергопотребления оборудования новых источников энергии

Имя таблицыОписаниеКлючевые поля
tbl_photovoltaic_power_station_hourlyЧасовое производство электроэнергии фотоэлектрической станциейphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyЗарядная емкость контейнера накопления энергииenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyРазрядная емкость контейнера накопления энергииenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyЗакупка электроэнергии контейнером накопления энергии из сетиenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyПродажа электроэнергии контейнером накопления энергии в сетьenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyЗарядная емкость микросетиmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyРазрядная емкость микросетиmicrogrid_id, start_datetime_utc, actual_value

Проектирование индексов:

  • Все таблицы имеют составной индекс: (object_id, category_id, start_datetime_utc) или (object_id, start_datetime_utc).
  • Поддерживает быстрые запросы по объекту и временному диапазону.

Примечания для разработки:

  • start_datetime_utc представляет время начала периода (например, 2024-01-01 00:00:00 означает период с 00:00 до 01:00 1 января).
  • actual_value - агрегированное значение, а не исходное.
  • Данные периодически вычисляются сервисом агрегации, а не записываются в реальном времени.
  • При запросах обратите внимание на преобразование часового пояса.

4. myems_billing_db (База данных биллинга)

Назначение: Хранение данных о потреблении энергии, связанных с выставлением счетов. Структура схожа с myems_energy_db, но данные рассчитываются на основе тарифов на электроэнергию.

Характеристики:

  • Структура таблиц идентична myems_energy_db
  • Данные рассчитываются сервисом myems-aggregation с использованием конфигураций тарифов
  • Поддерживает сложные правила биллинга, такие как тарифы по времени суток и многоуровневые тарифы

Основные таблицы:

  • Такая же структура таблиц, как у myems_energy_db
  • Значения данных умножаются на соответствующий тариф, обычно в денежных единицах (например, CNY, USD)

Примечания для разработки:

  • Данные биллинга зависят от конфигурации тарифов в myems_system_db.tbl_tariffs
  • Должны быть связаны с центрами затрат (cost_center)
  • Поддерживает несколько стратегий тарификации (по времени суток, многоуровневые, по мощности и т.д.)

5. myems_carbon_db (База данных выбросов углерода)

Назначение: Хранение данных об энергии, связанных с выбросами углерода, для расчета углеродного следа.

Характеристики:

  • Структура таблиц идентична myems_energy_db
  • Данные рассчитываются сервисом myems-aggregation на основе коэффициентов выбросов углерода
  • Коэффициенты выбросов углерода хранятся в myems_system_db.tbl_energy_categories.kgco2e

Основные таблицы:

  • Такая же структура таблиц, как у myems_energy_db
  • Значения данных умножаются на коэффициент выбросов углерода, обычно в кгCO2e (килограммы эквивалента CO₂)

Примечания для разработки:

  • Коэффициенты выбросов углерода могут меняться со временем, поэтому необходимо поддерживать исторические коэффициенты
  • Разные типы энергии (электричество, газ, нефть и т.д.) имеют разные коэффициенты выбросов
  • Поддерживает расчет выбросов углерода Scope 1, Scope 2 и Scope 3

6. myems_energy_baseline_db (База данных базовых показателей энергопотребления)

Назначение: Хранение данных базовых показателей энергопотребления для анализа экономии энергии и оценки энергоэффективности.

Характеристики:

  • Структура таблиц схожа с myems_energy_db
  • Данные базовых показателей обычно рассчитываются на основе исторических данных или стандартных значений
  • Используется для сравнения фактического энергопотребления с базовым потреблением для расчета экономии энергии

Основные таблицы:

  • Такая же структура таблиц, как у myems_energy_db
  • Хранит базовые значения, а не фактические

Примечания для разработки:

  • Данные базовых показателей необходимо регулярно обновлять
  • Поддерживает несколько методов расчета базовых показателей (среднее за исторический период, регрессионный анализ, стандартные значения и т.д.)

7. myems_energy_plan_db (База данных планов энергопотребления)

Назначение: Хранение данных плана и целевых показателей энергопотребления.

Характеристики:

  • Структура таблиц схожа с myems_energy_db
  • Хранит плановые значения, а не фактические
  • Используется для бюджетирования энергопотребления и управления целями

Основные таблицы:

  • Такая же структура таблиц, как у myems_energy_db
  • Данные поступают из плановых файлов или вводятся вручную

Примечания для разработки:

  • Плановые данные необходимо сравнивать с фактическими для анализа
  • Поддерживает многоуровневые планы (годовые, месячные, недельные и т.д.)

8. myems_energy_prediction_db (База данных прогнозов энергопотребления)

Назначение: Хранение данных прогнозов энергопотребления.

Характеристики:

  • Структура таблиц схожа с myems_energy_db
  • Хранит прогнозируемые значения, а не фактические
  • Используется для прогнозирования и предупреждений о потреблении энергии

Основные таблицы:

  • Такая же структура таблиц, как у myems_energy_db
  • Данные генерируются алгоритмами прогнозирования

Примечания для разработки:

  • Прогнозные данные необходимо регулярно обновлять
  • Поддерживает несколько алгоритмов прогнозирования (временные ряды, машинное обучение и т.д.)
  • Точность прогнозирования требует постоянной оптимизации

9. myems_fdd_db (База данных диагностики неисправностей)

Назначение: Хранение данных, связанных с обнаружением и диагностикой неисправностей.

Характеристики:

  • Поддерживает несколько каналов оповещений (веб, email, SMS, WeChat, телефон)
  • Механизм правил поддерживает сложную логику обнаружения неисправностей
  • Поддерживает подтверждение и обработку сообщений о неисправностях

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поля
tbl_rulesДиагностические правилаid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesВеб-сообщенияid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesСообщения электронной почтыid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxИсходящие SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxВходящие SMSid, sender_mobile, message, status
tbl_wechat_messages_outboxИсходящие сообщения WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxВходящие сообщения WeChatid, sender_openid, message, status
tbl_email_serversКонфигурация почтового сервераid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsКонфигурация WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Категории правил (category):

  • REALTIME: Оповещения в реальном времени
  • SYSTEM: Системные оповещения
  • SPACE: Оповещения по пространствам
  • METER: Оповещения по счетчикам
  • TENANT: Оповещения по арендаторам
  • STORE: Оповещения по магазинам
  • SHOPFLOOR: Оповещения по цехам
  • EQUIPMENT: Оповещения по оборудованию
  • COMBINEDEQUIPMENT: Оповещения по комбинированному оборудованию

Приоритет (priority):

  • CRITICAL: Критический
  • HIGH: Высокий
  • MEDIUM: Средний
  • LOW: Низкий

Примечания для разработки:

  • Поле expression хранит выражение правила в формате JSON.
  • message_template поддерживает подстановку переменных (например, $name, $value).
  • Правила поддерживают как запланированное, так и немедленное выполнение.
  • Статус сообщений: newsentacknowledged / timeout.

10. myems_user_db (База данных пользователей)

Назначение: Хранение аутентификации пользователей, API-ключей, сообщений электронной почты и т.д.

Характеристики:

  • Небольшой объем данных, но высокие требования к безопасности
  • Поддерживает управление правами пользователей
  • Поддерживает аутентификацию по API-ключу

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поля
tbl_usersИнформация о пользователеid, name, uuid, display_name, email, salt, password, is_admin, is_read_only, privilege_id, account_expiration_datetime_utc, password_expiration_datetime_utc, failed_login_count
tbl_privilegesКонфигурация правid, name, data (в формате JSON)
tbl_sessionsСессии пользователейid, user_uuid, token, utc_expires
tbl_api_keysAPI-ключиid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesСообщения электронной почтыid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsСессии электронной почтыid, recipient_email, token, expires_datetime_utc
tbl_logsЖурнал операцийid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsУведомленияid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersНовые пользователи (ожидают активации)id, name, uuid, display_name, email, salt, password
tbl_verification_codesКоды подтвержденияid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Проектирование безопасности:

  • Пароли хранятся с использованием соли (salt) + хэша, без хранения в открытом виде.
  • Поддерживает срок действия учетной записи и пароля.
  • Поддерживает ограничение количества неудачных попыток входа.
  • API-ключи поддерживают срок действия.

Примечания для разработки:

  • Поля паролей должны храниться в зашифрованном виде, не запрашивайте их напрямую.
  • Токены сессий следует периодически очищать, удаляя устаревшие записи.
  • Журнал операций должен записывать все важные действия для аудита.
  • Статусы уведомлений: unreadreadarchived.

11. myems_reporting_db (База данных отчетности)

Назначение: Хранение сообщений электронной почты и вложений, связанных с отчетами.

Характеристики:

  • Небольшой объем данных
  • Поддерживает хранение шаблонов отчетов и сгенерированных файлов

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поля
tbl_reportsКонфигурация отчетовid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesФайлы отчетовid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesФайлы шаблонов отчетовid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesСообщения электронной почтыid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Примечания для разработки:

  • Файлы отчетов поддерживают форматы Excel, PDF и Word.
  • Файлы шаблонов используются для генерации отчетов.
  • Отчеты поддерживают как запланированную, так и немедленную генерацию.
  • Файлы хранятся с использованием LONGBLOB; обратите внимание на ограничения размера.

--

12. myems_production_db (База данных производства)

Назначение: Хранение данных о продуктах, связанных с производством.

Характеристики:

  • Небольшой объем данных
  • Используется для корреляционного анализа энергопотребления производства

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поля
tbl_productsИнформация о продуктеid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsИнформация о командеid, name, uuid, description
tbl_shiftsИнформация о сменеid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyЧасовой выпуск продукции цехаid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyЧасовой выпуск продукции пространстваid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsСвязь цеха и продуктаid, shopfloor_id, product_id
tbl_shopfloors_teamsСвязь цеха и командыid, shopfloor_id, team_id

Примечания для разработки:

  • Данные о производстве используются для расчета удельного энергопотребления на единицу продукции.
  • Поддерживает статистику по таким измерениям, как продукт, команда, цех и т.д.
  • Связь с данными об энергопотреблении для расчета показателей энергоэффективности.

13. myems_production_db (База данных производства)

Назначение: Хранение данных о продуктах, связанных с производством.

Характеристики:

  • Небольшой объем данных
  • Используется для корреляционного анализа энергопотребления производства

Основная структура таблиц:

Имя таблицыОписаниеКлючевые поля
tbl_productsИнформация о продуктеid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsИнформация о командеid, name, uuid, description
tbl_shiftsИнформация о сменеid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyЧасовой выпуск продукции цехаid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyЧасовой выпуск продукции пространстваid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsСвязь цеха и продуктаid, shopfloor_id, product_id
tbl_shopfloors_teamsСвязь цеха и командыid, shopfloor_id, team_id

Примечания для разработки:

  • Данные о производстве используются для расчета удельного энергопотребления на единицу продукции.
  • Поддерживает статистику по таким измерениям, как продукт, команда, цех и т.д.
  • Связь с данными об энергопотреблении для расчета показателей энергоэффективности.

Взаимосвязи потоков данных

Процесс сбора данных

Поток сбора данных

Оборудование / Датчик
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Сервис сбора данных)
↓ (Запись)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Нормализация данных)
myems-normalization (Сервис нормализации)
↓ (Очистка данных)
myems-cleaning (Сервис очистки)
↓ (Агрегация данных)
myems-aggregation (Сервис агрегации)
↓ (Запись)
myems_energy_db (Данные об энергии)
myems_billing_db (Данные биллинга)
myems_carbon_db (Данные о выбросах углерода)

Поток запросов данных

Запрос пользователя

myems-api (API-сервис)
↓ (Запрос)
myems_system_db (Конфигурационные данные)
myems_historical_db (Исторические данные)
myems_energy_db (Данные об энергии)
↓ (Ответ)
myems-web / myems-admin (Фронтенд для отображения)

Диаграмма связей данных

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Агрегационный расчет)
myems_energy_db.tbl_meter_hourly
↓ (Связь)
myems_system_db.tbl_meters
↓ (Связь)
myems_system_db.tbl_equipments
↓ (Связь)
myems_system_db.tbl_spaces

Спецификация проектирования структуры таблиц

Общие поля

Все таблицы содержат следующие общие поля:

Имя поляТипОписание
idBIGINT NOT NULL AUTO_INCREMENTПервичный ключ, автоинкремент
nameVARCHAR(255)Название
uuidCHAR(36)UUID, используется для интеграции с внешними системами
descriptionVARCHAR(255)Описание (необязательно)

Поля времени

Имя поляТипОписание
utc_date_timeDATETIMEВремя UTC (таблицы исторических данных)
start_datetime_utcDATETIMEВремя начала периода (таблицы агрегированных данных)
created_datetime_utcDATETIMEВремя создания
updated_datetime_utcDATETIMEВремя обновления
last_run_datetime_utcDATETIMEВремя последнего запуска
next_run_datetime_utcDATETIMEВремя следующего запуска

Внимание: Все поля времени должны использовать время UTC, а на фронтенде преобразовываться в местное время для отображения.

Числовые поля

Имя поляТипОписание
actual_valueDECIMAL(21, 6)Фактическое значение, поддерживает высокую точность (6 знаков после запятой)
set_valueDECIMAL(21, 6)Установленное значение
rated_capacityDECIMAL(21, 6)Номинальная емкость
rated_powerDECIMAL(21, 6)Номинальная мощность

Поля JSON

Имя поляТипОписание
connectionLONGTEXTКонфигурация соединения (в формате JSON)
expressionLONGTEXTВыражение (в формате JSON)
payloadLONGTEXTНагрузка (в формате JSON)
dataLONGTEXTДанные (в формате JSON)

Примечание: Поля JSON хранят форматированные строки JSON, перед использованием их необходимо разобрать.

Поля статуса

Имя поляТипОписание
is_enabledBOOLВключен или нет
is_activeBOOLСтатус активации
is_badBOOLЯвляются ли данные плохими
is_publishedBOOLОпубликованы ли данные
is_countedBOOLУчитывается ли при статистике
statusVARCHAR(32)Статус (например, new, sent, done, error)

Проектирование индексов

Первичный ключевой индекс:

  • Все таблицы имеют PRIMARY KEY (id)

Уникальный индекс:

  • Ключевые поля (такие как name, uuid) обычно имеют уникальные индексы

Составной индекс:

  • Создание составного индекса для часто запрашиваемых комбинаций полей
  • Например: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Временной индекс:

  • Поле времени обычно индексируется отдельно и поддерживает запросы по временному диапазону