MyEMS Документация по проектированию базы данных
Данный документ предназначен для программистов и подробно объясняет архитектуру базы данных, структуру таблиц и философию проектирования системы управления энергопотреблением MyEMS.
Содержание
- Архитектура базы данных
- Подробное описание баз данных
- Взаимосвязи потоков данных
- Спецификация проектирования структуры таблиц
Архитектура базы данных
Концепция проектирования
- Разделение данных: Разделение данных на разные базы данных в зависимости от типа и назначения данных, чтобы избежать чрезмерного разрастания одной базы.
- Разделение операций чтения и записи: Исторические данные хранятся в формате временных рядов для обеспечения эффективных запросов.
- Горизонтальное масштабирование: Большие базы данных (
myems_historical_db,myems_energy_db) можно масштабировать независимо. - Унифицированные стандарты: Все базы данных используют одинаковый набор символов и правила сортировки.
Конфигурация базы данных
Все базы данных единообразно используют следующую конфигурацию:
- Набор символов (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 - Данные базовых показателей обычно рассчитываются на основе исторических данных или стандартных значений
- Используется для сравнения фактического энергопотребления с базовым потреблением для расчета экономии энергии
Основные таблицы: