Ga naar de hoofdinhoud

MyEMS Database Ontwerpdocument

Dit document is bedoeld voor programmeurs en biedt een gedetailleerde uitleg van de databasearchitectuur, tabellenstructuur en ontwerpphilosofie van het MyEMS energiemanagementsysteem.

Inhoudsopgave


Databasearchitectuurontwerp

Ontwerpconcept

  1. Gegevensscheiding: Scheid gegevens over verschillende databases op basis van gegevenstype en gebruik, om te voorkomen dat één enkele database te groot wordt
  2. Lees-schrijf scheiding: Historische gegevens worden opgeslagen in tijdreeksindeling, waardoor efficiënte opvraging mogelijk is
  3. Horizontale schaalbaarheid: Grote databases (historical_db, energy_db) kunnen onafhankelijk geschaald worden
  4. Gestandaardiseerde normen: Alle databases gebruiken dezelfde tekenset en sorteervoorwaarden

Databaseconfiguratie

Alle databases gebruiken uniform de volgende configuratie:

  • Tekenset: utf8mb4 (ondersteunt de volledige UTF-8-tekenset, inclusief emoji's)
  • Sorteervoorwaarde: utf8mb4_unicode_ci (Unicode-sorteervoorwaarde)
  • Opslagengine: InnoDB (standaard, ondersteunt transacties en foreign keys)

Benoemingsconventies

  • Databasenaamgeving: myems_{Functie}_db (kleine letters, gescheiden door onderstrepingstekens)
  • Tabellennaamgeving: tbl_{Entiteitsnaam} (kleine letters, gescheiden door onderstrepingstekens)
  • Veldnaamgeving: Kleine letters, gescheiden door onderstrepingstekens, bijvoorbeeld start_datetime_utc
  • Indexnaamgeving: tbl_{Tabellennaam}_index_{Volgnummer}

Gedetailleerde databasebeschrijving

1. Myems_system_db (systeemconfiguratiedatabase)

Doel: Opslag van de basisconfiguratie en metagegevens van het systeem, fungeert als de kernconfiguratielibrary van het gehele systeem.

Kenmerken:

  • Bevat de meeste tabellen (ongeveer 150+ tabellen)
  • De gegevenshoeveelheid is relatief klein, maar de structuur is complex
  • Bevat een groot aantal associatietabellen

Hoofdtabellenclassificatie:

1.1 Basisconfiguratietabel

TabellennaamUitlegSleutelveld
tbl_energy_categoriesEnergieclassificatie (elektriciteit, water, gas, koude, warmte, etc.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsSubitems energieverbruik (verlichting, airconditioning, vermogen, etc.)id, name, energy_category_id
tbl_cost_centersKostencentrumid, name, external_id
tbl_data_sourcesGegevensbronconfiguratieid, name, gateway_id, protocol, connection
tbl_protocolsProtocolconfiguratieid, name, protocol_type

1.2 Apparaatbeheertabel

TabellennaamUitlegSleutelveld
tbl_equipmentsApparaatinformatieid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsGecombineerd apparaat (combinatie van meerdere apparaten)id, name, is_input_counted, is_output_counted
tbl_metersMeterinformatieid, name, uuid, energy_category_id, is_counted
tbl_offline_metersOffline meter (handmatig ingevoerd)id, name, energy_category_id
tbl_virtual_metersVirtuele meter (berekend)id, name, expression (in JSON-formaat)
tbl_pointsGegevenspuntinformatieid, name, data_source_id, object_type, object_id

1.3 Ruimtelijke organisatietabel

TabellennaamUitlegSleutelveld
tbl_spacesRuimtelijke informatie (kamers, verdiepingen, etc.)id, name, uuid, parent_space_id, area
tbl_storesWinkelinformatieid, name, uuid, space_id
tbl_tenantsHuurderinformatieid, name, uuid, space_id
tbl_shopfloorsWerkplaatsinformatieid, name, uuid, space_id

1.4 Associatierelatietabel

Het systeem maakt gebruik van een groot aantal associatietabellen om veel-op-veel-relaties op te bouwen:

  • tbl_equipments_meters: Associatie tussen apparaten en meters
  • tbl_equipments_offline_meters: Associatie tussen apparaten en offline meters
  • tbl_equipments_virtual_meters: Associatie tussen apparaten en virtuele meters
  • tbl_spaces_equipments: Associatie tussen ruimte en apparaten
  • tbl_spaces_meters: Associatie tussen ruimte en meters
  • tbl_combined_equipments_equipments: Associatie tussen gecombineerde apparaten en apparaten
  • enz...

1.5 Lijst met duurzame energieapparaten

TabellennaamUitlegSleutelveld
tbl_photovoltaic_power_stationsFotovoltaïsche centraleid, name, capacity, contact_id
tbl_energy_storage_containersEnergieslagcontainerid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsEnergieslagcentraleid, name, rated_capacity
tbl_microgridsMicrogridid, name, address
tbl_charging_stationsLaadstationid, name, rated_capacity, rated_power

1.6 Besturings- en planningstabel

TabellennaamUitlegSleutelveld
tbl_commandsBesturingsopdrachtid, name, topic, payload (in JSON-formaat)
tbl_control_modesBesturingsmodusid, name, is_active
tbl_control_modes_timesTijdperiode besturingsmodusid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Andere configuratietabel

  • tbl_contacts: Contactinformatie
  • tbl_distribution_systems: Distributiesystemen
  • tbl_distribution_circuits: Distributiekringen
  • tbl_energy_flow_diagrams: Energiefluxediagram
  • tbl_tariffs: Elektriciteits prijsconfiguratie
  • tbl_working_calendars: Werkkalenders
  • tbl_web_messages: Webberichten

Ontwikkelvoorzorgsmaatregelen:

  • Alle tabellen hebben id (BIGINT AUTO-INCREMENT) als primaire sleutel
  • De meeste tabellen hebben een uuid (CHAR(36))-veld voor integratie met externe systemen
  • Associatietabellen hebben meestal alleen id en twee foreign key-velden
  • JSON-velden gebruiken het LONGTEXT-type om opgemaakte JSON-tekenreeksen op te slaan

2. Myems_historics_db (historische gegevensdatabase)

Doel: Opslag van real-time monitoringsgegevens en historische gegevens, en is een van de grootste databases in termen van systeemgegevenshoeveelheid.

Kenmerken:

  • De gegevenshoeveelheid is enorm, en er wordt gebruikgemaakt van tijdreeksopslag
  • Bevat ruwe gegevens en de meest recente waarde-cachetabel
  • Ondersteunt gegevenskwaliteitslabeling (is_bad, is_published)

Hoofdtabellenstructuur:

TabellennaamUitlegSleutelveldIndexstrategie
tbl_analog_valueAnaloge historische gegevenspoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestMeest recente analoge waarde (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueDigitale historische gegevenspoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestMeest recente numerieke waarde (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueHistorische energieverbruiksgegevenspoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestMeest recente energieverbruikswaarde (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueTextuele historische gegevenspoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestMeest recente textuele waarde (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Bestandsopslagtabel:

TabellennaamUitlegSleutelveld
tbl_cost_filesKostendocument (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesOffline metergegevensbestandfile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesGegevensherstelbestandfile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesEnergieverbruiksplandocumentfile_name, uuid, upload_datetime_utc, status, file_object

Gegevenstypebeschrijving:

  • actual_value: DECIMAL(21,6) - Ondersteunt hoogwaardige numerieke waarden met 6 decimalen
  • utc_date_time: DATETIME - UTC-tijd, alle tijden gebruiken uniform UTC
  • is_bad: BOOL - Gegevenskwaliteitslabel, True duidt op ongeldige gegevens aan
  • is_published: BOOL - Publicatievlag, True duidt op gepubliceerd aan

Ontwikkelvoorzorgsmaatregelen:

  • Alle tijdvelden gebruiken UTC-tijd, de frontend-weergave wordt geconverteerd naar lokale tijd
  • De _latest-tabel wordt gebruikt om de meest recente waarden snel op te vragen en scannen van historische tabellen te vermijden
  • De bestandstabel gebruikt LONGBLOB om binaire bestanden op te slaan, let op groottebeperkingen
  • Wis historische gegevens regelmatig om te voorkomen dat tabellen te groot worden en de prestaties beïnvloeden

3. Myems_energy_db (energieverbruiksdatabase)

Doel: Opslag van energieverbruiksstatistieken van verschillende apparaten, geaggregeerd per uur, dag, maand en jaar.

Kenmerken:

  • De gegevens worden berekend en gegenereerd door de myems-aggregation-service
  • Verdeeld per tijdsgranulariteit in urige, dagelijkse, maandelijkse en jaarlijkse tabellen
  • Ondersteunt statistieken per energiecategorie en energieverbruiksitem

Tabellenbenoemingsregels:

  • tbl_{Objecttype}_{Richting}_{Classificatie}_{Tijdsgranulariteit}
  • Objecttype: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Richting: input (invoer), output (uitvoer)
  • Classificaties: category (energiecategorie), item (subitem energieverbruik)
  • Tijdsgranulariteit: hourly, daily, monthly, yearly

Hoofdtabellenstructuur:

3.1 Energieverbruiksmeter

TabellennaamUitlegSleutelveld
tbl_meter_hourlyUrig energieverbruik van de metermeter_id, start_datetime_utc, actual_value
tbl_meter_dailyDagelijks energieverbruik van de metermeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyMaandelijks energieverbruik van de metermeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyJaarlijks energieverbruik van de metermeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyUrig energieverbruik van de offline meteroffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyUrig energieverbruik van de virtuele metervirtual_meter_id, start_datetime_utc, actual_value

3.2 Apparaatenergieverbruikstabel

TabellennaamUitlegSleutelveld
tbl_equipment_input_category_hourlyApparaatinvoerenergieverbruik (per categorie)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyApparaatinvoerenergieverbruik (per item)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyApparaatuitvoerenergieverbruik (per categorie)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyGecombineerd apparaatinvoerenergieverbruik (per categorie)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyGecombineerd apparaatuitvoerenergieverbruik (per categorie)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Ruimteenergieverbruikstabel

TabellennaamUitlegSleutelveld
tbl_space_input_category_hourlyRuimte-invoerenergieverbruik (per categorie)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyRuimte-invoerenergieverbruik (per item)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyRuimte-uitvoerenergieverbruik (per categorie)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyWinkelinvoerenergieverbruikstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyHuurderinvoerenergieverbruiktenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyWerkplaatsinvoerenergieverbruikshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Energieverbruikstabel duurzame energieapparaten

TabellennaamUitlegSleutelveld
tbl_photovoltaic_power_station_hourlyUrig opwekken van de fotovoltaïsche centralephotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyLaadcapaciteit van de energieslagcontainerenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyOntlaadcapaciteit van de energieslagcontainerenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyEnergieslagcontainer koopt elektriciteitenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyEnergieslagcontainer verkoopt elektriciteitenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyMicrogrid laadcapaciteitmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyMicrogrid ontlaadcapaciteitmicrogrid_id, start_datetime_utc, actual_value

Indexontwerp:

  • Alle tabellen hebben een samengestelde index: (Object ID, Classificatie ID, start_datetime_utc) of (Object ID, start_datetime_utc)
  • Ondersteunt snelle opvraging per object en tijdsbereik

Ontwikkelvoorzorgsmaatregelen:

  • start_datetime_utc vertegenwoordigt de starttijd van de tijdsperiode (bijv. 01-01-2024 00:00:00 vertegenwoordigt 1 januari van 00:00 tot 01:00)
  • actual_value is de geaggregeerde waarde, niet de ruwe waarde
  • De gegevens worden periodiek berekend door de aggregatieservice, niet in real-time geschreven
  • Let op tijdzoneconversie bij opvraging

4. myems_billing_db (factureringsdatabase)

Doel: Opslaat energieverbruiksgegevens gerelateerd aan facturering. De structuur is vergelijkbaar met myems_energy_db, maar de gegevens worden berekend op basis van elektriciteitstarieven.

Kenmerken:

  • Tabellenstructuur is identiek aan myems_energy_db
  • Gegevens worden berekend door de myems-aggregation-service met behulp van tariefconfiguraties
  • Ondersteunt complexe factureringsregels zoals tarieven per gebruikstijd en tragbeprijzing

Hoofdtabellen:

  • Dezelfde tabellenstructuur als myems_energy_db
  • Gegevenswaarden worden vermenigvuldigd met het overeenkomstige tarief, meestal in valuta-eenheden (bijv. CNY, USD)

Ontwikkelnotities:

  • Factureringsgegevens zijn afhankelijk van de tariefconfiguratie in myems_system_db.tbl_tariffs
  • Moet worden geassocieerd met kostencentra (cost_center)
  • Ondersteunt meerdere tariefstrategieën (per gebruikstijd, tragbeprijzing, capaciteitsgebaseerd, etc.)

5. myems_carbon_db (koolstofemissiedatabase)

Doel: Opslaat energiedata gerelateerd aan koolstofemissies voor de berekening van de koolstofvoetafdruk.

Kenmerken:

  • Tabellenstructuur is identiek aan myems_energy_db
  • Gegevens worden berekend door de myems-aggregation-service op basis van koolstofemissiefactoren
  • Koolstofemissiefactoren worden opgeslagen in myems_system_db.tbl_energy_categories.kgco2e

Hoofdtabellen:

  • Dezelfde tabellenstructuur als myems_energy_db
  • Gegevenswaarden worden vermenigvuldigd met de koolstofemissiefactor, meestal in kgCO2e (kilogram CO₂-equivalent)

Ontwikkelnotities:

  • Koolstofemissiefactoren kunnen in de loop van de tijd veranderen, dus historische factoren moeten worden ondersteund
  • Verschillende energietypen (elektriciteit, gas, olie, etc.) hebben verschillende emissiefactoren
  • Ondersteunt de berekening van koolstofemissies van Scope 1, Scope 2 en Scope 3

6. myems_energy_baseline_db (energieleundatabase)

Doel: Opslaat energieleundata voor energiebesparingsanalyse en energie-efficiëntiebeoordeling.

Kenmerken:

  • Tabellenstructuur is vergelijkbaar met myems_energy_db
  • Leundata wordt meestal berekend op basis van historische gegevens of standaardwaarden
  • Wordt gebruikt om het daadwerkelijke energieverbruik te vergelijken met het leunverbruik om de energiebesparing te berekenen

Hoofdtabellen:

  • Dezelfde tabellenstructuur als myems_energy_db
  • Slaat leunwaarden op in plaats van daadwerkelijke waarden

Ontwikkelnotities:

  • Leundata moet regelmatig worden bijgewerkt
  • Ondersteunt meerdere methoden voor de berekening van leunwaarden (historisch gemiddelde, regressieanalyse, standaardwaarden, etc.)

7. Myems_energy_model_db (energieverbruiksmodusdatabase)

Doel: Opslag van 8760-urige jaarlijkse energieverbruiksmodusgegevens (8760 uur per jaar).

Kenmerken:

  • Elk object slaat 8760 records op (urige gegevens voor één jaar)
  • Wordt gebruikt voor energieverbruiksvoorspelling en planning
  • De tabellennaam bevat de suffix _8760

Hoofdtabel:

TabellennaamUitlegSleutelveld
tbl_meter_87608760-urige meterstandmeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Apparaatinvoerenergieverbruiksmodusequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Gecombineerd apparaatinvoerenergieverbruiksmoduscombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Ruimte-invoerenergieverbruiksmodusspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Werkplaatsinvoerenergieverbruiksmodusshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Winkelinvoerenergieverbruiksmodusstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Huurderinvoerenergieverbruiksmodustenant_id, energy_category_id, start_datetime_utc, actual_value

Ontwikkelvoorzorgsmaatregelen:

  • De 8760-urige modus wordt meestal gegenereerd op basis van historische gegevens of standaardmodellen
  • Wordt gebruikt voor jaarlijkse energieverbruiksvoorspelling en begroting opstellen
  • Ondersteunt weergave per dimensie zoals week, maand, kwartaal, etc.

8. myems_energy_plan_db (energieplandatabase)

Doel: Opslaat energieplan- en doelsgegevens.

Kenmerken:

  • Tabellenstructuur is vergelijkbaar met myems_energy_db
  • Slaat geplande waarden op in plaats van daadwerkelijke waarden
  • Wordt gebruikt voor energieverbruiksbegroting en doelbeheer

Hoofdtabellen:

  • Dezelfde tabellenstructuur als myems_energy_db
  • Gegevens komen uit planbestanden of handmatige invoer

Ontwikkelnotities:

  • Plangegevens moeten worden vergeleken met daadwerkelijke gegevens voor analyse
  • Ondersteunt meerniveau plannen (jaarlijks, maandelijks, wekelijks, etc.)

9. myems_energy_prediction_db (energievoorspellingsdatabase)

Doel: Opslaat energieverbruiksvoorspellingsgegevens.

Kenmerken:

  • Tabellenstructuur is vergelijkbaar met myems_energy_db
  • Slaat voorspelde waarden op in plaats van daadwerkelijke waarden
  • Wordt gebruikt voor energieverbruiksvoorspelling en waarschuwingen

Hoofdtabellen:

  • Dezelfde tabellenstructuur als myems_energy_db
  • Gegevens worden gegenereerd door voorspellingsalgoritmen

Ontwikkelnotities:

  • Voorspellingsgegevens moeten regelmatig worden bijgewerkt
  • Ondersteunt meerdere voorspellingsalgoritmen (tijdreeksen, machine learning, etc.)
  • Voorspellingsnauwkeurigheid moet voortdurend worden geoptimaliseerd

10. Myems_fdd_db (foutdiagnosedatabase)

Doel: Opslaat gegevens gerelateerd aan foutdetectie en -diagnose.

Kenmerken:

  • Ondersteunt meerdere alarmkanalen (web, e-mail, SMS, WeChat, telefoon)
  • De regelengine ondersteunt complexe foutdetectielogica
  • Ondersteunt de bevestiging en afhandeling van foutberichten

Hoofdtabellenstructuur:

TabellennaamUitlegSleutelveld
tbl_rulesDiagnostische regelsid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesWebberichtid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesE-mailberichtid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxSMS-uitboxid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxSMS-inboxid, sender_mobile, message, status
tbl_wechat_messages_outboxWeChat-bericht verzendboxid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxWeChat-bericht inboxid, sender_openid, message, status
tbl_email_serversE-mailserverconfiguratieid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsWeChat-configuratieid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Regelcategorieën (category):

  • REALTIME: Real-time alarmen
  • SYSTEM: Systeemalarmen
  • SPACE: Ruimtealarmen
  • METER: Meteralarmen
  • TENANT: Huurderalarmen
  • STORE: Winkelalarmen
  • SHOPFLOOR: Werkplaatsalarmen
  • EQUIPMENT: Apparaatalarmen
  • COMBINEDEQUIPMENT: Gecombineerde apparaatalarmen

Prioriteit (priority):

  • CRITICAL: Kritiek
  • HIGH: Hoog
  • MEDIUM: Gemiddeld
  • LOW: Laag

Ontwikkelnotities:

  • Het expression-veld slaat de regelexpressie in JSON-formaat op
  • message_template ondersteunt variabele substitutie (bijv. $name, $value)
  • Regels ondersteunen zowel geplande uitvoering als onmiddellijke uitvoering
  • Berichtstatus: newsentacknowledged / timeout

11. myems_user_db (gebruikersdatabase)

Doel: Opslaat gebruikersauthenticatie, API-sleutels, e-mailberichten, etc.

Kenmerken:

  • Kleine gegevenshoeveelheid, maar hoge beveiligingsvereisten
  • Ondersteunt gebruikersrechtenbeheer
  • Ondersteunt API-sleutelauthenticatie

Hoofdtabellenstructuur:

TabellennaamUitlegSleutelveld
tbl_usersGebruikersinformatieid, 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_privilegesRechtenconfiguratieid, name, data (in JSON-formaat)
tbl_sessionsGebruikerssessieid, user_uuid, token, utc_expires
tbl_api_keysAPI-sleutelid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesE-mailberichtid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsE-mailgesprekid, recipient_email, token, expires_datetime_utc
tbl_logsOperationeel logboekid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsMeldingsberichtid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNieuwe gebruiker (nog te activeren)id, name, uuid, display_name, email, salt, password
tbl_verification_codesCAPTCHAid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Beveiligingsontwerp:

  • Wachtwoorden worden opgeslagen met salt + hash, geen onbewerkte opslag
  • Ondersteunt vervaltijd van account en wachtwoord
  • Ondersteunt limieten voor mislukte inlogpogingen
  • API-sleutels ondersteunen vervaltijd

Ontwikkelnotities:

  • Wachtwoordvelden moeten versleuteld worden opgeslagen, niet rechtstreeks opgevraagd
  • Sessietokens moeten regelmatig worden opgeschoond om verlopen records te verwijderen
  • Operationele logboeken moeten alle kritische acties vastleggen voor auditing
  • Meldingsstatussen: unreadreadarchived

12. myems_reporting_db (rapportagedatabase)

Doel: Opslaat e-mailberichten en bijlagen gerelateerd aan rapporten.

Kenmerken:

  • Kleine gegevenshoeveelheid
  • Ondersteunt opslag van rapporttemplates en gegenereerde bestanden

Hoofdtabellenstructuur:

TabellennaamUitlegSleutelveld
tbl_reportsRapportconfiguratieid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesRapportdocumentid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesRapporttemplatebestandid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesE-mailberichtid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Ontwikkelnotities:

  • Rapportbestanden ondersteunen Excel-, PDF- en Word-formaten
  • Templatebestanden worden gebruikt voor het genereren van rapporten
  • Rapporten ondersteunen zowel geplande generatie als onmiddellijke generatie
  • Bestanden worden opgeslagen met LONGBLOB; let op groottebeperkingen

13. myems_production_db (productiedatabase)

Doel: Opslaat productiegerelateerde productgegevens.

Kenmerken:

  • Kleine gegevenshoeveelheid
  • Wordt gebruikt voor correlatieanalyse van productie-energieverbruik

Hoofdtabellenstructuur:

TabellennaamUitlegSleutelveld
tbl_productsProductinformatieid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsTeaminformatieid, name, uuid, description
tbl_shiftsWisselinformatieid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyUrig productievolume van de werkplaatsid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyUrig productievolume van de ruimteid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsAssociatie tussen werkplaats en productid, shopfloor_id, product_id
tbl_shopfloors_teamsAssociatie tussen werkplaats en teamid, shopfloor_id, team_id

Ontwikkelvoorzorgsmaatregelen:

  • Productiegegevens worden gebruikt om het energieverbruik per producteenheid te berekenen
  • Ondersteunt statistieken op basis van dimensies zoals product, team, werkplaats, etc.
  • Wordt geassocieerd met energieverbruiksgegevens om energie-efficiëntieindicatoren te berekenen

Gegevensstroomrelatie

Gegevensverzamelproces

Gegevensverzamelingsstroom

Apparaat / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Gegevensverzamelingsservice)
↓ (Schrijven)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Gegevensnormalisatie)
myems-normalization (Normalisatieservice)
↓ (Gegevensopschoning)
myems-cleaning (Opschoningsservice)
↓ (Gegevensaggregatie)
myems-aggregation (Aggregatieservice)
↓ (Schrijven)
myems_energy_db (Energiedata)
myems_billing_db (Factureringsgegevens)
myems_carbon_db (Koolstofemissiedata)

Gegevensopvragingsstroom

Gebruikersverzoek

myems-api (API-service)
↓ (Opvragen)
myems_system_db (Configuratiegegevens)
myems_historical_db (Historische gegevens)
myems_energy_db (Energiedata)
↓ (Antwoord)
myems-web / myems-admin (Frontend-weergave)

Gegevensrelatiediagram

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Aggregatieberekening)
myems_energy_db.tbl_meter_hourly
↓ (Link)
myems_system_db.tbl_meters
↓ (Link)
myems_system_db.tbl_equipments
↓ (Link)
myems_system_db.tbl_spaces

Specificatie tabellenstructuurontwerp

Algemene velden

Alle tabellen bevatten de volgende algemene velden:

VeldnaamTypeUitleg
idBIGINT NOT NULL AUTO_INCREMENTPrimaire sleutel, automatisch verhogend
nameVARCHAR(255)Naam
uuidCHAR(36)UUID, gebruikt voor integratie met externe systemen
descriptionVARCHAR(255)Beschrijving (optioneel)

Tijdveld

VeldnaamTypeUitleg
utc_date_timeDATETIMEUTC-tijd (historische gegevenstabel)
start_datetime_utcDATETIMEStarttijd van de tijdsperiode (geaggregeerde gegevenstabel)
created_datetime_utcDATETIMECreatietijd
updated_datetime_utcDATETIMEWijzigingstijd
last_run_datetime_utcDATETIMELaatste uitvoeringstijd
next_run_datetime_utcDATETIMEVolgende uitvoeringstijd

Opmerking: Alle tijdvelden moeten uniform UTC-tijd gebruiken, en de frontend-weergave moet worden geconverteerd naar lokale tijd.

Numeriek veld

VeldnaamTypeUitleg
actual_valueDECIMAL(21, 6)Daadwerkelijke waarde, ondersteunt hoge precisie (6 decimalen)
set_valueDECIMAL(21, 6)Instelwaarde
rated_capacityDECIMAL(21, 6)Nominaal vermogen
rated_powerDECIMAL(21, 6)Nominaal vermogen

JSON-velden

VeldnaamTypeUitleg
connectionLONGTEXTVerbindingsconfiguratie (JSON-formaat)
expressionLONGTEXTExpressie (JSON-formaat)
payloadLONGTEXTPayload (JSON-formaat)
dataLONGTEXTGegevens (JSON-formaat)

Opmerking: JSON-velden slaan opgemaakte JSON-tekenreeksen op en moeten voor gebruik worden geparseerd.

Statusveld

VeldnaamTypeUitleg
is_enabledBOOLIngeschakeld of niet
is_activeBOOLActivatiestatus
is_badBOOLZijn er ongeldige gegevens
is_publishedBOOLIs het gepubliceerd?
is_countedBOOLWordt het meegerekend in de statistieken
statusVARCHAR(32)Status (bijv. new, sent, done, error)

Indexontwerp

Primaire sleutelindex:

  • Alle tabellen hebben een PRIMARY KEY (id)

Unieke index:

  • Sleutelvelden (zoals name, uuid) hebben meestal unieke indexen

Samengestelde index:

  • Maak een samengestelde index voor vaak opgevraagde veldcombinaties
  • Bijvoorbeeld: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Tijdindex:

  • Het tijdveld wordt meestal afzonderlijk geïndexeerd en ondersteunt opvragingen per tijdsbereik