Zum Hauptinhalt springen

MyEMS Datenbankentwurf Dokument

Dieses Dokument richtet sich an Programmierer und bietet eine detaillierte Erklärung der Datenbankarchitektur, Tabellenstruktur und Designphilosophie des MyEMS Energiemanagementsystems.

Inhaltsverzeichnis


Datenbankarchitekturdesign

Designkonzept

  1. Datengetrenntlegung: Daten werden nach Typ und Verwendungszweck in unterschiedliche Datenbanken aufgeteilt, um zu verhindern, dass eine einzelne Datenbank zu groß wird
  2. Lese-Schreib-Trennung: Historische Daten werden in Zeitreihenform gespeichert, um effiziente Abfragen zu ermöglichen
  3. Horizontale Skalierung: Große Datenbanken (historical_db, energy_db) können unabhängig skaliert werden
  4. Einheitliche Standards: Alle Datenbanken verwenden denselben Zeichensatz und Sortierregeln

Datenbankkonfiguration

Alle Datenbanken verwenden einheitlich folgende Konfiguration:

  • Zeichensatz: utf8mb4 (unterstützt den vollständigen UTF-8-Zeichensatz inklusive Emojis)
  • Sortierregel: utf8mb4_unicode_ci (Unicode-Sortierregel)
  • Speicher-Engine: InnoDB (Standard, unterstützt Transaktionen und Fremdschlüssel)

Benennungskonventionen

  • Datenbankbenennung: myems_{Funktion}_db (Kleinbuchstaben, durch Unterstriche getrennt)
  • Tabellenbenennung: tbl_{Entitätsname} (Kleinbuchstaben, durch Unterstriche getrennt)
  • Feldbenennung: Kleinbuchstaben, durch Unterstriche getrennt, z. B. start_datetime_utc
  • Indexbenennung: tbl_{Tabellenname}_index_{Nummer}

Detaillierte Datenbankbeschreibung

1. Myems_system_db (Systemkonfigurationsdatenbank)

Zweck: Speichert die Basiskonfiguration und Metadaten des Systems, dient als zentrale Konfigurationsbibliothek des gesamten Systems.

Merkmale:

  • Enthält die meisten Tabellen (ca. 150+ Tabellen)
  • Datenvolumen ist relativ gering, aber die Struktur komplex
  • Enthält eine große Anzahl von Verknüpfungstabellen

Haupttabellenklassifizierung:

1.1 Basiskonfigurationstabellen

TabellennameErläuterungSchlüsselfeld
tbl_energy_categoriesEnergieklassifizierung (Strom, Wasser, Gas, Kälte, Wärme usw.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsEnergieverbrauchsunterpositionen (Beleuchtung, Klimaanlage, Leistung usw.)id, name, energy_category_id
tbl_cost_centersKostenstelleid, name, external_id
tbl_data_sourcesDatenquellenkonfigurationid, name, gateway_id, protocol, connection
tbl_protocolsProtokollkonfigurationid, name, protocol_type

1.2 Geräteverwaltungstabellen

TabellennameErläuterungSchlüsselfeld
tbl_equipmentsGeräteinformationenid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsKombinationsgerät (Kombination mehrerer Geräte)id, name, is_input_counted, is_output_counted
tbl_metersZählerinformationenid, name, uuid, energy_category_id, is_counted
tbl_offline_metersOffline-Zähler (manuell eingegeben)id, name, energy_category_id
tbl_virtual_metersVirtueller Zähler (berechnet)id, name, expression (im JSON-Format)
tbl_pointsDatenpunktinformationenid, name, data_source_id, object_type, object_id

1.3 Räumliche Organisationstabellen

TabellennameErläuterungSchlüsselfeld
tbl_spacesRäumliche Informationen (Räume, Etagen usw.)id, name, uuid, parent_space_id, area
tbl_storesLadeninformationenid, name, uuid, space_id
tbl_tenantsMieterinformationenid, name, uuid, space_id
tbl_shopfloorsWerkstattinformationenid, name, uuid, space_id

1.4 Verknüpfungsbeziehungstabellen

Das System verwendet eine große Anzahl von Verknüpfungstabellen zur Herstellung von Vielzahl-Vielzahl-Beziehungen:

  • tbl_equipments_meters: Verknüpfung zwischen Geräten und Zählern
  • tbl_equipments_offline_meters: Verknüpfung zwischen Geräten und Offline-Zählern
  • tbl_equipments_virtual_meters: Verknüpfung zwischen Geräten und virtuellen Zählern
  • tbl_spaces_equipments: Verknüpfung zwischen Räumen und Geräten
  • tbl_spaces_meters: Verknüpfung zwischen Räumen und Zählern
  • tbl_combined_equipments_equipments: Verknüpfung zwischen Kombinationsgeräten und Einzelgeräten
  • usw...

1.5 Liste der Neuenergiegeräte

TabellennameErläuterungSchlüsselfeld
tbl_photovoltaic_power_stationsPhotovoltaikanlageid, name, capacity, contact_id
tbl_energy_storage_containersEnergiespeichercontainerid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsEnergiespeicherwerkid, name, rated_capacity
tbl_microgridsMikronetzid, name, address
tbl_charging_stationsLadestationid, name, rated_capacity, rated_power

1.6 Steuer- und Planungstabellen

TabellennameErläuterungSchlüsselfeld
tbl_commandsSteuerbefehlid, name, topic, payload (im JSON-Format)
tbl_control_modesSteuerungsmodusid, name, is_active
tbl_control_modes_timesZeitraum des Steuerungsmodusid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Andere Konfigurationstabellen

  • tbl_contacts: Kontaktdaten
  • tbl_distribution_systems: Verteilsysteme
  • tbl_distribution_circuits: Verteilerkreise
  • tbl_energy_flow_diagrams: Energieflussdiagramme
  • tbl_tariffs: Stromtarifkonfiguration
  • tbl_working_calendars: Arbeitskalender
  • tbl_web_messages: Web-Nachrichten

Entwicklungsvorsichtsmaßnahmen:

  • Alle Tabellen haben id (BIGINT AUTO-INCREMENT) als Primärschlüssel
  • Die meisten Tabellen haben ein uuid-Feld (CHAR(36)) zur Integration externer Systeme
  • Verknüpfungstabellen enthalten in der Regel nur id und zwei Fremdschlüsselfelder
  • JSON-Felder verwenden den Typ LONGTEXT zur Speicherung formatierter JSON-Strings

2. Myems_historics_db (Historische Datenbank)

Zweck: Speichert Echtzeitüberwachungsdaten und historische Daten, gehört zu den Datenbanken mit dem größten Datenvolumen im System.

Merkmale:

  • Datenvolumen ist riesig, verwendet Zeitreihenspeicherung
  • Enthält Rohdaten und Tabelle mit neuesten Wertespeichern
  • Unterstützt Datenqualitätskennzeichnung (is_bad, is_published)

Haupttabellenstruktur:

TabellennameErläuterungSchlüsselfeldIndexstrategie
tbl_analog_valueAnaloge historische Datenpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestNeueste analoge Werte (Cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueDigitale historische Datenpoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestNeueste digitale Werte (Cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueHistorische Energieverbrauchsdatenpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestNeueste Energieverbrauchswerte (Cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueHistorische Textdatenpoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestNeueste Textdaten (Cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Dateispeichertabellen:

TabellennameErläuterungSchlüsselfeld
tbl_cost_filesKostendokument (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesOffline-Zählerdatenfilefile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesDatenreparaturfilefile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesEnergieverbrauchsplandokumentfile_name, uuid, upload_datetime_utc, status, file_object

Datentypbeschreibung:

  • actual_value: DECIMAL(21,6) - Unterstützt hochpräzise Werte mit 6 Dezimalstellen
  • utc_date_time: DATETIME - UTC-Zeit, alle Zeiten einheitlich in UTC
  • is_bad: BOOL - Datenqualitätskennzeichnung, True bedeutet fehlerhafte Daten
  • is_published: BOOL - Veröffentlichungsflag, True bedeutet veröffentlicht

Entwicklungsvorsichtsmaßnahmen:

  • Alle Zeitfelder verwenden UTC-Zeit, die Frontend-Anzeige wird in Ortszeit umgerechnet
  • Die _latest-Tabellen dienen zur schnellen Abfrage der neuesten Werte und vermeiden das Scannen historischer Tabellen
  • Dateitabellen verwenden LONGBLOB zur Speicherung binärer Dateien, beachten Sie Größenbeschränkungen
  • Historische Daten regelmäßig bereinigen, um zu verhindern, dass Tabellen zu groß werden und die Leistung beeinträchtigen

3. Myems_energy_db (Energieverbrauchs-Datenbank)

Zweck: Speichert Energieverbrauchsstatistiken verschiedener Geräte und aggregiert diese stündlich, täglich, monatlich und jährlich.

Merkmale:

  • Daten werden durch den myems-aggregation-Service berechnet und generiert
  • Nach Zeitgranularität in stündliche, tägliche, monatliche und jährliche Tabellen unterteilt
  • Unterstützt Statistiken nach Energiekategorie und Energieverbrauchsart

Tabellenbenennungsregeln:

  • tbl_{Objekttyp}_{Richtung}_{Klassifizierung}_{Zeitgranularität}
  • Objekttyp: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Richtung: input(Eingang), output(Ausgang)
  • Klassifizierung: category (Energiekategorie), item (Energieverbrauchsunterposition)
  • Zeitgranularität: hourly, daily, monthly, yearly

Haupttabellenstruktur:

3.1 Energieverbrauchszähler

TabellennameErläuterungSchlüsselfeld
tbl_meter_hourlyStündlicher Energieverbrauch des Zählersmeter_id, start_datetime_utc, actual_value
tbl_meter_dailyTäglicher Energieverbrauch des Zählersmeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyMonatlicher Energieverbrauch des Zählersmeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyJährlicher Energieverbrauch des Zählersmeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyStündlicher Energieverbrauch des Offline-Zählersoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyStündlicher Energieverbrauch des virtuellen Zählersvirtual_meter_id, start_datetime_utc, actual_value

3.2 Geräte-Energieverbrauchstabellen

TabellennameErläuterungSchlüsselfeld
tbl_equipment_input_category_hourlyEingangsenergieverbrauch des Geräts (nach Kategorie)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyEingangsenergieverbrauch des Geräts (nach Art)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyAusgangsenergieverbrauch des Geräts (nach Kategorie)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyEingangsenergieverbrauch des Kombinationsgeräts (nach Kategorie)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyAusgangsenergieverbrauch des Kombinationsgeräts (nach Kategorie)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Raum-Energieverbrauchstabellen

TabellennameErläuterungSchlüsselfeld
tbl_space_input_category_hourlyEingangsenergieverbrauch des Raums (nach Kategorie)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyEingangsenergieverbrauch des Raums (nach Art)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyAusgangsenergieverbrauch des Raums (nach Kategorie)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyEingangsenergieverbrauch des Ladensstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyEingangsenergieverbrauch des Mieterstenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyEingangsenergieverbrauch der Werkstattshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Energieverbrauchstabellen von Neuenergiegeräten

TabellennameErläuterungSchlüsselfeld
tbl_photovoltaic_power_station_hourlyStündliche Stromerzeugung der Photovoltaikanlagephotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyLadeleistung des Energiespeichercontainersenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyEntladeleistung des Energiespeichercontainersenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyStrombezug des Energiespeichercontainersenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyStromverkauf des Energiespeichercontainersenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyLadeleistung des Mikronetzesmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyEntladeleistung des Mikronetzesmicrogrid_id, start_datetime_utc, actual_value

Indexdesign:

  • Alle Tabellen haben einen zusammengesetzten Index: (Objekt-ID, Klassifizierungs-ID, start_datetime_utc) oder (Objekt-ID, start_datetime_utc)
  • Unterstützt schnelle Abfragen nach Objekt und Zeitbereich

Entwicklungsvorsichtsmaßnahmen:

  • start_datetime_utc stellt den Startzeitpunkt des Zeitraums dar (z. B. 2024-01-01 00:00:00 bedeutet 1. Januar von 0:00 bis 1:00 Uhr)
  • actual_value ist der aggregierte Wert, nicht der Rohwert
  • Daten werden regelmäßig durch den Aggregationsservice berechnet, nicht in Echtzeit geschrieben
  • Bei Abfragen auf Zeitzonenumrechnung achten

4. myems_billing_db (Abrechnungsdatenbank)

Zweck: Speichert abrechnungsbezogene Energieverbrauchsdaten. Ihre Struktur ähnelt myems_energy_db, aber die Daten werden auf Basis von Stromtarifen berechnet.

Merkmale:

  • Tabellenstruktur identisch mit myems_energy_db
  • Daten werden durch den myems-aggregation-Service anhand von Tarifkonfigurationen berechnet
  • Unterstützt komplexe Abrechnungsregeln wie Zeitzonentarife und Staffeltarife

Haupttabellen:

  • Gleiche Tabellenstruktur wie myems_energy_db
  • Datenwerte werden mit dem entsprechenden Tarif multipliziert, üblicherweise in Währungseinheiten (z. B. CNY, USD)

Entwicklungsnotizen:

  • Abrechnungsdaten hängen von der Tarifkonfiguration in myems_system_db.tbl_tariffs ab
  • Muss mit Kostenstellen (cost_center) verknüpft werden
  • Unterstützt mehrere Tarifstrategien (Zeitzonentarif, Staffelpreis, leistungsbasierter Tarif usw.)

5. myems_carbon_db (Kohlenstoffemissionsdatenbank)

Zweck: Speichert kohlenstoffemissionsbezogene Energiedaten zur Berechnung des Kohlenstofffußabdrucks.

Merkmale:

  • Tabellenstruktur identisch mit myems_energy_db
  • Daten werden durch den myems-aggregation-Service anhand von Kohlenstoffemissionsfaktoren berechnet
  • Kohlenstoffemissionsfaktoren sind in myems_system_db.tbl_energy_categories.kgco2e gespeichert

Haupttabellen:

  • Gleiche Tabellenstruktur wie myems_energy_db
  • Datenwerte werden mit dem Kohlenstoffemissionsfaktor multipliziert, üblicherweise in kgCO2e (Kilogramm CO₂-Äquivalent)

Entwicklungsnotizen:

  • Kohlenstoffemissionsfaktoren können sich im Laufe der Zeit ändern, daher müssen historische Faktoren unterstützt werden
  • Unterschiedliche Energietypen (Strom, Gas, Öl usw.) haben unterschiedliche Emissionsfaktoren
  • Unterstützt die Berechnung von Scope 1-, Scope 2- und Scope 3-Kohlenstoffemissionen

6. myems_energy_baseline_db (Energiebaseline-Datenbank)

Zweck: Speichert Energiebaselinedaten zur Energieeinsparungsanalyse und Energieeffizienzbewertung.

Merkmale:

  • Tabellenstruktur ähnelt myems_energy_db
  • Baselinedaten werden üblicherweise anhand historischer Daten oder Standardwerte berechnet
  • Wird zum Vergleich des tatsächlichen Energieverbrauchs mit dem Baseline-Verbrauch zur Berechnung von Energieeinsparungen verwendet

Haupttabellen:

  • Gleiche Tabellenstruktur wie myems_energy_db
  • Speichert Baselinewerte statt tatsächlicher Werte

Entwicklungsnotizen:

  • Baselinedaten müssen regelmäßig aktualisiert werden
  • Unterstützt mehrere Berechnungsmethoden für Baselines (historischer Durchschnitt, Regressionsanalyse, Standardwerte usw.)

7. Myems_energy_model_db (Energieverbrauchsmodell-Datenbank)

Zweck: Speichert Energiemodelldaten für 8760 Stunden pro Jahr (8760 Stunden pro Jahr).

Merkmale:

  • Jedes Objekt speichert 8760 Datensätze (stündliche Daten für ein Jahr)
  • Wird zur Energieverbrauchsprognose und -planung verwendet
  • Der Tabellenname enthält das Suffix _8760

Haupttabellen:

TabellennameErläuterungSchlüsselfeld
tbl_meter_87608760-Stunden-Modell des Zählersmeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Eingangsenergieverbrauchsmodell des Gerätsequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Eingangsenergieverbrauchsmodell des Kombinationsgerätscombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Eingangsenergieverbrauchsmodell des Raumsspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Eingangsenergieverbrauchsmodell der Werkstattshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Eingangsenergieverbrauchsmodell des Ladensstore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Eingangsenergieverbrauchsmodell des Mieterstenant_id, energy_category_id, start_datetime_utc, actual_value

Entwicklungsvorsichtsmaßnahmen:

  • Das 8760-Stunden-Modell wird üblicherweise anhand historischer Daten oder Standardmodelle generiert
  • Wird zur jährlichen Energieverbrauchsprognose und Budgetierung verwendet
  • Unterstützt die Anzeige nach Dimensionen wie Woche, Monat, Quartal usw.

8. myems_energy_plan_db (Energieplanungsdatenbank)

Zweck: Speichert Energieplanungs- und Zielwertdaten.

Merkmale:

  • Tabellenstruktur ähnelt myems_energy_db
  • Speichert Planwerte statt tatsächlicher Werte
  • Wird zur Energieverbrauchsbudgetierung und Zielmanagement verwendet

Haupttabellen:

  • Gleiche Tabellenstruktur wie myems_energy_db
  • Daten stammen aus Planungsdateien oder manueller Eingabe

Entwicklungsnotizen:

  • Planungsdaten müssen mit tatsächlichen Daten verglichen werden, um Analysen durchzuführen
  • Unterstützt mehrstufige Pläne (jährlich, monatlich, wöchentlich usw.)

9. myems_energy_prediction_db (Energieprognose-Datenbank)

Zweck: Speichert Energieverbrauchsprognosedaten.

Merkmale:

  • Tabellenstruktur ähnelt myems_energy_db
  • Speichert prognostizierte Werte statt tatsächlicher Werte
  • Wird zur Energieverbrauchsprognose und Warnung verwendet

Haupttabellen:

  • Gleiche Tabellenstruktur wie myems_energy_db
  • Daten werden durch Prognosealgorithmen generiert

Entwicklungsnotizen:

  • Prognosedaten müssen regelmäßig aktualisiert werden
  • Unterstützt mehrere Prognosealgorithmen (Zeitreihenanalyse, maschinelles Lernen usw.)
  • Prognosegenauigkeit bedarf kontinuierlicher Optimierung

10. Myems_fdd_db (Fehlerdiagnose-Datenbank)

Zweck: Speichert Daten im Zusammenhang mit Fehlererkennung und -diagnose.

Merkmale:

  • Unterstützt mehrere Alarmkanäle (Web, E-Mail, SMS, WeChat, Telefon)
  • Die Regelmaschine unterstützt komplexe Fehlererkennungslogik
  • Unterstützt die Bestätigung und Behandlung von Fehlermeldungen

Haupttabellenstruktur:

TabellennameErläuterungSchlüsselfeld
tbl_rulesDiagnose-Regelnid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesWeb-Nachrichtid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesE-Mail-Nachrichtid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxSMS-Outboxid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxSMS-Inboxid, sender_mobile, message, status
tbl_wechat_messages_outboxWeChat-Nachrichten-Outboxid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxWeChat-Nachrichten-Inboxid, sender_openid, message, status
tbl_email_serversE-Mail-Serverkonfigurationid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsWeChat-Konfigurationid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Regelkategorien (category):

  • REALTIME: Echtzeitalarme
  • SYSTEM: Systemalarme
  • SPACE: Raumalarme
  • METER: Zähleralarme
  • TENANT: Mieteralarme
  • STORE: Ladenalarme
  • SHOPFLOOR: Werkstattalarme
  • EQUIPMENT: Gerätealarme
  • COMBINEDEQUIPMENT: Kombinationsgerätealarme

Priorität (priority):

  • CRITICAL: Kritisch
  • HIGH: Hoch
  • MEDIUM: Mittel
  • LOW: Niedrig

Entwicklungsnotizen:

  • Das expression-Feld speichert den Regelausdruck im JSON-Format
  • message_template unterstützt Variablenersetzung (z. B. $name, $value)
  • Regeln unterstützen sowohl geplante als auch sofortige Ausführung
  • Nachrichtenstatus: newsentacknowledged / timeout

11. myems_user_db (Benutzerdatenbank)

Zweck: Speichert Benutzerauthentifizierung, API-Schlüssel, E-Mail-Nachrichten usw.

Merkmale:

  • Kleines Datenvolumen, aber hohe Sicherheitsanforderungen
  • Unterstützt Benutzerberechtigungsmanagement
  • Unterstützt API-Schlüsselauthentifizierung

Haupttabellenstruktur:

TabellennameErläuterungSchlüsselfeld
tbl_usersBenutzerinformationenid, 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_privilegesBerechtigungs-Konfigurationid, name, data (im JSON-Format)
tbl_sessionsBenutzersitzungid, user_uuid, token, utc_expires
tbl_api_keysAPI-Schlüsselid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesE-Mail-Nachrichtid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsE-Mail-Konversationid, recipient_email, token, expires_datetime_utc
tbl_logsOperationsprotokollid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsBenachrichtigungsnachrichtid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNeuer Benutzer (zu aktivieren)id, name, uuid, display_name, email, salt, password
tbl_verification_codesBestätigungscodeid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Sicherheitsdesign:

  • Passwörter werden mit Salt + Hash gespeichert, keine Klartextspeicherung
  • Unterstützt Ablaufzeiten für Konten und Passwörter
  • Unterstützt Limits für fehlgeschlagene Anmeldeversuche
  • API-Schlüssel unterstützen Ablaufzeiten

Entwicklungsnotizen:

  • Passwortfelder sollten zur Speicherung verschlüsselt werden, nicht direkt abfragen
  • Sitzungstoken regelmäßig bereinigen, um abgelaufene Einträge zu entfernen
  • Operationsprotokolle sollten alle kritischen Aktionen zur Überprüfung aufzeichnen
  • Benachrichtigungsstatus: unreadreadarchived

12. myems_reporting_db (Berichts-Datenbank)

Zweck: Speichert Berichtsbezogene E-Mail-Nachrichten und Anhänge.

Merkmale:

  • Kleines Datenvolumen
  • Unterstützt die Speicherung von Berichtsvorlagen und generierten Dateien

Haupttabellenstruktur:

TabellennameErläuterungSchlüsselfeld
tbl_reportsBerichts-Konfigurationid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesBerichtsdateiid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesBerichtsvorlagendateiid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesE-Mail-Nachrichtid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Entwicklungsnotizen:

  • Berichtsdateien unterstützen Excel-, PDF- und Word-Formate
  • Vorlagendateien werden zur Generierung von Berichten verwendet
  • Berichte unterstützen sowohl geplante als auch sofortige Generierung
  • Dateien werden mit LONGBLOB gespeichert; auf Größenbeschränkungen achten

13. myems_production_db (Produktionsdatenbank)

Zweck: Speichert produktionsbezogene Produktdaten.

Merkmale:

  • Kleines Datenvolumen
  • Wird zur korrelativen Analyse des Produktionsenergieverbrauchs verwendet

Haupttabellenstruktur:

TabellennameErläuterungSchlüsselfeld
tbl_productsProduktinformationenid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsTeaminformationenid, name, uuid, description
tbl_shiftsSchichtinformationenid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyStündliche Leistung der Werkstattid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyStündliche Leistung des Raumsid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsVerknüpfung zwischen Werkstatt und Produktid, shopfloor_id, product_id
tbl_shopfloors_teamsVerknüpfung zwischen Werkstatt und Teamid, shopfloor_id, team_id

Entwicklungsvorsichtsmaßnahmen:

  • Produktionsdaten werden zur Berechnung des spezifischen Energieverbrauchs pro Produkt verwendet
  • Unterstützt Statistiken nach Dimensionen wie Produkt, Team, Werkstatt usw.
  • Mit Energieverbrauchsdaten verknüpfen, um Energieeffizienzindikatoren zu berechnen

Datenflussbeziehung

Datenerfassungsprozess

Datenakquisitionsfluss

Gerät / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Datenakquisitions-Service)
↓ (Schreiben)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Datennormalisierung)
myems-normalization (Normalisierungs-Service)
↓ (Datareinigung)
myems-cleaning (Reinigungs-Service)
↓ (Datenaggregation)
myems-aggregation (Aggregations-Service)
↓ (Schreiben)
myems_energy_db (Energiedaten)
myems_billing_db (Abrechnungsdaten)
myems_carbon_db (Kohlenstoffemissionsdaten)

Datenabfragefluss

Benutzeranfrage

myems-api (API-Service)
↓ (Abfrage)
myems_system_db (Konfigurationsdaten)
myems_historical_db (Historische Daten)
myems_energy_db (Energiedaten)
↓ (Antwort)
myems-web / myems-admin (Frontend-Anzeige)

Datenbeziehungsdiagramm

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Aggregationsberechnung)
myems_energy_db.tbl_meter_hourly
↓ (Verknüpfung)
myems_system_db.tbl_meters
↓ (Verknüpfung)
myems_system_db.tbl_equipments
↓ (Verknüpfung)
myems_system_db.tbl_spaces

Tabellenstruktur-Designspezifikation

Allgemeine Felder

Alle Tabellen enthalten folgende gemeinsame Felder:

FeldnameTypErläuterung
idBIGINT NOT NULL AUTO_INCREMENTPrimärschlüssel, automatisch inkrementierend
nameVARCHAR(255)Name
uuidCHAR(36)UUID, zur Integration externer Systeme verwendet
descriptionVARCHAR(255)Beschreibung (optional)

Zeitfelder

FeldnameTypErläuterung
utc_date_timeDATETIMEUTC-Zeit (Historische Datentabelle)
start_datetime_utcDATETIMEStartzeit des Zeitraums (Aggregated Datentabelle)
created_datetime_utcDATETIMEErstellungszeit
updated_datetime_utcDATETIMEAktualisierungszeit
last_run_datetime_utcDATETIMELetzte Ausführungszeit
next_run_datetime_utcDATETIMENächste Ausführungszeit

Hinweis: Alle Zeitfelder sollten einheitlich UTC-Zeit verwenden, die Frontend-Anzeige muss in Ortszeit umgerechnet werden.

Numerische Felder

FeldnameTypErläuterung
actual_valueDECIMAL(21, 6)Tatsächlicher Wert, unterstützt hohe Präzision (6 Dezimalstellen)
set_valueDECIMAL(21, 6)Sollwert
rated_capacityDECIMAL(21, 6)Nennkapazität
rated_powerDECIMAL(21, 6)Nennleistung

JSON-Felder

FeldnameTypErläuterung
connectionLONGTEXTVerbindungskonfiguration (JSON-Format)
expressionLONGTEXTAusdruck (JSON-Format)
payloadLONGTEXTNutzdaten (JSON-Format)
dataLONGTEXTDaten (JSON-Format)

Hinweis: JSON-Felder speichern formatierte JSON-Strings, die vor der Verwendung geparst werden müssen.

Statusfelder

FeldnameTypErläuterung
is_enabledBOOLAktiviert oder nicht
is_activeBOOLAktivierungsstatus
is_badBOOLFehlerhafte Daten vorliegen
is_publishedBOOLVeröffentlicht oder nicht
is_countedBOOLIn Statistiken enthalten oder nicht
statusVARCHAR(32)Status (z. B. new, sent, done, error)

Indexdesign

Primärschlüsselindex:

  • Alle Tabellen haben einen PRIMARY KEY (id)

Eindeutiger Index:

  • Schlüsselfelder (wie name, uuid) haben in der Regel eindeutige Indizes

Zusammengesetzter Index:

  • Für häufig abgefragte Feldkombinationen einen zusammengesetzten Index erstellen
  • Beispiel: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Zeitindex:

  • Zeitfelder werden in der Regel separat indiziert und unterstützen Zeitbereichsabfragen