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
10. Myems_fdd_db (Base de datos de diagnóstico de fallos)
Propósito: Almacenar datos relacionados con la detección y diagnóstico de fallos.
Características:
- Admite múltiples canales de alerta (web, correo electrónico, SMS, WeChat, teléfono)
- El motor de reglas admite lógica compleja de detección de fallos
Estructura de tablas:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_rules | Reglas de diagnóstico | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Mensajes web | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | Mensajes de correo electrónico | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | Bandeja de salida de SMS | id, rule_id, recipient_mobile, message, status, acknowledge_code |
tbl_text_messages_inbox | Bandeja de entrada de SMS | id, sender_mobile, message, status |
tbl_wechat_messages_outbox | Bandeja de salida de mensajes de WeChat | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | Bandeja de entrada de mensajes de WeChat | id, sender_openid, message, status |
tbl_email_servers | Configuración de servidores de correo electrónico | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | Configuración de WeChat | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Categorías de reglas (category):
REALTIME: Alertas en tiempo realSYSTEM: Alertas del sistemaSPACE: Alertas espacialesMETER: Alertas de medidoresTENANT: Alertas de inquilinosSTORE: Alertas de tiendasSHOPFLOOR: Alertas de talleresEQUIPMENT: Alertas de equiposCOMBINEDEQUIPMENT: Alertas de equipos combinados
Prioridad (priority):
CRITICAL: CríticaHIGH: AltaMEDIUM: MediaLOW: Baja
Notas de desarrollo:
- El campo
expressionalmacena la expresión de la regla en formato JSON message_templateadmite sustitución de variables (por ejemplo,$name,$value)- Las reglas admiten tanto ejecución programada como ejecución inmediata
- Estados de mensajes:
new→sent→acknowledged/timeout
11. myems_user_db (Base de datos de usuarios)
Propósito: Almacena autenticación de usuarios, claves API, mensajes de correo electrónico, etc.
Características:
- Pequeño volumen de datos, pero altos requisitos de seguridad
- Admite gestión de permisos de usuarios
- Admite autenticación por claves API
Estructura de tablas principales:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_users | Información de usuarios | 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 | Configuración de permisos | id, name, data (en formato JSON) |
tbl_sessions | Sesiones de usuarios | id, user_uuid, token, utc_expires |
tbl_api_keys | Claves API | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | Mensajes de correo electrónico | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | Conversaciones de correo electrónico | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Registro de operaciones | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Mensajes de notificación | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Nuevos usuarios (por activar) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | Códigos de verificación | id, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc |
Diseño de seguridad:
- Las contraseñas se almacenan utilizando sal + hash, sin almacenamiento en texto plano
- Admite tiempo de expiración de cuentas y contraseñas
- Admite límites de intentos fallidos de inicio de sesión
- Las claves API admiten tiempo de expiración
Notas de desarrollo:
- Los campos de contraseña deben almacenarse encriptados, no consultarse directamente
- Los tokens de sesión deben limpiarse periódicamente para eliminar registros expirados
- Los registros de operaciones deben registrar todas las acciones críticas para auditoría
- Estados de notificaciones:
unread→read→archived
12. myems_reporting_db (Base de datos de informes)
Propósito: Almacena mensajes de correo electrónico y archivos adjuntos relacionados con informes.
Características:
- Pequeño volumen de datos
- Admite almacenamiento de plantillas de informes y archivos generados
Estructura de tablas principales:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_reports | Configuración de informes | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | Documentos de informes | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | Archivos de plantillas de informes | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | Mensajes de correo electrónico | id, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status |
Notas de desarrollo:
- Los archivos de informes admiten formatos Excel, PDF y Word
- Los archivos de plantillas se utilizan para generar informes
- Los informes admiten tanto generación programada como generación inmediata
- Los archivos se almacenan utilizando
LONGBLOB; prestar atención a las limitaciones de tamaño
13. myems_production_db (Base de datos de producción)
Propósito: Almacena datos de productos relacionados con la producción.
Características:
- Pequeño volumen de datos
- Se utiliza para análisis de correlación de consumo energético en la producción
Estructura de tablas principales:
| nombre de la tabla | Instrucciones | campo clave |
|---|---|---|
tbl_products | Información de productos | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Información de equipos de trabajo | id, name, uuid, description |
tbl_shifts | Información de turnos | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Producción horaria de talleres | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Producción horaria espacial | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Asociación entre talleres y productos | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Asociación entre talleres y equipos de trabajo | id, shopfloor_id, team_id |
Precauciones de desarrollo:
- Los datos de producción se utilizan para calcular el consumo energético unitario de productos
- Admite estadísticas basadas en dimensiones como producto, equipo de trabajo, taller, etc.
- Se asocia con datos de consumo energético para calcular indicadores de eficiencia energética
Relación del flujo de datos
Proceso de recopilación de datos
Flujo de adquisición de datos
Dispositivo / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Servicio de Adquisición de Datos)
↓ (Escritura)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Normalización de Datos)
myems-normalization (Servicio de Normalización)
↓ (Limpieza de Datos)
myems-cleaning (Servicio de Limpieza)
↓ (Agregación de Datos)
myems-aggregation (Servicio de Agregación)
↓ (Escritura)
myems_energy_db (Datos Energéticos)
myems_billing_db (Datos de Facturación)
myems_carbon_db (Datos de Emisiones de Carbono)
Flujo de consulta de datos
Solicitud de Usuario
↓
myems-api (Servicio API)
↓ (Consulta)
myems_system_db (Datos de Configuración)
myems_historical_db (Datos Históricos)
myems_energy_db (Datos Energéticos)
↓ (Respuesta)
myems-web / myems-admin (Visualización en Frontend)
Diagrama de relaciones de datos
myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Cálculo de Agregación)
myems_energy_db.tbl_meter_hourly
↓ (Enlace)
myems_system_db.tbl_meters
↓ (Enlace)
myems_system_db.tbl_equipments
↓ (Enlace)
myems_system_db.tbl_spaces
Especificación de diseño de la estructura de las tablas
Campos generales
Todas las tablas contienen los siguientes campos comunes:
| nombre del campo | tipo | Instrucciones |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Clave primaria, autoincremental |
name | VARCHAR(255) | Nombre |
uuid | CHAR(36) | UUID, utilizado para integración con sistemas externos |
description | VARCHAR(255) | Descripción (opcional) |
Campo de tiempo
| nombre del campo | tipo | Instrucciones |
|---|---|---|
utc_date_time | DATETIME | Hora UTC (tabla de datos históricos) |
start_datetime_utc | DATETIME | Hora de inicio del período de tiempo (tabla de datos agregados) |
created_datetime_utc | DATETIME | Hora de creación |
updated_datetime_utc | DATETIME | Hora de actualización |
last_run_datetime_utc | DATETIME | Última hora de ejecución |
next_run_datetime_utc | DATETIME | Próxima hora de ejecución |
Atención: Todos los campos de tiempo deben utilizar uniformemente la hora UTC, y la visualización en el frontend debe convertirse a la hora local.
Campo numérico
| nombre del campo | tipo | Instrucciones |
|---|---|---|
actual_value | DECIMAL(21, 6) | Valor real, admite alta precisión (6 decimales) |
set_value | DECIMAL(21, 6) | Valor configurado |
rated_capacity | DECIMAL(21, 6) | Capacidad nominal |
rated_power | DECIMAL(21, 6) | Potencia nominal |
Campos JSON
| nombre del campo | tipo | Instrucciones |
|---|---|---|
connection | LONGTEXT | Configuración de conexión (formato JSON) |
expression | LONGTEXT | Expresión (formato JSON) |
payload | LONGTEXT | Carga útil (formato JSON) |
data | LONGTEXT | Datos (formato JSON) |
Nota: Los campos JSON almacenan cadenas JSON formateadas y deben analizarse antes de su uso.
Campo de estado
| nombre del campo | tipo | Instrucciones |
|---|---|---|
is_enabled | BOOL | Habilitado o no |
is_active | BOOL | Estado de activación |
is_bad | BOOL | Contiene datos defectuosos |
is_published | BOOL | Ha sido publicado |
is_counted | BOOL | Se incluye en las estadísticas |
status | VARCHAR(32) | Estado (por ejemplo, new, sent, done, error) |
Diseño de índices
Índice de clave primaria:
- Todas las tablas tienen un
PRIMARY KEY (id)
Índice único:
- Los campos clave (como
name,uuid) suelen tener índices únicos
Índice compuesto:
- Establecer un índice compuesto para combinaciones de campos consultados frecuentemente
- Por ejemplo:
(point_id, utc_date_time),(meter_id, start_datetime_utc)
Índice de tiempo:
- El campo de tiempo suele tener un índice independiente y admite consultas de rango de tiempo