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: new → sent → acknowledged / 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: unread → read → archived

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