Documento de Diseño de la Base de Datos de MyEMS
Este documento está dirigido a programadores y ofrece una explicación detallada de la arquitectura de la base de datos, la estructura de las tablas y la filosofía de diseño del sistema de gestión energética MyEMS.
Tabla de Contenidos
- Diseño de la arquitectura de la base de datos
- Descripción detallada de la base de datos
- Relación del flujo de datos
- Especificación de diseño de la estructura de las tablas
Diseño de la arquitectura de la base de datos
Concepto de diseño
- Separación de datos: Separar los datos en diferentes bases de datos según el tipo y uso de los datos, para evitar que una única base de datos crezca demasiado.
- Separación de lectura y escritura: Los datos históricos se almacenan en formato de series temporales, lo que permite consultas eficientes.
- Escalabilidad horizontal: Las bases de datos de gran tamaño (
historical_db,energy_db) pueden escalarse de forma independiente. - Normas unificadas: Todas las bases de datos utilizan el mismo conjunto de caracteres y reglas de ordenación.
Configuración de la base de datos
Todas las bases de datos utilizan uniformemente la siguiente configuración:
- Conjunto de caracteres:
utf8mb4(admite el conjunto de caracteres UTF-8 completo, incluyendo emojis) - Regla de ordenación:
utf8mb4_unicode_ci(regla de ordenación Unicode) - Motor de almacenamiento: InnoDB (predeterminado, admite transacciones y claves foráneas)
Convenciones de nomenclatura
- Nomenclatura de bases de datos:
myems_{Función}_db(minúsculas, separadas por guiones bajos) - Nomenclatura de tablas:
tbl_{Nombre de la Entidad}(minúsculas, separadas por guiones bajos) - Nomenclatura de campos: Minúsculas, separadas por guiones bajos, por ejemplo
start_datetime_utc - Nomenclatura de índices:
tbl_{Nombre de la Tabla}_index_{Número de Secuencia}
Descripción detallada de la base de datos
1. Myems_system_db (base de datos de configuración del sistema)
Propósito: Almacena la configuración básica y los metadatos del sistema, y funciona como la biblioteca de configuración principal de todo el sistema.
Características:
- Contiene el mayor número de tablas (aproximadamente más de 150 tablas)
- El volumen de datos es relativamente pequeño, pero la estructura es compleja
- Contiene una gran cantidad de tablas de asociación
Clasificación de tablas principales:
1.1 Tabla de configuración básica
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_energy_categories | Clasificación de energías (electricidad, agua, gas, frío, calor, etc.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Subítems de consumo energético (iluminación, aire acondicionado, energía eléctrica, etc.) | id, name, energy_category_id |
tbl_cost_centers | Centro de costos | id, name, external_id |
tbl_data_sources | Configuración de fuentes de datos | id, name, gateway_id, protocol, connection |
tbl_protocols | Configuración de protocolos | id, name, protocol_type |
1.2 Tabla de gestión de equipos
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_equipments | Información de dispositivos | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Dispositivo combinado (combinación de múltiples dispositivos) | id, name, is_input_counted, is_output_counted |
tbl_meters | Información de medidores | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Medidor sin conexión (ingresado manualmente) | id, name, energy_category_id |
tbl_virtual_meters | Medidor virtual (calculado) | id, name, expression (en formato JSON) |
tbl_points | Información de puntos de datos | id, name, data_source_id, object_type, object_id |
1.3 Tabla de organización espacial
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_spaces | Información espacial (habitaciones, plantas, etc.) | id, name, uuid, parent_space_id, area |
tbl_stores | Información de tiendas | id, name, uuid, space_id |
tbl_tenants | Información de inquilinos | id, name, uuid, space_id |
tbl_shopfloors | Información de talleres | id, name, uuid, space_id |
1.4 Tabla de relaciones de asociación
El sistema utiliza una gran cantidad de tablas de asociación para establecer relaciones de muchos a muchos:
tbl_equipments_meters: Asociación entre equipos y medidorestbl_equipments_points: Asociación entre equipos y puntos de datostbl_spaces_equipments: Asociación entre espacios y equipostbl_spaces_meters: Asociación entre espacios y medidorestbl_combined_equipments_equipments: Asociación entre equipos combinados y dispositivos- etc...
1.5 Lista de equipos de energías renovables
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_photovoltaic_power_stations | Planta de energía fotovoltaica | id, name, capacity, contact_id |
tbl_energy_storage_containers | Contenedor de almacenamiento de energía | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | Planta de almacenamiento de energía | id, name, rated_capacity |
tbl_microgrids | Microred eléctrica | id, name, address |
tbl_charging_stations | Estación de carga | id, name, rated_capacity, rated_power |
1.6 Tabla de control y programación
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_commands | Comando de control | id, name, topic, payload (en formato JSON) |
tbl_control_modes | Modo de control | id, name, is_active |
tbl_control_modes_times | Período de tiempo del modo de control | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Otras tablas de configuración
tbl_contacts: Información de contactostbl_distribution_systems: Sistemas de distribucióntbl_distribution_circuits: Circuitos de distribucióntbl_energy_flow_diagrams: Diagramas de flujo de energíatbl_tariffs: Configuración de precios de la electricidadtbl_working_calendars: Calendarios laboralestbl_web_messages: Mensajes web
Precauciones de desarrollo:
- Todas las tablas tienen un campo
id(BIGINT AUTO_INCREMENT) y dos campos de clave foránea - Los campos JSON utilizan el tipo
LONGTEXTpara almacenar cadenas JSON formateadas
2. Myems_historics_db (Base de datos de datos históricos)
Propósito: Almacenar datos de monitoreo en tiempo real y datos históricos, y es una de las bases de datos de mayor volumen de datos del sistema.
Características:
- El volumen de datos es enorme y se utiliza el almacenamiento de series temporales
- Contiene tablas de datos originales y de caché de valores más recientes
- Admite la etiquetación de calidad de datos (
is_bad,is_published)
Estructura de tablas principales:
| nombre de la tabla | Instrucciones | campo clave | Estrategia de índice |
|---|---|---|---|
tbl_analog_value | Datos históricos analógicos | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_analog_value_latest | Valor analógico más reciente (caché) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Datos históricos digitales | point_id, utc_date_time, actual_value (INT) | (point_id, utc_date_time), (utc_date_time) |
tbl_digital_value_latest | Valor numérico más reciente (caché) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_energy_value | Datos históricos de consumo energético | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_energy_value_latest | Valor de consumo energético más reciente (caché) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_text_value | Datos históricos de texto | point_id, utc_date_time, actual_value (LONGTEXT) | (point_id, utc_date_time), (utc_date_time) |
tbl_text_value_latest | Valor de texto más reciente (caché) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
Tabla de almacenamiento de archivos:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_cost_files | Documento de costos (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | Archivo de datos de medidores sin conexión | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | Archivo de reparación de datos | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Documento de planificación de consumo energético | file_name, uuid, upload_datetime_utc, status, file_object |
Descripción de tipos de datos:
practice_value: DECIMAL (21,6) - Admite valores numéricos de alta precisión con 6 decimalesutc_date_time: DATETIME - Hora UTC, todas las horas utilizan uniformemente UTCis_bad: BOOL - Etiqueta de calidad de datos, True indica datos defectuososis_published: BOOL - Indicador de publicación, True indica publicado
Precauciones de desarrollo:
- Todos los campos de tiempo utilizan la hora UTC, y la visualización en el frontend se convierte a la hora local
- La tabla
_latestse utiliza para consultar rápidamente los valores más recientes y evitar escanear tablas históricas - La tabla de archivos utiliza
LONGBLOBpara almacenar archivos binarios, prestar atención a las restricciones de tamaño - Limpiar periódicamente los datos históricos para evitar que las tablas se vuelvan demasiado grandes y afecten el rendimiento
3. Myems_energy_db (Base de datos de consumo energético)
Propósito: Almacenar estadísticas de consumo energético de diversos dispositivos y agregarlas por hora, día, mes y año.
Características:
- Los datos son calculados y generados por el servicio
myems-aggregation - Se divide por granularidad temporal en tablas horarias, diarias, mensuales y anuales
- Admite estadísticas por categoría de energía y subítem de consumo energético
Reglas de nomenclatura de tablas:
tbl_{Tipo de Objeto}_{Dirección}_{Clasificación}_{Granularidad Temporal}- Tipo de objeto:
meter,equipment,combined_equipment,space,store,tenant,shopfloor - Dirección:
input(entrada),output(salida) - Clasificaciones:
category(categoría de energía),item(subítem de consumo energético) - Granularidad temporal:
hourly,daily,monthly,yearly
Estructura de tablas principales:
3.1 Medidor de consumo energético
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_meter_hourly | Consumo energético horario del medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Consumo energético diario del medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Consumo energético mensual del medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Consumo energético anual del medidor | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Consumo energético horario del medidor sin conexión | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Consumo energético horario del medidor virtual | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Tabla de consumo energético de equipos
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_equipment_input_category_hourly | Consumo energético de entrada de equipos (por categoría) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Consumo energético de entrada de equipos (por subítem) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Consumo energético de salida de equipos (por categoría) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Consumo energético de entrada de dispositivos combinados (por categoría) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_output_category_hourly | Consumo energético de salida de dispositivos combinados (por clasificación) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
3.3 Tabla de consumo energético espacial
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_space_input_category_hourly | Consumo energético de entrada espacial (por categoría) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Consumo energético de entrada espacial (por subítem) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Consumo energético de salida espacial (por clasificación) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Consumo energético de entrada de tiendas | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Consumo energético de entrada de inquilinos | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Consumo energético de entrada de talleres | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Tabla de consumo energético de equipos de energías renovables
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Generación eléctrica horaria de plantas fotovoltaicas | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Capacidad de carga de contenedores de almacenamiento de energía | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Capacidad de descarga de contenedores de almacenamiento de energía | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Compra de electricidad por contenedores de almacenamiento de energía | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Venta de electricidad por contenedores de almacenamiento de energía | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Capacidad de carga de microredes eléctricas | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Capacidad de descarga de microredes eléctricas | microgrid_id, start_datetime_utc, actual_value |
Diseño de índices:
- Todas las tablas tienen un índice compuesto:
(ID de Objeto, ID de Clasificación, start_datetime_utc)o(ID de Objeto, start_datetime_utc) - Admite consultas rápidas por objeto y rango de tiempo
Precauciones de desarrollo:
start_datetime_utcrepresenta la hora de inicio del período de tiempo (por ejemplo, 2024-01-01 00:00:00 representa el 1 de enero de 00:00 a 01:00)actual_valuees el valor agregado, no el valor original- Los datos son calculados periódicamente por el servicio de agregación, no se escriben en tiempo real
- Prestar atención a la conversión de zona horaria al realizar consultas
4. myems_billing_db (Base de datos de facturación)
Propósito: Almacena datos de consumo energético relacionados con la facturación. Su estructura es similar a myems_energy_db, pero los datos se calculan basándose en las tarifas eléctricas.
Características:
- La estructura de la tabla es idéntica a
myems_energy_db - Los datos son calculados por el servicio
myems-aggregationutilizando configuraciones de tarifas - Admite reglas de facturación complejas, como tarifas horarias y precios escalonados
Tablas principales:
- Misma estructura de tabla que
myems_energy_db - Los valores de datos se multiplican por la tarifa correspondiente, generalmente en unidades monetarias (por ejemplo, CNY, USD)
Notas de desarrollo:
- Los datos de facturación dependen de la configuración de tarifas en
myems_system_db.tbl_tariffs - Debe asociarse con centros de costos (
cost_center) - Admite múltiples estrategias de tarifas (horarias, escalonadas, basadas en capacidad, etc.)
5. myems_carbon_db (Base de datos de emisiones de carbono)
Propósito: Almacena datos de energía relacionados con las emisiones de carbono para cálculos de huella de carbono.
Características:
- La estructura de la tabla es idéntica a
myems_energy_db - Los datos son calculados por el servicio
myems_aggregationbasándose en factores de emisión de carbono - Los factores de emisión de carbono se almacenan en
myems_system_db.tbl_energy_categories.kgco2e
Tablas principales:
- Misma estructura de tabla que
myems_energy_db - Los valores de datos se multiplican por el factor de emisión de carbono, generalmente en kgCO2e (kilogramos de equivalente de CO₂)
Notas de desarrollo:
- Los factores de emisión de carbono pueden cambiar con el tiempo, por lo que deben admitirse factores históricos
- Diferentes tipos de energía (electricidad, gas, petróleo, etc.) tienen diferentes factores de emisión
- Admite el cálculo de emisiones de carbono Alcance 1, Alcance 2 y Alcance 3
6. myems_energy_baseline_db (Base de datos de línea base energética)
Propósito: Almacena datos de línea base energética para análisis de ahorro energético y evaluación de eficiencia energética.
Características:
- La estructura de la tabla es similar a
myems_energy_db - Los datos de la línea base se calculan generalmente basándose en datos históricos o valores estándar
- Se utiliza para comparar el consumo energético real con el consumo de la línea base y calcular el ahorro energético
Tablas principales:
- Misma estructura de tabla que
myems_energy_db - Almacena valores de línea base en lugar de valores reales
Notas de desarrollo:
- Los datos de la línea base deben actualizarse periódicamente
- Admite múltiples métodos de cálculo de línea base (promedio histórico, análisis de regresión, valores estándar, etc.)
7. Myems_energy_model_db (Base de datos de modelos de consumo energético)
Propósito: Almacenar datos de modelos de consumo energético anuales de 8760 horas (8760 horas por año).
Características:
- Cada objeto almacena 8760 registros (datos horarios de un año)
- Se utiliza para pronóstico y planificación de consumo energético
- El nombre de la tabla contiene el sufijo
_8760
Tabla principal:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_meter_8760 | Modelo de 8760 horas de medidores | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Modelo de consumo energético de entrada de equipos | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Modelo de consumo energético de entrada de dispositivos combinados | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Modelo de consumo energético de entrada espacial | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Modelo de consumo energético de entrada de talleres | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Modelo de consumo energético de entrada de tiendas | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Modelo de consumo energético de entrada de inquilinos | tenant_id, energy_category_id, start_datetime_utc, actual_value |
Precauciones de desarrollo:
- El modelo de 8760 horas se genera generalmente basándose en datos históricos o modelos estándar
- Se utiliza para pronóstico anual de consumo energético y elaboración de presupuestos
- Admite la visualización por dimensiones como semana, mes, trimestre, etc.
8. myems_energy_plan_db (Base de datos de planificación energética)
Propósito: Almacena datos de planes y objetivos energéticos.
Características:
- La estructura de la tabla es similar a
myems_energy_db - Almacena valores planificados en lugar de valores reales
- Se utiliza para presupuestación de consumo energético y gestión de objetivos
Tablas principales:
- Misma estructura de tabla que
myems_energy_db - Los datos provienen de archivos de planificación o ingreso manual
Notas de desarrollo:
- Los datos del plan deben compararse con los datos reales para análisis
- Admite planes multinivel (anuales, mensuales, semanales, etc.)
9. myems_energy_prediction_db (Base de datos de pronóstico energético)
Propósito: Almacena datos de pronóstico de consumo energético.
Características:
- La estructura de la tabla es similar a
myems_energy_db - Almacena valores pronosticados en lugar de valores reales
- Se utiliza para pronóstico y alertas de consumo energético
Tablas principales:
- Misma estructura de tabla que
myems_energy_db - Los datos se actualizan periódicamente mediante algoritmos de pronóstico
Notas de desarrollo:
- Los datos de pronóstico deben actualizarse periódicamente
- Admite múltiples algoritmos de pronóstico (series temporales, aprendizaje automático, etc.)
- La precisión del pronóstico necesita optimización continua