MyEMS 資料庫設計文檔
本文檔面向程式設計師,詳細說明 MyEMS 能源管理系統的資料庫架構、表結構和設計理念。
目錄
資料庫架構設計
設計理念
- 數據分離: 按數據類型和用途分離到不同 資料庫,避免單庫過大
- 讀寫分離: 歷史數據採用時間序列存儲,支持高效查詢
- 水平擴展: 大型資料庫(historical_db, energy_db)可獨立擴展
- 統一規範: 所有資料庫使用相同的字符集和排序規則
資料庫配置
所有資料庫統一使用以下配置:
- 字符集:
utf8mb4(支持完整的 UTF-8 字符,包括 emoji) - 排序規則:
utf8mb4_unicode_ci(Unicode 排序規則) - 存儲引擎: 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: Web 消息
開發注意事項:
- 所有表都有
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 時間,所有時間統一使用 UTCis_bad: BOOL - 數據質量標記,True 表示壞數據is_published: BOOL - 發布標記,True 表示已發布
開發注意事項:
- 所有時間欄位使用 UTC 時間,前端顯示時轉換為本地時間
_latest表用於快速查詢最新值,避免掃描歷史表- 文件表使用
LONGBLOB存儲二進位文件,注意大小限制 - 定期清理歷史數據,避免表過大影響性能
3. myems_energy_db (能耗資料庫)
用途: 存儲各種設備的能耗統計數據,按小時、日、月、年進行聚合。
特點:
- 數據由
myems-aggregation服務計算生成 - 按時間粒度分為 hourly, daily, monthly, yearly 表
- 支持按能源分類(category)和能耗分項(item)統計
表命名規則:
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 |