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
- Gedetailleerde databasebeschrijving
- Gegevensstroomrelatie
- Specificatie tabellenstructuurontwerp
Databasearchitectuurontwerp
Ontwerpconcept
- Gegevensscheiding: Scheid gegevens over verschillende databases op basis van gegevenstype en gebruik, om te voorkomen dat één enkele database te groot wordt
- Lees-schrijf scheiding: Historische gegevens worden opgeslagen in tijdreeksindeling, waardoor efficiënte opvraging mogelijk is
- Horizontale schaalbaarheid: Grote databases (
historical_db,energy_db) kunnen onafhankelijk geschaald worden - 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
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_energy_categories | Energieclassificatie (elektriciteit, water, gas, koude, warmte, etc.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Subitems energieverbruik (verlichting, airconditioning, vermogen, etc.) | id, name, energy_category_id |
tbl_cost_centers | Kostencentrum | id, name, external_id |
tbl_data_sources | Gegevensbronconfiguratie | id, name, gateway_id, protocol, connection |
tbl_protocols | Protocolconfiguratie | id, name, protocol_type |
1.2 Apparaatbeheertabel
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_equipments | Apparaatinformatie | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Gecombineerd apparaat (combinatie van meerdere apparaten) | id, name, is_input_counted, is_output_counted |
tbl_meters | Meterinformatie | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Offline meter (handmatig ingevoerd) | id, name, energy_category_id |
tbl_virtual_meters | Virtuele meter (berekend) | id, name, expression (in JSON-formaat) |
tbl_points | Gegevenspuntinformatie | id, name, data_source_id, object_type, object_id |
1.3 Ruimtelijke organisatietabel
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_spaces | Ruimtelijke informatie (kamers, verdiepingen, etc.) | id, name, uuid, parent_space_id, area |
tbl_stores | Winkelinformatie | id, name, uuid, space_id |
tbl_tenants | Huurderinformatie | id, name, uuid, space_id |
tbl_shopfloors | Werkplaatsinformatie | id, 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 meterstbl_equipments_offline_meters: Associatie tussen apparaten en offline meterstbl_equipments_virtual_meters: Associatie tussen apparaten en virtuele meterstbl_spaces_equipments: Associatie tussen ruimte en apparatentbl_spaces_meters: Associatie tussen ruimte en meterstbl_combined_equipments_equipments: Associatie tussen gecombineerde apparaten en apparaten- enz...
1.5 Lijst met duurzame energieapparaten
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_photovoltaic_power_stations | Fotovoltaïsche centrale | id, name, capacity, contact_id |
tbl_energy_storage_containers | Energieslagcontainer | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | Energieslagcentrale | id, name, rated_capacity |
tbl_microgrids | Microgrid | id, name, address |
tbl_charging_stations | Laadstation | id, name, rated_capacity, rated_power |
1.6 Besturings- en planningstabel
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_commands | Besturingsopdracht | id, name, topic, payload (in JSON-formaat) |
tbl_control_modes | Besturingsmodus | id, name, is_active |
tbl_control_modes_times | Tijdperiode besturingsmodus | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Andere configuratietabel
tbl_contacts: Contactinformatietbl_distribution_systems: Distributiesystementbl_distribution_circuits: Distributiekringentbl_energy_flow_diagrams: Energiefluxediagramtbl_tariffs: Elektriciteits prijsconfiguratietbl_working_calendars: Werkkalenderstbl_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
iden 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:
| Tabellennaam | Uitleg | Sleutelveld | Indexstrategie |
|---|---|---|---|
tbl_analog_value | Analoge historische gegevens | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_analog_value_latest | Meest recente analoge waarde (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Digitale historische gegevens | point_id, utc_date_time, actual_value (INT) | (point_id, utc_date_time), (utc_date_time) |
tbl_digital_value_latest | Meest recente numerieke waarde (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_energy_value | Historische energieverbruiksgegevens | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_energy_value_latest | Meest recente energieverbruikswaarde (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_text_value | Textuele historische gegevens | point_id, utc_date_time, actual_value (LONGTEXT) | (point_id, utc_date_time), (utc_date_time) |
tbl_text_value_latest | Meest recente textuele waarde (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
Bestandsopslagtabel:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_cost_files | Kostendocument (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | Offline metergegevensbestand | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | Gegevensherstelbestand | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Energieverbruiksplandocument | file_name, uuid, upload_datetime_utc, status, file_object |
Gegevenstypebeschrijving:
actual_value: DECIMAL(21,6) - Ondersteunt hoogwaardige numerieke waarden met 6 decimalenutc_date_time: DATETIME - UTC-tijd, alle tijden gebruiken uniform UTCis_bad: BOOL - Gegevenskwaliteitslabel, True duidt op ongeldige gegevens aanis_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
LONGBLOBom 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
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_meter_hourly | Urig energieverbruik van de meter | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Dagelijks energieverbruik van de meter | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Maandelijks energieverbruik van de meter | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Jaarlijks energieverbruik van de meter | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Urig energieverbruik van de offline meter | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Urig energieverbruik van de virtuele meter | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Apparaatenergieverbruikstabel
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_equipment_input_category_hourly | Apparaatinvoerenergieverbruik (per categorie) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Apparaatinvoerenergieverbruik (per item) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Apparaatuitvoerenergieverbruik (per categorie) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Gecombineerd apparaatinvoerenergieverbruik (per categorie) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_output_category_hourly | Gecombineerd apparaatuitvoerenergieverbruik (per categorie) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
3.3 Ruimteenergieverbruikstabel
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_space_input_category_hourly | Ruimte-invoerenergieverbruik (per categorie) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Ruimte-invoerenergieverbruik (per item) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Ruimte-uitvoerenergieverbruik (per categorie) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Winkelinvoerenergieverbruik | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Huurderinvoerenergieverbruik | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Werkplaatsinvoerenergieverbruik | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Energieverbruikstabel duurzame energieapparaten
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Urig opwekken van de fotovoltaïsche centrale | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Laadcapaciteit van de energieslagcontainer | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Ontlaadcapaciteit van de energieslagcontainer | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Energieslagcontainer koopt elektriciteit | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Energieslagcontainer verkoopt elektriciteit | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Microgrid laadcapaciteit | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Microgrid ontlaadcapaciteit | microgrid_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_utcvertegenwoordigt de starttijd van de tijdsperiode (bijv. 01-01-2024 00:00:00 vertegenwoordigt 1 januari van 00:00 tot 01:00)actual_valueis 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:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_meter_8760 | 8760-urige meterstand | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Apparaatinvoerenergieverbruiksmodus | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Gecombineerd apparaatinvoerenergieverbruiksmodus | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Ruimte-invoerenergieverbruiksmodus | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Werkplaatsinvoerenergieverbruiksmodus | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Winkelinvoerenergieverbruiksmodus | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Huurderinvoerenergieverbruiksmodus | tenant_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:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_rules | Diagnostische regels | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Webbericht | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | E-mailbericht | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | SMS-uitbox | id, rule_id, recipient_mobile, message, status, acknowledge_code |
tbl_text_messages_inbox | SMS-inbox | id, sender_mobile, message, status |
tbl_wechat_messages_outbox | WeChat-bericht verzendbox | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | WeChat-bericht inbox | id, sender_openid, message, status |
tbl_email_servers | E-mailserverconfiguratie | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | WeChat-configuratie | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Regelcategorieën (category):
REALTIME: Real-time alarmenSYSTEM: SysteemalarmenSPACE: RuimtealarmenMETER: MeteralarmenTENANT: HuurderalarmenSTORE: WinkelalarmenSHOPFLOOR: WerkplaatsalarmenEQUIPMENT: ApparaatalarmenCOMBINEDEQUIPMENT: Gecombineerde apparaatalarmen
Prioriteit (priority):
CRITICAL: KritiekHIGH: HoogMEDIUM: GemiddeldLOW: Laag
Ontwikkelnotities:
- Het
expression-veld slaat de regelexpressie in JSON-formaat op message_templateondersteunt 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:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_users | Gebruikersinformatie | 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 | Rechtenconfiguratie | id, name, data (in JSON-formaat) |
tbl_sessions | Gebruikerssessie | id, user_uuid, token, utc_expires |
tbl_api_keys | API-sleutel | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | E-mailbericht | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | E-mailgesprek | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Operationeel logboek | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Meldingsbericht | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Nieuwe gebruiker (nog te activeren) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | CAPTCHA | id, 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:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_reports | Rapportconfiguratie | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | Rapportdocument | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | Rapporttemplatebestand | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | E-mailbericht | id, 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:
| Tabellennaam | Uitleg | Sleutelveld |
|---|---|---|
tbl_products | Productinformatie | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Teaminformatie | id, name, uuid, description |
tbl_shifts | Wisselinformatie | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Urig productievolume van de werkplaats | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Urig productievolume van de ruimte | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Associatie tussen werkplaats en product | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Associatie tussen werkplaats en team | id, 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:
| Veldnaam | Type | Uitleg |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Primaire sleutel, automatisch verhogend |
name | VARCHAR(255) | Naam |
uuid | CHAR(36) | UUID, gebruikt voor integratie met externe systemen |
description | VARCHAR(255) | Beschrijving (optioneel) |
Tijdveld
| Veldnaam | Type | Uitleg |
|---|---|---|
utc_date_time | DATETIME | UTC-tijd (historische gegevenstabel) |
start_datetime_utc | DATETIME | Starttijd van de tijdsperiode (geaggregeerde gegevenstabel) |
created_datetime_utc | DATETIME | Creatietijd |
updated_datetime_utc | DATETIME | Wijzigingstijd |
last_run_datetime_utc | DATETIME | Laatste uitvoeringstijd |
next_run_datetime_utc | DATETIME | Volgende uitvoeringstijd |
Opmerking: Alle tijdvelden moeten uniform UTC-tijd gebruiken, en de frontend-weergave moet worden geconverteerd naar lokale tijd.
Numeriek veld
| Veldnaam | Type | Uitleg |
|---|---|---|
actual_value | DECIMAL(21, 6) | Daadwerkelijke waarde, ondersteunt hoge precisie (6 decimalen) |
set_value | DECIMAL(21, 6) | Instelwaarde |
rated_capacity | DECIMAL(21, 6) | Nominaal vermogen |
rated_power | DECIMAL(21, 6) | Nominaal vermogen |
JSON-velden
| Veldnaam | Type | Uitleg |
|---|---|---|
connection | LONGTEXT | Verbindingsconfiguratie (JSON-formaat) |
expression | LONGTEXT | Expressie (JSON-formaat) |
payload | LONGTEXT | Payload (JSON-formaat) |
data | LONGTEXT | Gegevens (JSON-formaat) |
Opmerking: JSON-velden slaan opgemaakte JSON-tekenreeksen op en moeten voor gebruik worden geparseerd.
Statusveld
| Veldnaam | Type | Uitleg |
|---|---|---|
is_enabled | BOOL | Ingeschakeld of niet |
is_active | BOOL | Activatiestatus |
is_bad | BOOL | Zijn er ongeldige gegevens |
is_published | BOOL | Is het gepubliceerd? |
is_counted | BOOL | Wordt het meegerekend in de statistieken |
status | VARCHAR(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