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
- Descrição detalhada do banco de dados
- Relação de fluxo de dados
- Especificação de Projeto da Estrutura de Tabelas
Projeto da arquitetura do banco de dados
Conceito de design
- 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
- Separação de leitura e gravação: Os dados históricos são armazenados em formato de série temporal, possibilitando consultas eficientes
- Escalonamento horizontal: Grandes bancos de dados (
historical_db,energy_db) podem ser escalonados independentemente - 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 tabela | Instruções | campo chave |
|---|---|---|
tbl_energy_categories | Classificação de energia (eletricidade, água, gás, frio, calor, etc.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Subitens de consumo de energia (iluminação, ar condicionado, energia, etc.) | id, name, energy_category_id |
tbl_cost_centers | Centro de custos | id, name, external_id |
tbl_data_sources | Configuração da fonte de dados | id, name, gateway_id, protocol, connection |
tbl_protocols | Configuração de protocolo | id, name, protocol_type |
1.2 Tabela de Gerenciamento de Equipamentos
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_equipments | Informações do dispositivo | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Dispositivo combinado (combinação de múltiplos dispositivos) | id, name, is_input_counted, is_output_counted |
tbl_meters | Informações do medidor | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Medidor offline (inserido manualmente) | id, name, energy_category_id |
tbl_virtual_meters | Medidor Virtual (Calculado) | id, name, expression (em formato JSON) |
tbl_points | Informações do ponto de dados | id, name, data_source_id, object_type, object_id |
1.3 Tabela de Organização Espacial
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_spaces | Informações espaciais (salas, andares, etc.) | id, name, uuid, parent_space_id, area |
tbl_stores | Informações da loja | id, name, uuid, space_id |
tbl_tenants | Informações do inquilino | id, name, uuid, space_id |
tbl_shopfloors | Informações da oficina/workshop | id, 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 medidorestbl_equipments_offline_meters: Associação entre equipamentos e medidores offlinetbl_equipments_virtual_meters: Associação entre equipamentos e medidores virtuaistbl_spaces_equipments: Associação entre espaço e equipamentostbl_spaces_meters: Associação entre espaço e medidorestbl_combined_equipments_equipments: Associação entre equipamentos combinados e dispositivos- etc...
1.5 Lista de Equipamentos de Energia Nova
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_photovoltaic_power_stations | Estação fotovoltaica | id, name, capacity, contact_id |
tbl_energy_storage_containers | Recipiente de armazenamento de energia | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | Estação de energia de armazenamento | id, name, rated_capacity |
tbl_microgrids | Micro-rede | id, name, address |
tbl_charging_stations | Estação de recarga | id, name, rated_capacity, rated_power |
1.6 Tabela de Controle e Agendamento
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_commands | Comando de controle | id, name, topic, payload (em formato JSON) |
tbl_control_modes | Modo de controle | id, name, is_active |
tbl_control_modes_times | Período de tempo do modo de controle | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Outra Tabela de Configuração
tbl_contacts: Informações de contatotbl_distribution_systems: Sistemas de distribuiçãotbl_distribution_circuits: Circuitos de distribuiçãotbl_energy_flow_diagrams: Diagrama de fluxo de energiatbl_tariffs: Configuração de preços de eletricidadetbl_working_calendars: Calendários de trabalhotbl_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
ide dois campos de chave estrangeira - Campos JSON utilizam o tipo
LONGTEXTpara 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 tabela | Instruções | campo chave | Estratégia de Índice |
|---|---|---|---|
tbl_analog_value | Dados 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 | Último valor analógico (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Dados históricos digitais | point_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_value | Dados históricos de consumo de energia | point_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_value | Dados históricos de volume de texto | point_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 tabela | Instruções | campo chave |
|---|---|---|
tbl_cost_files | Documento de custo (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | Arquivo de dados de medidor offline | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | Arquivo de reparo de dados | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Documento de plano de consumo de energia | file_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 decimaisutc_date_time: DATETIME - Hora UTC, todos os horários utilizam UTC de forma unificadais_bad: BOOL - Rótulo de qualidade de dados, True indica dados inválidosis_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
LONGBLOBpara 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 tabela | Instruções | campo chave |
|---|---|---|
tbl_meter_hourly | Consumo de energia horário do medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Consumo de energia diário do medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Consumo de energia mensal do medidor | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Consumo de energia anual do medidor | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Consumo de energia horário do medidor offline | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Consumo de energia horário do medidor virtual | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Tabela de Consumo de Energia de Equipamentos
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_equipment_input_category_hourly | Consumo de energia de entrada do equipamento (por categoria) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Consumo de energia de entrada do equipamento (por item) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Consumo de energia de saída do equipamento (por categoria) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Consumo 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_hourly | Consumo 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 tabela | Instruções | campo chave |
|---|---|---|
tbl_space_input_category_hourly | Consumo de energia de entrada espacial (por categoria) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Consumo de energia de entrada espacial (por item) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Consumo de energia de saída espacial (por classificação) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Consumo de energia de entrada da loja | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Inquilinos inserem consumo de energia | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Consumo de energia de entrada da oficina/workshop | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Tabela de Consumo de Energia de Equipamentos de Energia Nova
| nome da tabela | Instruções | campo chave |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Geração de energia horária da estação fotovoltaica | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Capacidade de carga do recipiente de armazenamento de energia | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Capacidade de descarga do recipiente de armazenamento de energia | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Recipientes de armazenamento de energia compram eletricidade | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Venda de eletricidade por recipientes de armazenamento de energia | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Capacidade de carga da micro-rede | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Capacidade de descarga da micro-rede | microgrid_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_utcrepresenta 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-aggregationusando 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_aggregationcom 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 tabela | Instruções | campo chave |
|---|---|---|
tbl_meter_8760 | Modelo de 8760 horas do medidor | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Modelo de consumo de energia de entrada do equipamento | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Modelo de consumo de energia de entrada do dispositivo combinado | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Modelo de consumo de energia de entrada espacial | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Modelo de consumo de energia de entrada da oficina/workshop | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Modelo de consumo de energia de entrada da loja | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Modelo de consumo de energia de entrada do inquilino | tenant_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 tabela | Instruções | campo chave |
|---|---|---|
tbl_rules | Regras de diagnóstico | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Mensagem da Web | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | Mensagem de email | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | Caixa de saída de SMS | id, rule_id, recipient_mobile, message, status, acknowledge_code |
tbl_text_messages_inbox | Caixa de entrada de SMS | id, sender_mobile, message, status |
tbl_wechat_messages_outbox | Caixa de saída de mensagens do WeChat | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | Caixa de entrada de mensagens do WeChat | id, sender_openid, message, status |
tbl_email_servers | Configuração do servidor de email | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | Configuração do WeChat | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Categorias de Regras (category):
REALTIME: Alertas em tempo realSYSTEM: Alertas do sistemaSPACE: Alertas espaciaisMETER: Alertas de medidorTENANT: Alertas de inquilinoSTORE: Alertas de lojaSHOPFLOOR: Alertas de oficina/workshopEQUIPMENT: Alertas de equipamentoCOMBINEDEQUIPMENT: Alertas de equipamentos combinados
Prioridade (priority):
CRITICAL: CríticoHIGH: AltoMEDIUM: MédioLOW: Baixo
Notas de Desenvolvimento:
- O campo
expressionarmazena a expressão da regra em formato JSON message_templatesuporta substituição de variáveis (por exemplo,$name,$value)- As regras suportam execução agendada e execução imediata
- Status da mensagem:
new→sent→acknowledged/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 tabela | Instruções | campo chave |
|---|---|---|
tbl_users | Informações do usuário | 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 | Configuração de permissões | id, name, data (em formato JSON) |
tbl_sessions | Sessão do usuário | id, user_uuid, token, utc_expires |
tbl_api_keys | Chave de API | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | Mensagem de email | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | Conversa de email | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Log de operações | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Mensagem de notificação | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Novo usuário (a ser ativado) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | Código de verificação | id, 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:
unread→read→archived
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 tabela | Instruções | campo chave |
|---|---|---|
tbl_reports | Configuração de relatórios | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | Documento de relatório | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | Arquivo de modelo de relatório | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | Mensagem de email | id, 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 tabela | Instruções | campo chave |
|---|---|---|
tbl_products | Informações do produto | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Informações da equipe | id, name, uuid, description |
tbl_shifts | Informações de turno | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Produção horária da oficina/workshop | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Produção horária espacial | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Associação entre oficina/workshop e produto | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Associação entre oficina/workshop e equipe | id, 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 campo | tipo | Instruções |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Chave primária, auto incremento |
name | VARCHAR(255) | Nome |
uuid | CHAR(36) | UUID, utilizado para integração com sistemas externos |
description | VARCHAR(255) | Descrição (opcional) |
Campo de tempo
| nome do campo | tipo | Instruções |
|---|---|---|
utc_date_time | DATETIME | Hora UTC (tabela de dados históricos) |
start_datetime_utc | DATETIME | Horário de início do período (tabela de dados agregados) |
created_datetime_utc | DATETIME | Horário de criação |
updated_datetime_utc | DATETIME | Horário de atualização |
last_run_datetime_utc | DATETIME | Último horário de execução |
next_run_datetime_utc | DATETIME | Pró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 campo | tipo | Instruções |
|---|---|---|
actual_value | DECIMAL(21, 6) | Valor real, suporta alta precisão (6 casas decimais) |
set_value | DECIMAL(21, 6) | Valor definido |
rated_capacity | DECIMAL(21, 6) | Capacidade nominal |
rated_power | DECIMAL(21, 6) | Potência nominal |
Campos JSON
| nome do campo | tipo | Instruções |
|---|---|---|
connection | LONGTEXT | Configuração de conexão (formato JSON) |
expression | LONGTEXT | Expressão (formato JSON) |
payload | LONGTEXT | Carga útil (formato JSON) |
data | LONGTEXT | Dados (formato JSON) |
Nota: Campos JSON armazenam strings JSON formatadas e precisam ser analisados antes do uso.
Campo de status
| nome do campo | tipo | Instruções |
|---|---|---|
is_enabled | BOOL | Habilitado ou não |
is_active | BOOL | Status de ativação |
is_bad | BOOL | Possui dados inválidos |
is_published | BOOL | Já foi lançado? |
is_counted | BOOL | Está incluído nas estatísticas |
status | VARCHAR(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: