Ir al contenido principal

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

Concepto de diseño

  1. 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.
  2. Separación de lectura y escritura: Los datos históricos se almacenan en formato de series temporales, lo que permite consultas eficientes.
  3. Escalabilidad horizontal: Las bases de datos de gran tamaño (historical_db, energy_db) pueden escalarse de forma independiente.
  4. 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 tablaInstruccionescampo clave
tbl_energy_categoriesClasificación de energías (electricidad, agua, gas, frío, calor, etc.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsSubítems de consumo energético (iluminación, aire acondicionado, energía eléctrica, etc.)id, name, energy_category_id
tbl_cost_centersCentro de costosid, name, external_id
tbl_data_sourcesConfiguración de fuentes de datosid, name, gateway_id, protocol, connection
tbl_protocolsConfiguración de protocolosid, name, protocol_type

1.2 Tabla de gestión de equipos

nombre de la tablaInstruccionescampo clave
tbl_equipmentsInformación de dispositivosid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsDispositivo combinado (combinación de múltiples dispositivos)id, name, is_input_counted, is_output_counted
tbl_metersInformación de medidoresid, name, uuid, energy_category_id, is_counted
tbl_offline_metersMedidor sin conexión (ingresado manualmente)id, name, energy_category_id
tbl_virtual_metersMedidor virtual (calculado)id, name, expression (en formato JSON)
tbl_pointsInformación de puntos de datosid, name, data_source_id, object_type, object_id

1.3 Tabla de organización espacial

nombre de la tablaInstruccionescampo clave
tbl_spacesInformación espacial (habitaciones, plantas, etc.)id, name, uuid, parent_space_id, area
tbl_storesInformación de tiendasid, name, uuid, space_id
tbl_tenantsInformación de inquilinosid, name, uuid, space_id
tbl_shopfloorsInformación de talleresid, 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 medidores
  • tbl_equipments_points: Asociación entre equipos y puntos de datos
  • tbl_spaces_equipments: Asociación entre espacios y equipos
  • tbl_spaces_meters: Asociación entre espacios y medidores
  • tbl_combined_equipments_equipments: Asociación entre equipos combinados y dispositivos
  • etc...

1.5 Lista de equipos de energías renovables

nombre de la tablaInstruccionescampo clave
tbl_photovoltaic_power_stationsPlanta de energía fotovoltaicaid, name, capacity, contact_id
tbl_energy_storage_containersContenedor de almacenamiento de energíaid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsPlanta de almacenamiento de energíaid, name, rated_capacity
tbl_microgridsMicrored eléctricaid, name, address
tbl_charging_stationsEstación de cargaid, name, rated_capacity, rated_power

1.6 Tabla de control y programación

nombre de la tablaInstruccionescampo clave
tbl_commandsComando de controlid, name, topic, payload (en formato JSON)
tbl_control_modesModo de controlid, name, is_active
tbl_control_modes_timesPeríodo de tiempo del modo de controlid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Otras tablas de configuración

  • tbl_contacts: Información de contactos
  • tbl_distribution_systems: Sistemas de distribución
  • tbl_distribution_circuits: Circuitos de distribución
  • tbl_energy_flow_diagrams: Diagramas de flujo de energía
  • tbl_tariffs: Configuración de precios de la electricidad
  • tbl_working_calendars: Calendarios laborales
  • tbl_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 LONGTEXT para 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 tablaInstruccionescampo claveEstrategia de índice
tbl_analog_valueDatos históricos analógicospoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestValor analógico más reciente (caché)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueDatos históricos digitalespoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestValor numérico más reciente (caché)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueDatos históricos de consumo energéticopoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestValor de consumo energético más reciente (caché)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueDatos históricos de textopoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestValor 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 tablaInstruccionescampo clave
tbl_cost_filesDocumento de costos (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesArchivo de datos de medidores sin conexiónfile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesArchivo de reparación de datosfile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesDocumento de planificación de consumo energéticofile_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 decimales
  • utc_date_time: DATETIME - Hora UTC, todas las horas utilizan uniformemente UTC
  • is_bad: BOOL - Etiqueta de calidad de datos, True indica datos defectuosos
  • is_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 _latest se utiliza para consultar rápidamente los valores más recientes y evitar escanear tablas históricas
  • La tabla de archivos utiliza LONGBLOB para 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 tablaInstruccionescampo clave
tbl_meter_hourlyConsumo energético horario del medidormeter_id, start_datetime_utc, actual_value
tbl_meter_dailyConsumo energético diario del medidormeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyConsumo energético mensual del medidormeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyConsumo energético anual del medidormeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyConsumo energético horario del medidor sin conexiónoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyConsumo energético horario del medidor virtualvirtual_meter_id, start_datetime_utc, actual_value

3.2 Tabla de consumo energético de equipos

nombre de la tablaInstruccionescampo clave
tbl_equipment_input_category_hourlyConsumo energético de entrada de equipos (por categoría)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyConsumo energético de entrada de equipos (por subítem)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyConsumo energético de salida de equipos (por categoría)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyConsumo 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_hourlyConsumo 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 tablaInstruccionescampo clave
tbl_space_input_category_hourlyConsumo energético de entrada espacial (por categoría)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyConsumo energético de entrada espacial (por subítem)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyConsumo energético de salida espacial (por clasificación)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyConsumo energético de entrada de tiendasstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyConsumo energético de entrada de inquilinostenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyConsumo energético de entrada de talleresshopfloor_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 tablaInstruccionescampo clave
tbl_photovoltaic_power_station_hourlyGeneración eléctrica horaria de plantas fotovoltaicasphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyCapacidad de carga de contenedores de almacenamiento de energíaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyCapacidad de descarga de contenedores de almacenamiento de energíaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyCompra de electricidad por contenedores de almacenamiento de energíaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyVenta de electricidad por contenedores de almacenamiento de energíaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyCapacidad de carga de microredes eléctricasmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyCapacidad de descarga de microredes eléctricasmicrogrid_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_utc representa 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_value es 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-aggregation utilizando 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_aggregation basá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 tablaInstruccionescampo clave
tbl_meter_8760Modelo de 8760 horas de medidoresmeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Modelo de consumo energético de entrada de equiposequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Modelo de consumo energético de entrada de dispositivos combinadoscombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Modelo de consumo energético de entrada espacialspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Modelo de consumo energético de entrada de talleresshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Modelo de consumo energético de entrada de tiendasstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Modelo de consumo energético de entrada de inquilinostenant_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 tablaInstruccionescampo clave
tbl_rulesReglas de diagnósticoid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesMensajes webid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesMensajes de correo electrónicoid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxBandeja de salida de SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxBandeja de entrada de SMSid, sender_mobile, message, status
tbl_wechat_messages_outboxBandeja de salida de mensajes de WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxBandeja de entrada de mensajes de WeChatid, sender_openid, message, status
tbl_email_serversConfiguración de servidores de correo electrónicoid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsConfiguración de WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Categorías de reglas (category):

  • REALTIME: Alertas en tiempo real
  • SYSTEM: Alertas del sistema
  • SPACE: Alertas espaciales
  • METER: Alertas de medidores
  • TENANT: Alertas de inquilinos
  • STORE: Alertas de tiendas
  • SHOPFLOOR: Alertas de talleres
  • EQUIPMENT: Alertas de equipos
  • COMBINEDEQUIPMENT: Alertas de equipos combinados

Prioridad (priority):

  • CRITICAL: Crítica
  • HIGH: Alta
  • MEDIUM: Media
  • LOW: Baja

Notas de desarrollo:

  • El campo expression almacena la expresión de la regla en formato JSON
  • message_template admite sustitución de variables (por ejemplo, $name, $value)
  • Las reglas admiten tanto ejecución programada como ejecución inmediata
  • Estados de mensajes: newsentacknowledged / 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 tablaInstruccionescampo clave
tbl_usersInformación de usuariosid, 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_privilegesConfiguración de permisosid, name, data (en formato JSON)
tbl_sessionsSesiones de usuariosid, user_uuid, token, utc_expires
tbl_api_keysClaves APIid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesMensajes de correo electrónicoid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsConversaciones de correo electrónicoid, recipient_email, token, expires_datetime_utc
tbl_logsRegistro de operacionesid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsMensajes de notificaciónid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNuevos usuarios (por activar)id, name, uuid, display_name, email, salt, password
tbl_verification_codesCódigos de verificaciónid, 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: unreadreadarchived

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 tablaInstruccionescampo clave
tbl_reportsConfiguración de informesid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesDocumentos de informesid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesArchivos de plantillas de informesid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesMensajes de correo electrónicoid, 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 tablaInstruccionescampo clave
tbl_productsInformación de productosid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsInformación de equipos de trabajoid, name, uuid, description
tbl_shiftsInformación de turnosid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyProducción horaria de talleresid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyProducción horaria espacialid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsAsociación entre talleres y productosid, shopfloor_id, product_id
tbl_shopfloors_teamsAsociación entre talleres y equipos de trabajoid, 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 campotipoInstrucciones
idBIGINT NOT NULL AUTO_INCREMENTClave primaria, autoincremental
nameVARCHAR(255)Nombre
uuidCHAR(36)UUID, utilizado para integración con sistemas externos
descriptionVARCHAR(255)Descripción (opcional)

Campo de tiempo

nombre del campotipoInstrucciones
utc_date_timeDATETIMEHora UTC (tabla de datos históricos)
start_datetime_utcDATETIMEHora de inicio del período de tiempo (tabla de datos agregados)
created_datetime_utcDATETIMEHora de creación
updated_datetime_utcDATETIMEHora de actualización
last_run_datetime_utcDATETIMEÚltima hora de ejecución
next_run_datetime_utcDATETIMEPró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 campotipoInstrucciones
actual_valueDECIMAL(21, 6)Valor real, admite alta precisión (6 decimales)
set_valueDECIMAL(21, 6)Valor configurado
rated_capacityDECIMAL(21, 6)Capacidad nominal
rated_powerDECIMAL(21, 6)Potencia nominal

Campos JSON

nombre del campotipoInstrucciones
connectionLONGTEXTConfiguración de conexión (formato JSON)
expressionLONGTEXTExpresión (formato JSON)
payloadLONGTEXTCarga útil (formato JSON)
dataLONGTEXTDatos (formato JSON)

Nota: Los campos JSON almacenan cadenas JSON formateadas y deben analizarse antes de su uso.

Campo de estado

nombre del campotipoInstrucciones
is_enabledBOOLHabilitado o no
is_activeBOOLEstado de activación
is_badBOOLContiene datos defectuosos
is_publishedBOOLHa sido publicado
is_countedBOOLSe incluye en las estadísticas
statusVARCHAR(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