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
- Detaillierte Datenbankbeschreibung
- Datenflussbeziehung
- Tabellenstruktur-Designspezifikation
Datenbankarchitekturdesign
Designkonzept
- Datengetrenntlegung: Daten werden nach Typ und Verwendungszweck in unterschiedliche Datenbanken aufgeteilt, um zu verhindern, dass eine einzelne Datenbank zu groß wird
- Lese-Schreib-Trennung: Historische Daten werden in Zeitreihenform gespeichert, um effiziente Abfragen zu ermöglichen
- Horizontale Skalierung: Große Datenbanken (historical_db, energy_db) können unabhängig skaliert werden
- 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
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_energy_categories | Energieklassifizierung (Strom, Wasser, Gas, Kälte, Wärme usw.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Energieverbrauchsunterpositionen (Beleuchtung, Klimaanlage, Leistung usw.) | id, name, energy_category_id |
tbl_cost_centers | Kostenstelle | id, name, external_id |
tbl_data_sources | Datenquellenkonfiguration | id, name, gateway_id, protocol, connection |
tbl_protocols | Protokollkonfiguration | id, name, protocol_type |
1.2 Geräteverwaltungstabellen
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_equipments | Geräteinformationen | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Kombinationsgerät (Kombination mehrerer Geräte) | id, name, is_input_counted, is_output_counted |
tbl_meters | Zählerinformationen | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Offline-Zähler (manuell eingegeben) | id, name, energy_category_id |
tbl_virtual_meters | Virtueller Zähler (berechnet) | id, name, expression (im JSON-Format) |
tbl_points | Datenpunktinformationen | id, name, data_source_id, object_type, object_id |
1.3 Räumliche Organisationstabellen
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_spaces | Räumliche Informationen (Räume, Etagen usw.) | id, name, uuid, parent_space_id, area |
tbl_stores | Ladeninformationen | id, name, uuid, space_id |
tbl_tenants | Mieterinformationen | id, name, uuid, space_id |
tbl_shopfloors | Werkstattinformationen | id, 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ählerntbl_equipments_offline_meters: Verknüpfung zwischen Geräten und Offline-Zählerntbl_equipments_virtual_meters: Verknüpfung zwischen Geräten und virtuellen Zählerntbl_spaces_equipments: Verknüpfung zwischen Räumen und Gerätentbl_spaces_meters: Verknüpfung zwischen Räumen und Zählerntbl_combined_equipments_equipments: Verknüpfung zwischen Kombinationsgeräten und Einzelgeräten- usw...
1.5 Liste der Neuenergiegeräte
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_photovoltaic_power_stations | Photovoltaikanlage | id, name, capacity, contact_id |
tbl_energy_storage_containers | Energiespeichercontainer | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | Energiespeicherwerk | id, name, rated_capacity |
tbl_microgrids | Mikronetz | id, name, address |
tbl_charging_stations | Ladestation | id, name, rated_capacity, rated_power |
1.6 Steuer- und Planungstabellen
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_commands | Steuerbefehl | id, name, topic, payload (im JSON-Format) |
tbl_control_modes | Steuerungsmodus | id, name, is_active |
tbl_control_modes_times | Zeitraum des Steuerungsmodus | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Andere Konfigurationstabellen
tbl_contacts: Kontaktdatentbl_distribution_systems: Verteilsystemetbl_distribution_circuits: Verteilerkreisetbl_energy_flow_diagrams: Energieflussdiagrammetbl_tariffs: Stromtarifkonfigurationtbl_working_calendars: Arbeitskalendertbl_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
idund zwei Fremdschlüsselfelder - JSON-Felder verwenden den Typ
LONGTEXTzur 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:
| Tabellenname | Erläuterung | Schlüsselfeld | Indexstrategie |
|---|---|---|---|
tbl_analog_value | Analoge historische Daten | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_analog_value_latest | Neueste analoge Werte (Cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Digitale historische Daten | point_id, utc_date_time, actual_value (INT) | (point_id, utc_date_time), (utc_date_time) |
tbl_digital_value_latest | Neueste digitale Werte (Cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_energy_value | Historische Energieverbrauchsdaten | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_energy_value_latest | Neueste Energieverbrauchswerte (Cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_text_value | Historische Textdaten | point_id, utc_date_time, actual_value (LONGTEXT) | (point_id, utc_date_time), (utc_date_time) |
tbl_text_value_latest | Neueste Textdaten (Cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
Dateispeichertabellen:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_cost_files | Kostendokument (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | Offline-Zählerdatenfile | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | Datenreparaturfile | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Energieverbrauchsplandokument | file_name, uuid, upload_datetime_utc, status, file_object |
Datentypbeschreibung:
actual_value: DECIMAL(21,6) - Unterstützt hochpräzise Werte mit 6 Dezimalstellenutc_date_time: DATETIME - UTC-Zeit, alle Zeiten einheitlich in UTCis_bad: BOOL - Datenqualitätskennzeichnung, True bedeutet fehlerhafte Datenis_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
LONGBLOBzur 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
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_meter_hourly | Stündlicher Energieverbrauch des Zählers | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Täglicher Energieverbrauch des Zählers | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Monatlicher Energieverbrauch des Zählers | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Jährlicher Energieverbrauch des Zählers | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Stündlicher Energieverbrauch des Offline-Zählers | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Stündlicher Energieverbrauch des virtuellen Zählers | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Geräte-Energieverbrauchstabellen
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_equipment_input_category_hourly | Eingangsenergieverbrauch des Geräts (nach Kategorie) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Eingangsenergieverbrauch des Geräts (nach Art) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Ausgangsenergieverbrauch des Geräts (nach Kategorie) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Eingangsenergieverbrauch des Kombinationsgeräts (nach Kategorie) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_output_category_hourly | Ausgangsenergieverbrauch des Kombinationsgeräts (nach Kategorie) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
3.3 Raum-Energieverbrauchstabellen
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_space_input_category_hourly | Eingangsenergieverbrauch des Raums (nach Kategorie) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Eingangsenergieverbrauch des Raums (nach Art) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Ausgangsenergieverbrauch des Raums (nach Kategorie) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Eingangsenergieverbrauch des Ladens | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Eingangsenergieverbrauch des Mieters | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Eingangsenergieverbrauch der Werkstatt | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Energieverbrauchstabellen von Neuenergiegeräten
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Stündliche Stromerzeugung der Photovoltaikanlage | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Ladeleistung des Energiespeichercontainers | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Entladeleistung des Energiespeichercontainers | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Strombezug des Energiespeichercontainers | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Stromverkauf des Energiespeichercontainers | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Ladeleistung des Mikronetzes | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Entladeleistung des Mikronetzes | microgrid_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_utcstellt den Startzeitpunkt des Zeitraums dar (z. B. 2024-01-01 00:00:00 bedeutet 1. Januar von 0:00 bis 1:00 Uhr)actual_valueist 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_tariffsab - 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.kgco2egespeichert
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:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_meter_8760 | 8760-Stunden-Modell des Zählers | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Eingangsenergieverbrauchsmodell des Geräts | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Eingangsenergieverbrauchsmodell des Kombinationsgeräts | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Eingangsenergieverbrauchsmodell des Raums | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Eingangsenergieverbrauchsmodell der Werkstatt | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Eingangsenergieverbrauchsmodell des Ladens | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Eingangsenergieverbrauchsmodell des Mieters | tenant_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:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_rules | Diagnose-Regeln | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Web-Nachricht | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | E-Mail-Nachricht | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | SMS-Outbox | 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-Nachrichten-Outbox | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | WeChat-Nachrichten-Inbox | id, sender_openid, message, status |
tbl_email_servers | E-Mail-Serverkonfiguration | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | WeChat-Konfiguration | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Regelkategorien (category):
REALTIME: EchtzeitalarmeSYSTEM: SystemalarmeSPACE: RaumalarmeMETER: ZähleralarmeTENANT: MieteralarmeSTORE: LadenalarmeSHOPFLOOR: WerkstattalarmeEQUIPMENT: GerätealarmeCOMBINEDEQUIPMENT: Kombinationsgerätealarme
Priorität (priority):
CRITICAL: KritischHIGH: HochMEDIUM: MittelLOW: Niedrig
Entwicklungsnotizen:
- Das
expression-Feld speichert den Regelausdruck im JSON-Format message_templateunterstützt Variablenersetzung (z. B.$name,$value)- Regeln unterstützen sowohl geplante als auch sofortige Ausführung
- Nachrichtenstatus:
new→sent→acknowledged/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:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_users | Benutzerinformationen | 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 | Berechtigungs-Konfiguration | id, name, data (im JSON-Format) |
tbl_sessions | Benutzersitzung | id, user_uuid, token, utc_expires |
tbl_api_keys | API-Schlüssel | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | E-Mail-Nachricht | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | E-Mail-Konversation | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Operationsprotokoll | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Benachrichtigungsnachricht | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Neuer Benutzer (zu aktivieren) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | Bestätigungscode | id, 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:
unread→read→archived
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:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_reports | Berichts-Konfiguration | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | Berichtsdatei | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | Berichtsvorlagendatei | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | E-Mail-Nachricht | id, 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
LONGBLOBgespeichert; 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:
| Tabellenname | Erläuterung | Schlüsselfeld |
|---|---|---|
tbl_products | Produktinformationen | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Teaminformationen | id, name, uuid, description |
tbl_shifts | Schichtinformationen | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Stündliche Leistung der Werkstatt | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Stündliche Leistung des Raums | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Verknüpfung zwischen Werkstatt und Produkt | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Verknüpfung zwischen Werkstatt und Team | id, 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:
| Feldname | Typ | Erläuterung |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Primärschlüssel, automatisch inkrementierend |
name | VARCHAR(255) | Name |
uuid | CHAR(36) | UUID, zur Integration externer Systeme verwendet |
description | VARCHAR(255) | Beschreibung (optional) |
Zeitfelder
| Feldname | Typ | Erläuterung |
|---|---|---|
utc_date_time | DATETIME | UTC-Zeit (Historische Datentabelle) |
start_datetime_utc | DATETIME | Startzeit des Zeitraums (Aggregated Datentabelle) |
created_datetime_utc | DATETIME | Erstellungszeit |
updated_datetime_utc | DATETIME | Aktualisierungszeit |
last_run_datetime_utc | DATETIME | Letzte Ausführungszeit |
next_run_datetime_utc | DATETIME | Nächste Ausführungszeit |
Hinweis: Alle Zeitfelder sollten einheitlich UTC-Zeit verwenden, die Frontend-Anzeige muss in Ortszeit umgerechnet werden.
Numerische Felder
| Feldname | Typ | Erläuterung |
|---|---|---|
actual_value | DECIMAL(21, 6) | Tatsächlicher Wert, unterstützt hohe Präzision (6 Dezimalstellen) |
set_value | DECIMAL(21, 6) | Sollwert |
rated_capacity | DECIMAL(21, 6) | Nennkapazität |
rated_power | DECIMAL(21, 6) | Nennleistung |
JSON-Felder
| Feldname | Typ | Erläuterung |
|---|---|---|
connection | LONGTEXT | Verbindungskonfiguration (JSON-Format) |
expression | LONGTEXT | Ausdruck (JSON-Format) |
payload | LONGTEXT | Nutzdaten (JSON-Format) |
data | LONGTEXT | Daten (JSON-Format) |
Hinweis: JSON-Felder speichern formatierte JSON-Strings, die vor der Verwendung geparst werden müssen.
Statusfelder
| Feldname | Typ | Erläuterung |
|---|---|---|
is_enabled | BOOL | Aktiviert oder nicht |
is_active | BOOL | Aktivierungsstatus |
is_bad | BOOL | Fehlerhafte Daten vorliegen |
is_published | BOOL | Veröffentlicht oder nicht |
is_counted | BOOL | In Statistiken enthalten oder nicht |
status | VARCHAR(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