Ir para o conteúdo principal

Documento de Projeto do Banco de Dados MyEMS

Este documento é destinado a programadores e fornece uma explicação detalhada da arquitetura do banco de dados, estrutura de tabelas e filosofia de design do sistema de gerenciamento de energia MyEMS.

Sumário


Projeto da arquitetura do banco de dados

Conceito de design

  1. Separação de dados: Separe os dados em diferentes bancos de dados com base no tipo de dado e uso, para evitar que um único banco de dados se torne muito grande
  2. Separação de leitura e gravação: Os dados históricos são armazenados em formato de série temporal, possibilitando consultas eficientes
  3. Escalonamento horizontal: Grandes bancos de dados (historical_db, energy_db) podem ser escalonados independentemente
  4. Padrões unificados: Todos os bancos de dados utilizam o mesmo conjunto de caracteres e regras de ordenação

Configuração do banco de dados

Todos os bancos de dados utilizam a seguinte configuração de forma unificada:

  • Conjunto de caracteres: utf8mb4 (suporta o conjunto de caracteres UTF-8 completo, incluindo emojis)
  • Regra de ordenação: utf8mb4_unicode_ci (regra de ordenação Unicode)
  • Motor de armazenamento: InnoDB (padrão, suporta transações e chaves estrangeiras)

Convenções de nomenclatura

  • Nomenclatura do Banco de Dados: myems_{Função}_db (minúsculo, separado por underline)
  • Nomenclatura de Tabelas: tbl_{Nome da Entidade} (minúsculo, separado por underline)
  • Nomenclatura de Campos: Minúsculo, separado por underlines, como start_datetime_utc
  • Nomenclatura de Índices: tbl_{Nome da Tabela}_index_{Número de Sequência}

Descrição detalhada do banco de dados

1. Myems_system_db (banco de dados de configuração do sistema)

Propósito: Armazenar a configuração básica e metadados do sistema, servindo como biblioteca de configuração core de todo o sistema.

Características:

  • Contém o maior número de tabelas (aproximadamente 150+ tabelas)
  • O volume de dados é relativamente pequeno, mas a estrutura é complexa
  • Contém um grande número de tabelas de associação

Classificação Principal de Tabelas:

1.1 Tabela de Configuração Básica

nome da tabelaInstruçõescampo chave
tbl_energy_categoriesClassificação de energia (eletricidade, água, gás, frio, calor, etc.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsSubitens de consumo de energia (iluminação, ar condicionado, energia, etc.)id, name, energy_category_id
tbl_cost_centersCentro de custosid, name, external_id
tbl_data_sourcesConfiguração da fonte de dadosid, name, gateway_id, protocol, connection
tbl_protocolsConfiguração de protocoloid, name, protocol_type

1.2 Tabela de Gerenciamento de Equipamentos

nome da tabelaInstruçõescampo chave
tbl_equipmentsInformações do dispositivoid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsDispositivo combinado (combinação de múltiplos dispositivos)id, name, is_input_counted, is_output_counted
tbl_metersInformações do medidorid, name, uuid, energy_category_id, is_counted
tbl_offline_metersMedidor offline (inserido manualmente)id, name, energy_category_id
tbl_virtual_metersMedidor Virtual (Calculado)id, name, expression (em formato JSON)
tbl_pointsInformações do ponto de dadosid, name, data_source_id, object_type, object_id

1.3 Tabela de Organização Espacial

nome da tabelaInstruçõescampo chave
tbl_spacesInformações espaciais (salas, andares, etc.)id, name, uuid, parent_space_id, area
tbl_storesInformações da lojaid, name, uuid, space_id
tbl_tenantsInformações do inquilinoid, name, uuid, space_id
tbl_shopfloorsInformações da oficina/workshopid, name, uuid, space_id

1.4 Tabela de Relação de Associação

O sistema utiliza um grande número de tabelas de associação para estabelecer relações muitos para muitos:

  • tbl_equipments_meters: Associação entre equipamentos e medidores
  • tbl_equipments_offline_meters: Associação entre equipamentos e medidores offline
  • tbl_equipments_virtual_meters: Associação entre equipamentos e medidores virtuais
  • tbl_spaces_equipments: Associação entre espaço e equipamentos
  • tbl_spaces_meters: Associação entre espaço e medidores
  • tbl_combined_equipments_equipments: Associação entre equipamentos combinados e dispositivos
  • etc...

1.5 Lista de Equipamentos de Energia Nova

nome da tabelaInstruçõescampo chave
tbl_photovoltaic_power_stationsEstação fotovoltaicaid, name, capacity, contact_id
tbl_energy_storage_containersRecipiente de armazenamento de energiaid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsEstação de energia de armazenamentoid, name, rated_capacity
tbl_microgridsMicro-redeid, name, address
tbl_charging_stationsEstação de recargaid, name, rated_capacity, rated_power

1.6 Tabela de Controle e Agendamento

nome da tabelaInstruçõescampo chave
tbl_commandsComando de controleid, name, topic, payload (em formato JSON)
tbl_control_modesModo de controleid, name, is_active
tbl_control_modes_timesPeríodo de tempo do modo de controleid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Outra Tabela de Configuração

  • tbl_contacts: Informações de contato
  • tbl_distribution_systems: Sistemas de distribuição
  • tbl_distribution_circuits: Circuitos de distribuição
  • tbl_energy_flow_diagrams: Diagrama de fluxo de energia
  • tbl_tariffs: Configuração de preços de eletricidade
  • tbl_working_calendars: Calendários de trabalho
  • tbl_web_messages: Mensagens da Web

Precauções de desenvolvimento:

  • Todas as tabelas possuem id (BIGINT AUTO-INCREMENT) como chave primária
  • A maioria das tabelas possui um campo uuid (CHAR(36)) para integração com sistemas externos
  • Tabelas de associação geralmente possuem apenas id e dois campos de chave estrangeira
  • Campos JSON utilizam o tipo LONGTEXT para armazenar strings JSON formatadas

2. Myems_historics_db (Banco de Dados de Dados Históricos)

Propósito: Armazenar dados de monitoramento em tempo real e dados históricos, sendo um dos bancos de dados com maior volume de dados do sistema.

Características:

  • O volume de dados é enorme, e é utilizado armazenamento em série temporal
  • Contém tabelas de dados brutos e cache de valor mais recente
  • Suporta rótulos de qualidade de dados (is_bad, is_published)

Estrutura Principal de Tabelas:

nome da tabelaInstruçõescampo chaveEstratégia de Índice
tbl_analog_valueDados 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_latestÚltimo valor analógico (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueDados históricos digitaispoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestÚltimo valor numérico (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueDados históricos de consumo de energiapoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestÚltimo valor de consumo de energia (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueDados históricos de volume de textopoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestÚltimo valor de volume de texto (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Tabela de Armazenamento de Arquivos:

nome da tabelaInstruçõescampo chave
tbl_cost_filesDocumento de custo (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesArquivo de dados de medidor offlinefile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesArquivo de reparo de dadosfile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesDocumento de plano de consumo de energiafile_name, uuid, upload_datetime_utc, status, file_object

Descrição de Tipos de Dados:

  • actual_value: DECIMAL(21,6) - Suporta valores numéricos de alta precisão com 6 casas decimais
  • utc_date_time: DATETIME - Hora UTC, todos os horários utilizam UTC de forma unificada
  • is_bad: BOOL - Rótulo de qualidade de dados, True indica dados inválidos
  • is_published: BOOL - Flag de publicação, True indica publicado

Precauções de desenvolvimento:

  • Todos os campos de tempo utilizam horário UTC, e a exibição no front-end é convertida para horário local
  • A tabela _latest é utilizada para consultar rapidamente os valores mais recentes e evitar varrer tabelas históricas
  • A tabela de arquivos utiliza LONGBLOB para armazenar arquivos binários, preste atenção às restrições de tamanho
  • Limpe regularmente os dados históricos para evitar que as tabelas fiquem muito grandes e afetem o desempenho

3. Myems_energy_db (banco de dados de consumo de energia)

Propósito: Armazenar estatísticas de consumo de energia de vários dispositivos e agregá-las por hora, dia, mês e ano.

Características:

  • Os dados são calculados e gerados pelo serviço myems-aggregation
  • Divididos por granularidade de tempo em tabelas horárias, diárias, mensais e anuais
  • Suporta estatísticas por categoria de energia e item de consumo de energia

Regras de Nomenclatura de Tabelas:

  • tbl_{Tipo de Objeto}_{Direção}_{Classificação}_{Granularidade de Tempo}
  • Tipo de objeto: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Direção: input (entrada), output (saída)
  • Categorias: category (categoria de energia), item (subitem de consumo de energia)
  • Granularidade de tempo: hourly, daily, monthly, yearly

Estrutura Principal de Tabelas:

3.1 Medidor de consumo de energia

nome da tabelaInstruçõescampo chave
tbl_meter_hourlyConsumo de energia horário do medidormeter_id, start_datetime_utc, actual_value
tbl_meter_dailyConsumo de energia diário do medidormeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyConsumo de energia mensal do medidormeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyConsumo de energia anual do medidormeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyConsumo de energia horário do medidor offlineoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyConsumo de energia horário do medidor virtualvirtual_meter_id, start_datetime_utc, actual_value

3.2 Tabela de Consumo de Energia de Equipamentos

nome da tabelaInstruçõescampo chave
tbl_equipment_input_category_hourlyConsumo de energia de entrada do equipamento (por categoria)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyConsumo de energia de entrada do equipamento (por item)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyConsumo de energia de saída do equipamento (por categoria)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyConsumo de energia de entrada do dispositivo combinado (por categoria)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyConsumo de energia de saída do equipamento combinado (por classificação)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Tabela de Consumo de Energia Espacial

nome da tabelaInstruçõescampo chave
tbl_space_input_category_hourlyConsumo de energia de entrada espacial (por categoria)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyConsumo de energia de entrada espacial (por item)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyConsumo de energia de saída espacial (por classificação)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyConsumo de energia de entrada da lojastore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyInquilinos inserem consumo de energiatenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyConsumo de energia de entrada da oficina/workshopshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Tabela de Consumo de Energia de Equipamentos de Energia Nova

nome da tabelaInstruçõescampo chave
tbl_photovoltaic_power_station_hourlyGeração de energia horária da estação fotovoltaicaphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyCapacidade de carga do recipiente de armazenamento de energiaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyCapacidade de descarga do recipiente de armazenamento de energiaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyRecipientes de armazenamento de energia compram eletricidadeenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyVenda de eletricidade por recipientes de armazenamento de energiaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyCapacidade de carga da micro-redemicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyCapacidade de descarga da micro-redemicrogrid_id, start_datetime_utc, actual_value

Projeto de Índices:

  • Todas as tabelas possuem um índice composto: (ID do Objeto, ID da Classificação, start_datetime_utc) ou (ID do Objeto, start_datetime_utc)
  • Suporta consultas rápidas por objeto e intervalo de tempo

Precauções de desenvolvimento:

  • start_datetime_utc representa o horário de início do período (por exemplo, 2024-01-01 00:00:00 representa o dia 1 de janeiro das 00:00 às 01:00)
  • actual_value é o valor agregado, não o valor original
  • Os dados são calculados periodicamente pelo serviço de agregação, não escritos em tempo real
  • Preste atenção à conversão de fuso horário ao realizar consultas

4. myems_billing_db (Banco de Dados de Faturamento)

Propósito: Armazena dados de consumo de energia relacionados ao faturamento. Sua estrutura é semelhante a myems_energy_db, mas os dados são calculados com base em tarifas de eletricidade.

Características:

  • A estrutura da tabela é idêntica a myems_energy_db
  • Os dados são calculados pelo serviço myems-aggregation usando configurações de tarifas
  • Suporta regras de faturamento complexas, como tarifas horárias e preços escalonados

Tabelas Principais:

  • Mesma estrutura de tabela que myems_energy_db
  • Os valores dos dados são multiplicados pela tarifa correspondente, tipicamente em unidades monetárias (por exemplo, CNY, USD)

Notas de Desenvolvimento:

  • Os dados de faturamento dependem da configuração de tarifas em myems_system_db.tbl_tariffs
  • Deve ser associado a centros de custos (cost_center)
  • Suporta múltiplas estratégias de tarifas (horárias, escalonadas, baseadas em capacidade, etc.)

5. myems_carbon_db (Banco de Dados de Emissões de Carbono)

Propósito: Armazena dados de energia relacionados a emissões de carbono para cálculos de pegada de carbono.

Características:

  • A estrutura da tabela é idêntica a myems_energy_db
  • Os dados são calculados pelo serviço myems_aggregation com base em fatores de emissão de carbono
  • Os fatores de emissão de carbono são armazenados em myems_system_db.tbl_energy_categories.kgco2e

Tabelas Principais:

  • Mesma estrutura de tabela que myems_energy_db
  • Os valores dos dados são multiplicados pelo fator de emissão de carbono, tipicamente em kgCO2e (quilogramas de equivalente de CO₂)

Notas de Desenvolvimento:

  • Os fatores de emissão de carbono podem mudar ao longo do tempo, portanto, os fatores históricos devem ser suportados
  • Diferentes tipos de energia (eletricidade, gás, óleo, etc.) possuem diferentes fatores de emissão
  • Suporta o cálculo de emissões de carbono do Escopo 1, Escopo 2 e Escopo 3

6. myems_energy_baseline_db (Banco de Dados de Linha Base de Energia)

Propósito: Armazena dados de linha base de energia para análise de economia de energia e avaliação de eficiência energética.

Características:

  • A estrutura da tabela é semelhante a myems_energy_db
  • Os dados de linha base são tipicamente calculados com base em dados históricos ou valores padrão
  • Utilizado para comparar o consumo de energia real com o consumo de linha base para calcular a economia de energia

Tabelas Principais:

  • Mesma estrutura de tabela que myems_energy_db
  • Armazena valores de linha base em vez de valores reais

Notas de Desenvolvimento:

  • Os dados de linha base precisam ser atualizados regularmente
  • Suporta múltiplos métodos de cálculo de linha base (média histórica, análise de regressão, valores padrão, etc.)

7. Myems_energy_model_db (banco de dados de modelo de consumo de energia)

Propósito: Armazenar dados do modelo de consumo de energia anual de 8760 horas (8760 horas por ano).

Características:

  • Cada objeto armazena 8760 registros (dados horários de um ano)
  • Utilizado para previsão e planejamento de consumo de energia
  • O nome da tabela contém o sufixo _8760

Tabela Principal:

nome da tabelaInstruçõescampo chave
tbl_meter_8760Modelo de 8760 horas do medidormeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Modelo de consumo de energia de entrada do equipamentoequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Modelo de consumo de energia de entrada do dispositivo combinadocombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Modelo de consumo de energia de entrada espacialspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Modelo de consumo de energia de entrada da oficina/workshopshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Modelo de consumo de energia de entrada da lojastore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Modelo de consumo de energia de entrada do inquilinotenant_id, energy_category_id, start_datetime_utc, actual_value

Precauções de desenvolvimento:

  • O modelo de 8760 horas é tipicamente gerado com base em dados históricos ou modelos padrão
  • Utilizado para previsão anual de consumo de energia e elaboração de orçamentos
  • Suporta visualização por dimensões como semana, mês, trimestre, etc.

8. myems_energy_plan_db (Banco de Dados de Plano de Energia)

Propósito: Armazena dados de plano e metas de energia.

Características:

  • A estrutura da tabela é semelhante a myems_energy_db
  • Armazena valores planejados em vez de valores reais
  • Utilizado para orçamentação de consumo de energia e gerenciamento de metas

Tabelas Principais:

  • Mesma estrutura de tabela que myems_energy_db
  • Os dados vêm de arquivos de plano ou inserção manual

Notas de Desenvolvimento:

  • Os dados do plano precisam ser comparados com dados reais para análise
  • Suporta planos multiníveis (anual, mensal, semanal, etc.)

9. myems_energy_prediction_db (Banco de Dados de Previsão de Energia)

Propósito: Armazena dados de previsão de consumo de energia.

Características:

  • A estrutura da tabela é semelhante a myems_energy_db
  • Armazena valores previstos em vez de valores reais
  • Utilizado para previsão e alertas de consumo de energia

Tabelas Principais:

  • Mesma estrutura de tabela que myems_energy_db
  • Os dados são gerados por algoritmos de previsão

Notas de Desenvolvimento:

  • Os dados de previsão precisam ser atualizados regularmente
  • Suporta múltiplos algoritmos de previsão (série temporal, machine learning, etc.)
  • A precisão da previsão precisa de otimização contínua

10. Myems_fdd_db (Banco de Dados de Diagnóstico de Falhas)

Propósito: Armazenar dados relacionados a detecção e diagnóstico de falhas.

Características:

  • Suporta múltiplos canais de alerta (web, email, SMS, WeChat, telefone)
  • O mecanismo de regras suporta lógica complexa de detecção de falhas
  • Suporta a confirmação e tratamento de mensagens de falha

Estrutura Principal de Tabelas:

nome da tabelaInstruçõescampo chave
tbl_rulesRegras de diagnósticoid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesMensagem da Webid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesMensagem de emailid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxCaixa de saída de SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxCaixa de entrada de SMSid, sender_mobile, message, status
tbl_wechat_messages_outboxCaixa de saída de mensagens do WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxCaixa de entrada de mensagens do WeChatid, sender_openid, message, status
tbl_email_serversConfiguração do servidor de emailid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsConfiguração do WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Categorias de Regras (category):

  • REALTIME: Alertas em tempo real
  • SYSTEM: Alertas do sistema
  • SPACE: Alertas espaciais
  • METER: Alertas de medidor
  • TENANT: Alertas de inquilino
  • STORE: Alertas de loja
  • SHOPFLOOR: Alertas de oficina/workshop
  • EQUIPMENT: Alertas de equipamento
  • COMBINEDEQUIPMENT: Alertas de equipamentos combinados

Prioridade (priority):

  • CRITICAL: Crítico
  • HIGH: Alto
  • MEDIUM: Médio
  • LOW: Baixo

Notas de Desenvolvimento:

  • O campo expression armazena a expressão da regra em formato JSON
  • message_template suporta substituição de variáveis (por exemplo, $name, $value)
  • As regras suportam execução agendada e execução imediata
  • Status da mensagem: newsentacknowledged / timeout

11. myems_user_db (Banco de Dados de Usuários)

Propósito: Armazena autenticação de usuário, chaves de API, mensagens de email, etc.

Características:

  • Pequeno volume de dados, mas requisitos altos de segurança
  • Suporta gerenciamento de permissões de usuário
  • Suporta autenticação por chave de API

Estrutura Principal de Tabelas:

nome da tabelaInstruçõescampo chave
tbl_usersInformações do usuárioid, 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_privilegesConfiguração de permissõesid, name, data (em formato JSON)
tbl_sessionsSessão do usuárioid, user_uuid, token, utc_expires
tbl_api_keysChave de APIid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesMensagem de emailid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsConversa de emailid, recipient_email, token, expires_datetime_utc
tbl_logsLog de operaçõesid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsMensagem de notificaçãoid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNovo usuário (a ser ativado)id, name, uuid, display_name, email, salt, password
tbl_verification_codesCódigo de verificaçãoid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Projeto de Segurança:

  • Senhas são armazenadas usando salt + hash, sem armazenamento em texto plano
  • Suporta tempo de expiração de conta e senha
  • Suporta limites de tentativas de falha de login
  • Chaves de API suportam tempo de expiração

Notas de Desenvolvimento:

  • Campos de senha devem ser armazenados criptografados, não consultados diretamente
  • Tokens de sessão devem ser limpos periodicamente para remover registros expirados
  • Logs de operações devem registrar todas as ações críticas para auditoria
  • Status de notificações: unreadreadarchived

12. myems_reporting_db (Banco de Dados de Relatórios)

Propósito: Armazena mensagens de email e anexos relacionados a relatórios.

Características:

  • Pequeno volume de dados
  • Suporta armazenamento de modelos de relatórios e arquivos gerados

Estrutura Principal de Tabelas:

nome da tabelaInstruçõescampo chave
tbl_reportsConfiguração de relatóriosid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesDocumento de relatórioid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesArquivo de modelo de relatórioid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesMensagem de emailid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Notas de Desenvolvimento:

  • Arquivos de relatório suportam formatos Excel, PDF e Word
  • Arquivos de modelo são utilizados para gerar relatórios
  • Relatórios suportam geração agendada e geração imediata
  • Arquivos são armazenados usando LONGBLOB; preste atenção às restrições de tamanho

13. myems_production_db (Banco de Dados de Produção)

Propósito: Armazena dados de produtos relacionados à produção.

Características:

  • Pequeno volume de dados
  • Utilizado para análise de correlação de consumo de energia de produção

Estrutura Principal de Tabelas:

nome da tabelaInstruçõescampo chave
tbl_productsInformações do produtoid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsInformações da equipeid, name, uuid, description
tbl_shiftsInformações de turnoid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyProdução horária da oficina/workshopid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyProdução horária espacialid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsAssociação entre oficina/workshop e produtoid, shopfloor_id, product_id
tbl_shopfloors_teamsAssociação entre oficina/workshop e equipeid, shopfloor_id, team_id

Precauções de desenvolvimento:

  • Dados de produção são utilizados para calcular o consumo de energia por unidade de produto
  • Suporta estatísticas com base em dimensões como produto, equipe, oficina/workshop, etc.
  • Associa-se a dados de consumo de energia para calcular indicadores de eficiência energética

Relação de fluxo de dados

Processo de coleta de dados

Fluxo de Aquisição de Dados

Dispositivo / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Serviço de Aquisição de Dados)
↓ (Escrita)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Normalização de Dados)
myems-normalization (Serviço de Normalização)
↓ (Limpeza de Dados)
myems-cleaning (Serviço de Limpeza)
↓ (Agregação de Dados)
myems-aggregation (Serviço de Agregação)
↓ (Escrita)
myems_energy_db (Dados de Energia)
myems_billing_db (Dados de Faturamento)
myems_carbon_db (Dados de Emissões de Carbono)

Fluxo de Consulta de Dados

Solicitação do Usuário

myems-api (Serviço de API)
↓ (Consulta)
myems_system_db (Dados de Configuração)
myems_historical_db (Dados Históricos)
myems_energy_db (Dados de Energia)
↓ (Resposta)
myems-web / myems-admin (Exibição no Front-end)

Diagrama de Relação de Dados

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Cálculo de Agregação)
myems_energy_db.tbl_meter_hourly
↓ (Link)
myems_system_db.tbl_meters
↓ (Link)
myems_system_db.tbl_equipments
↓ (Link)
myems_system_db.tbl_spaces

Especificação de Projeto da Estrutura de Tabelas

Campos gerais

Todas as tabelas contêm os seguintes campos comuns:

nome do campotipoInstruções
idBIGINT NOT NULL AUTO_INCREMENTChave primária, auto incremento
nameVARCHAR(255)Nome
uuidCHAR(36)UUID, utilizado para integração com sistemas externos
descriptionVARCHAR(255)Descrição (opcional)

Campo de tempo

nome do campotipoInstruções
utc_date_timeDATETIMEHora UTC (tabela de dados históricos)
start_datetime_utcDATETIMEHorário de início do período (tabela de dados agregados)
created_datetime_utcDATETIMEHorário de criação
updated_datetime_utcDATETIMEHorário de atualização
last_run_datetime_utcDATETIMEÚltimo horário de execução
next_run_datetime_utcDATETIMEPróximo horário de execução

Atenção: Todos os campos de tempo devem utilizar horário UTC de forma unificada, e a exibição no front-end deve ser convertida para horário local.

Campo numérico

nome do campotipoInstruções
actual_valueDECIMAL(21, 6)Valor real, suporta alta precisão (6 casas decimais)
set_valueDECIMAL(21, 6)Valor definido
rated_capacityDECIMAL(21, 6)Capacidade nominal
rated_powerDECIMAL(21, 6)Potência nominal

Campos JSON

nome do campotipoInstruções
connectionLONGTEXTConfiguração de conexão (formato JSON)
expressionLONGTEXTExpressão (formato JSON)
payloadLONGTEXTCarga útil (formato JSON)
dataLONGTEXTDados (formato JSON)

Nota: Campos JSON armazenam strings JSON formatadas e precisam ser analisados antes do uso.

Campo de status

nome do campotipoInstruções
is_enabledBOOLHabilitado ou não
is_activeBOOLStatus de ativação
is_badBOOLPossui dados inválidos
is_publishedBOOLJá foi lançado?
is_countedBOOLEstá incluído nas estatísticas
statusVARCHAR(32)Status (por exemplo, new, sent, done, error)

Projeto de Índices

Índice de chave primária:

  • Todas as tabelas possuem um PRIMARY KEY (id)

Índice único:

  • Campos chave (como name, uuid) geralmente possuem índices únicos

Índice composto:

  • Estabelece um índice composto para combinações de campos frequentemente consultados
  • Por exemplo: