Przejdź do głównej zawartości

Dokumentacja Projektowania Bazy Danych MyEMS

Ten dokument jest przeznaczony dla programistów i zawiera szczegółowe wyjaśnienie architektury bazy danych, struktury tabel oraz filozofii projektowania systemu zarządzania energią MyEMS.

Spis treści


Projektowanie architektury bazy danych

Koncepcja projektowania

  1. Separacja danych: Dane są rozdzielane na różne bazy danych w zależności od ich typu i zastosowania, aby uniknąć nadmiernego rozrostu pojedynczej bazy.
  2. Separacja odczytu i zapisu: Dane historyczne są przechowywane w formacie szeregów czasowych, co umożliwia efektywne zapytania.
  3. Skalowanie poziome: Duże bazy danych (historical_db, energy_db) mogą być skalowane niezależnie.
  4. Ujednolicone standardy: Wszystkie bazy danych używają tego samego zestawu znaków i reguł sortowania.

Konfiguracja baz danych

Wszystkie bazy danych używają następującej konfiguracji:

  • Zestaw znaków: utf8mb4 (obsługuje pełny zestaw znaków UTF-8, w tym emoji)
  • Reguła sortowania: utf8mb4_unicode_ci (reguła sortowania Unicode)
  • Silnik magazynu: InnoDB (domyślny, obsługuje transakcje i klucze obce)

Konwencje nazewnictwa

  • Nazewnictwo baz danych: myems_{Funkcja}_db (małe litery, rozdzielone podkreśleniem)
  • Nazewnictwo tabel: tbl_{NazwaEncji} (małe litery, rozdzielone podkreśleniem)
  • Nazewnictwo pól: Małe litery, rozdzielone podkreśleniem, np. start_datetime_utc
  • Nazewnictwo indeksów: tbl_{NazwaTabeli}_index_{NumerSekwencji}

Szczegółowy opis baz danych

1. myems_system_db (Baza danych konfiguracji systemowej)

Cel: Przechowywanie podstawowej konfiguracji i metadanych systemu, stanowiąca rdzeń konfiguracyjny całego systemu.

Cechy:

  • Zawiera najwięcej tabel (około 150+)
  • Objętość danych jest stosunkowo niewielka, ale struktura jest złożona
  • Zawiera dużą liczbę tabel asocjacyjnych

Główne klasyfikacje tabel:

1.1 Tabela podstawowej konfiguracji

Nazwa tabeliOpisKluczowe pola
tbl_energy_categoriesKategorie energii (prąd, woda, gaz, chłód, ciepło itp.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsPodpozycje zużycia energii (oświetlenie, klimatyzacja, moc itp.)id, name, energy_category_id
tbl_cost_centersCentra kosztówid, name, external_id
tbl_data_sourcesKonfiguracja źródeł danychid, name, gateway_id, protocol, connection
tbl_protocolsKonfiguracja protokołówid, name, protocol_type

1.2 Tabela zarządzania urządzeniami

Nazwa tabeliOpisKluczowe pola
tbl_equipmentsInformacje o urządzeniachid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsUrządzenia złożone (kombinacja wielu urządzeń)id, name, is_input_counted, is_output_counted
tbl_metersInformacje o licznikachid, name, uuid, energy_category_id, is_counted
tbl_offline_metersLiczniki offline (wprowadzane ręcznie)id, name, energy_category_id
tbl_virtual_metersLiczniki wirtualne (obliczane)id, name, expression (w formacie JSON)
tbl_pointsInformacje o punktach danychid, name, data_source_id, object_type, object_id

1.3 Tabela organizacji przestrzennej

Nazwa tabeliOpisKluczowe pola
tbl_spacesInformacje o przestrzeniach (pokoje, piętra itp.)id, name, uuid, parent_space_id, area
tbl_storesInformacje o sklepachid, name, uuid, space_id
tbl_tenantsInformacje o najemcachid, name, uuid, space_id
tbl_shopfloorsInformacje o halach produkcyjnychid, name, uuid, space_id

1.4 Tabela relacji asocjacyjnych

System używa dużej liczby tabel asocjacyjnych do ustanawiania relacji wiele-do-wielu:

  • tbl_equipments_meters: Asocjacja między urządzeniami a licznikami
  • tbl_equipments_offline_meters: Asocjacja między urządzeniami a licznikami offline
  • tbl_equipments_virtual_meters: Asocjacja między urządzeniami a licznikami wirtualnymi
  • tbl_spaces_equipments: Asocjacja między przestrzeniami a urządzeniami
  • tbl_spaces_meters: Asocjacja między przestrzeniami a licznikami
  • tbl_combined_equipments_equipments: Asocjacja między urządzeniami złożonymi a urządzeniami
  • itd...

1.5 Lista urządzeń energii odnawialnej

Nazwa tabeliOpisKluczowe pola
tbl_photovoltaic_power_stationsElektrownie fotowoltaiczneid, name, capacity, contact_id
tbl_energy_storage_containersKontenery magazynowania energiiid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsElektrownie magazynowania energiiid, name, rated_capacity
tbl_microgridsMikrosieciid, name, address
tbl_charging_stationsStacje ładowaniaid, name, rated_capacity, rated_power

1.6 Tabela sterowania i harmonogramowania

Nazwa tabeliOpisKluczowe pola
tbl_commandsPolecenia sterowaniaid, name, topic, payload (w formacie JSON)
tbl_control_modesTryby sterowaniaid, name, is_active
tbl_control_modes_timesOkresy czasu trybów sterowaniaid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Inne tabele konfiguracyjne

  • tbl_contacts: Informacje kontaktowe
  • tbl_distribution_systems: Systemy dystrybucyjne
  • tbl_distribution_circuits: Obwody dystrybucyjne
  • tbl_energy_flow_diagrams: Schematy przepływu energii
  • tbl_tariffs: Konfiguracja cen energii elektrycznej
  • tbl_working_calendars: Kalendarze robocze
  • tbl_web_messages: Wiadomości webowe

Uwagi dla programistów:

  • Wszystkie tabele mają id (BIGINT AUTO-INCREMENT) jako klucz główny
  • Większość tabel ma pole uuid (CHAR(36)) do integracji z systemami zewnętrznymi
  • Tabele asocjacyjne zazwyczaj mają tylko id i dwa pola kluczy obcych
  • Pola JSON używają typu LONGTEXT do przechowywania sformatowanych ciągów JSON

2. myems_historical_db (Baza danych danych historycznych)

Cel: Przechowywanie danych monitorowania w czasie rzeczywistym i danych historycznych, stanowiąca jedną z największych baz danych pod względem objętości danych w systemie.

Cechy:

  • Ogromna objętość danych, używane jest magazynowanie szeregów czasowych
  • Zawiera dane surowe oraz tabelę pamięci podręcznej najnowszych wartości
  • Obsługuje oznaczanie jakości danych (is_bad, is_published)

Główna struktura tabel:

Nazwa tabeliOpisKluczowe polaStrategia indeksowania
tbl_analog_valueHistoryczne dane analogowepoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestNajnowsza wartość analogowa (pamięć podręczna)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueHistoryczne dane cyfrowepoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestNajnowsza wartość cyfrowa (pamięć podręczna)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueHistoryczne dane zużycia energiipoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestNajnowsza wartość zużycia energii (pamięć podręczna)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueHistoryczne dane tekstowepoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestNajnowsza wartość tekstowa (pamięć podręczna)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Tabela przechowywania plików:

Nazwa tabeliOpisKluczowe pola
tbl_cost_filesPliki kosztów (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesPliki danych liczników offlinefile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesPliki naprawy danychfile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesPliki planów zużycia energiifile_name, uuid, upload_datetime_utc, status, file_object

Opis typów danych:

  • actual_value: DECIMAL(21,6) - Obsługuje wartości liczbowe o wysokiej precyzji z 6 miejscami po przecinku
  • utc_date_time: DATETIME - Czas UTC, wszystkie czasy są jednolicie używane w UTC
  • is_bad: BOOL - Oznaczenie jakości danych, True oznacza złe dane
  • is_published: BOOL - Flaga publikacji, True oznacza opublikowane

Uwagi dla programistów:

  • Wszystkie pola czasu używają czasu UTC, a wyświetlanie na froncie jest konwertowane na czas lokalny
  • Tabela _latest służy do szybkiego odpytywania najnowszych wartości i unikania skanowania tabel historycznych
  • Tabela plików używa LONGBLOB do przechowywania plików binarnych, zwróć uwagę na ograniczenia rozmiaru
  • Regularnie czyszcz dane historyczne, aby uniknąć nadmiernego rozrostu tabel i wpływu na wydajność

3. myems_energy_db (Baza danych zużycia energii)

Cel: Przechowywanie statystyk zużycia energii różnych urządzeń, agregowanych według godzin, dni, miesięcy i lat.

Cechy:

  • Dane są obliczane i generowane przez usługę myems-aggregation
  • Podzielone według granulacji czasu na tabele godzinowe, dzienne, miesięczne i roczne
  • Obsługuje statystyki według kategorii energii i podpozycji zużycia energii

Reguły nazewnictwa tabel:

  • tbl_{TypObiektu}_{Kierunek}_{Klasyfikacja}_{GranulacjaCzasu}
  • Typ obiektu: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Kierunek: input (wejście), output (wyjście)
  • Klasyfikacja: category (kategoria energii), item (podpozycja zużycia energii)
  • Granulacja czasu: hourly, daily, monthly, yearly

Główna struktura tabel:

3.1 Tabela zużycia energii liczników

Nazwa tabeliOpisKluczowe pola
tbl_meter_hourlyGodzinowe zużycie energii licznikameter_id, start_datetime_utc, actual_value
tbl_meter_dailyDzienowe zużycie energii licznikameter_id, start_datetime_utc, actual_value
tbl_meter_monthlyMiesięczne zużycie energii licznikameter_id, start_datetime_utc, actual_value
tbl_meter_yearlyRoczne zużycie energii licznikameter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyGodzinowe zużycie energii licznika offlineoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyGodzinowe zużycie energii licznika wirtualnegovirtual_meter_id, start_datetime_utc, actual_value

3.2 Tabela zużycia energii urządzeń

Nazwa tabeliOpisKluczowe pola
tbl_equipment_input_category_hourlyWejściowe zużycie energii urządzenia (według kategorii)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyWejściowe zużycie energii urządzenia (według podpozycji)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyWyjściowe zużycie energii urządzenia (według kategorii)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyWejściowe zużycie energii urządzenia złożonego (według kategorii)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyWyjściowe zużycie energii urządzenia złożonego (według kategorii)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Tabela zużycia energii przestrzeni

Nazwa tabeliOpisKluczowe pola
tbl_space_input_category_hourlyWejściowe zużycie energii przestrzeni (według kategorii)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyWejściowe zużycie energii przestrzeni (według podpozycji)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyWyjściowe zużycie energii przestrzeni (według kategorii)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyWejściowe zużycie energii sklepustore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyWejściowe zużycie energii najemcytenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyWejściowe zużycie energii hali produkcyjnejshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Tabela zużycia energii urządzeń energii odnawialnej

Nazwa tabeliOpisKluczowe pola
tbl_photovoltaic_power_station_hourlyGodzinowa produkcja energii elektrowni fotowoltaicznejphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyPojemność ładowania kontenera magazynowania energiienergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyPojemność rozładowania kontenera magazynowania energiienergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyZakup energii elektrycznej przez kontener magazynowania energiienergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlySprzedaż energii elektrycznej przez kontener magazynowania energiienergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyPojemność ładowania mikrosiecimicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyPojemność rozładowania mikrosiecimicrogrid_id, start_datetime_utc, actual_value

Projektowanie indeksów:

  • Wszystkie tabele mają indeks złożony: (IdObiektu, IdKlasyfikacji, start_datetime_utc) lub (IdObiektu, start_datetime_utc)
  • Obsługuje szybkie zapytania według obiektu i zakresu czasu

Uwagi dla programistów:

  • start_datetime_utc oznacza czas rozpoczęcia okresu czasu (np. 2024-01-01 00:00:00 oznacza 1 stycznia od 0:00 do 1:00)
  • actual_value jest wartością zagregowaną, a nie wartością surową
  • Dane są okresowo obliczane przez usługę agregacji, a nie zapisywane w czasie rzeczywistym
  • Zwróć uwagę na konwersję stref czasowej podczas odpytywania

4. myems_billing_db (Baza danych rozliczeń)

Cel: Przechowywanie danych zużycia energii związanych z rozliczeniami. Jej struktura jest podobna do myems_energy_db, ale dane są obliczane na podstawie taryf energii elektrycznej.

Cechy:

  • Struktura tabel jest identyczna z myems_energy_db
  • Dane są obliczane przez usługę myems-aggregation przy użyciu konfiguracji taryf
  • Obsługuje złożone reguły rozliczeń, takie jak taryfy czasowe i ceny progresywne

Główne tabele:

  • Ta sama struktura tabel co myems_energy_db
  • Wartości danych są pomnożone przez odpowiednią taryfę, zazwyczaj w jednostkach walutowych (np. PLN, USD)

Uwagi dla programistów:

  • Dane rozliczeniowe zależą od konfiguracji taryf w myems_system_db.tbl_tariffs
  • Muszą być powiązane z centrami kosztów (cost_center)
  • Obsługuje wiele strategii taryfowych (czasowe, progresywne, pojemnościowe itp.)

5. myems_carbon_db (Baza danych emisji węgla)

Cel: Przechowywanie danych energetycznych związanych z emisją węgla do obliczeń śladu węglowego.

Cechy:

  • Struktura tabel jest identyczna z myems_energy_db
  • Dane są obliczane przez usługę myems-aggregation na podstawie współczynników emisji węgla
  • Współczynniki emisji węgla są przechowywane w myems_system_db.tbl_energy_categories.kgco2e

Główne tabele:

  • Ta sama struktura tabel co myems_energy_db
  • Wartości danych są pomnożone przez współczynnik emisji węgla, zazwyczaj w kgCO2e (kilogramy ekwiwalentu CO₂)

Uwagi dla programistów:

  • Współczynniki emisji węgla mogą zmieniać się w czasie, dlatego muszą być obsługiwane współczynniki historyczne
  • Różne typy energii (prąd, gaz, ropa itp.) mają różne współczynniki emisji
  • Obsługuje obliczenia emisji węgla w zakresie Scope 1, Scope 2 i Scope 3

6. myems_energy_baseline_db (Baza danych bazowych zużycia energii)

Cel: Przechowywanie danych bazowych zużycia energii do analizy oszczędności energii i oceny efektywności energetycznej.

Cechy:

  • Struktura tabel jest podobna do myems_energy_db
  • Dane bazowe są zazwyczaj obliczane na podstawie danych historycznych lub wartości standardowych
  • Służy do porównywania rzeczywistego zużycia energii z zużyciem bazowym w celu obliczenia oszczędności energii

Główne tabele:

  • Ta sama struktura tabel co myems_energy_db
  • Przechowuje wartości bazowe zamiast wartości rzeczywistych

Uwagi dla programistów:

  • Dane bazowe muszą być regularnie aktualizowane
  • Obsługuje wiele metod obliczania baz (średnia historyczna, analiza regresji, wartości standardowe itp.)

7. myems_energy_model_db (Baza danych modelu zużycia energii)

Cel: Przechowywanie danych modelu zużycia energii na 8760 godzin w roku (8760 godzin rocznie).

Cechy:

  • Każdy obiekt przechowuje 8760 rekordów (dane godzinowe na rok)
  • Służy do prognozowania i planowania zużycia energii
  • Nazwa tabeli zawiera sufiks _8760

Główna tabela:

Nazwa tabeliOpisKluczowe pola
tbl_meter_8760Model 8760 godzin licznikameter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Model wejściowego zużycia energii urządzeniaequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Model wejściowego zużycia energii urządzenia złożonegocombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Model wejściowego zużycia energii przestrzenispace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Model wejściowego zużycia energii hali produkcyjnejshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Model wejściowego zużycia energii sklepustore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Model wejściowego zużycia energii najemcytenant_id, energy_category_id, start_datetime_utc, actual_value

Uwagi dla programistów:

  • Model 8760 godzin jest zazwyczaj generowany na podstawie danych historycznych lub modeli standardowych
  • Służy do prognozowania rocznego zużycia energii i przygotowywania budżetu
  • Obsługuje przegląd według wymiarów takich jak tydzień, miesiąc, kwartał itp.

8. myems_energy_plan_db (Baza danych planów energetycznych)

Cel: Przechowywanie danych planów i celów energetycznych.

Cechy:

  • Struktura tabel jest podobna do myems_energy_db
  • Przechowuje wartości planowane zamiast wartości rzeczywistych
  • Służy do budżetowania zużycia energii i zarządzania celami

Główne tabele:

  • Ta sama struktura tabel co myems_energy_db
  • Dane pochodzą z plików planów lub wprowadzania ręcznego

Uwagi dla programistów:

  • Dane planów muszą być porównywane z danymi rzeczywistymi do analizy
  • Obsługuje plany wielopoziomowe (roczne, miesięczne, tygodniowe itp.)

9. myems_energy_prediction_db (Baza danych prognoz zużycia energii)

Cel: Przechowywanie danych prognoz zużycia energii.

Cechy:

  • Struktura tabel jest podobna do myems_energy_db
  • Przechowuje wartości prognozowane zamiast wartości rzeczywistych
  • Służy do prognozowania i ostrzegania o zużyciu energii

Główne tabele:

  • Ta sama struktura tabel co myems_energy_db
  • Dane są generowane przez algorytmy prognozowania

Uwagi dla programistów:

  • Dane prognoz muszą być regularnie aktualizowane
  • Obsługuje wiele algorytmów prognozowania (szeregi czasowe, uczenie maszynowe itp.)
  • Dokładność prognoz wymaga ciągłej optymalizacji

10. myems_fdd_db (Baza danych diagnostyki usterek)

Cel: Przechowywanie danych związanych z wykrywaniem i diagnostyką usterek.

Cechy:

  • Obsługuje wiele kanałów alertów (web, e-mail, SMS, WeChat, telefon)
  • Silnik reguł obsługuje złożoną logikę wykrywania usterek
  • Obsługuje potwierdzanie i obsługę komunikatów o usterkach

Główna struktura tabel:

Nazwa tabeliOpisKluczowe pola
tbl_rulesReguły diagnostyczneid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesWiadomości weboweid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesWiadomości e-mailid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxSkrzynka nadawcza SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxSkrzynka odbiorcza SMSid, sender_mobile, message, status
tbl_wechat_messages_outboxSkrzynka nadawcza wiadomości WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxSkrzynka odbiorcza wiadomości WeChatid, sender_openid, message, status
tbl_email_serversKonfiguracja serwerów e-mailid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsKonfiguracja WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Kategorie reguł (category):

  • REALTIME: Alarmy w czasie rzeczywistym
  • SYSTEM: Alarmy systemowe
  • SPACE: Alarmy przestrzeni
  • METER: Alarmy liczników
  • TENANT: Alarmy najemców
  • STORE: Alarmy sklepów
  • SHOPFLOOR: Alarmy hal produkcyjnych
  • EQUIPMENT: Alarmy urządzeń
  • COMBINEDEQUIPMENT: Alarmy urządzeń złożonych

Priorytet (priority):

  • CRITICAL: Krytyczny
  • HIGH: Wysoki
  • MEDIUM: Średni
  • LOW: Niski

Uwagi dla programistów:

  • Pole expression przechowuje wyrażenie reguły w formacie JSON
  • message_template obsługuje podstawianie zmiennych (np. $name, $value)
  • Reguły obsługują zarówno wykonywanie zaplanowane, jak i natychmiastowe
  • Statusy wiadomości: newsentacknowledged / timeout

11. myems_user_db (Baza danych użytkowników)

Cel: Przechowywanie uwierzytelnienia użytkowników, kluczy API, wiadomości e-mail itp.

Cechy:

  • Niewielka objętość danych, ale wysokie wymagania bezpieczeństwa
  • Obsługuje zarządzanie uprawnieniami użytkowników
  • Obsługuje uwierzytelnienie za pomocą kluczy API

Główna struktura tabel:

Nazwa tabeliOpisKluczowe pola
tbl_usersInformacje o użytkownikachid, 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_privilegesKonfiguracja uprawnieńid, name, data (w formacie JSON)
tbl_sessionsSesje użytkownikówid, user_uuid, token, utc_expires
tbl_api_keysKlucze APIid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesWiadomości e-mailid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsKonwersacje e-mailid, recipient_email, token, expires_datetime_utc
tbl_logsDzienniki operacjiid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsKomunikaty powiadomieńid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersNowi użytkownicy (do aktywacji)id, name, uuid, display_name, email, salt, password
tbl_verification_codesKody weryfikacyjneid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Projektowanie bezpieczeństwa:

  • Hasła są przechowywane przy użyciu soli + skrótu, brak przechowywania w postaci zwykłego tekstu
  • Obsługuje czas wygaśnięcia konta i hasła
  • Obsługuje limity prób nieudanych logowań
  • Klucze API obsługują czas wygaśnięcia

Uwagi dla programistów:

  • Pola haseł powinny być szyfrowane do przechowywania, nie odpytywać bezpośrednio
  • Tokeny sesji powinny być okresowo czyszczone w celu usunięcia wygasłych rekordów
  • Dzienniki operacji powinny rejestrować wszystkie krytyczne działania do audytu
  • Statusy powiadomień: unreadreadarchived

12. myems_reporting_db (Baza danych raportowania)

Cel: Przechowywanie wiadomości e-mail i załączników związanych z raportami.

Cechy:

  • Niewielka objętość danych
  • Obsługuje przechowywanie szablonów raportów i wygenerowanych plików

Główna struktura tabel:

Nazwa tabeliOpisKluczowe pola
tbl_reportsKonfiguracja raportówid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesPliki raportówid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesPliki szablonów raportówid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesWiadomości e-mailid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Uwagi dla programistów:

  • Pliki raportów obsługują formaty Excel, PDF i Word
  • Pliki szablonów są używane do generowania raportów
  • Raporty obsługują zarówno generowanie zaplanowane, jak i natychmiastowe
  • Pliki są przechowywane przy użyciu LONGBLOB; zwróć uwagę na ograniczenia rozmiaru

13. myems_production_db (Baza danych produkcji)

Cel: Przechowywanie danych produktów związanych z produkcją.

Cechy:

  • Niewielka objętość danych
  • Służy do analizy korelacji zużycia energii w produkcji

Główna struktura tabel:

Nazwa tabeliOpisKluczowe pola
tbl_productsInformacje o produktachid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsInformacje o zespołachid, name, uuid, description
tbl_shiftsInformacje o zmianachid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyGodzinowa produkcja hali produkcyjnejid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyGodzinowa produkcja przestrzeniid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsAsocjacja hali produkcyjnej i produktuid, shopfloor_id, product_id
tbl_shopfloors_teamsAsocjacja hali produkcyjnej i zespołuid, shopfloor_id, team_id

Uwagi dla programistów:

  • Dane produkcji są używane do obliczania zużycia energii na jednostkę produktu
  • Obsługuje statystyki według wymiarów takich jak produkt, zespół, hala produkcyjna itp.
  • Powiązanie z danymi zużycia energii w celu obliczenia wskaźników efektywności energetycznej

Relacje przepływu danych

Proces zbierania danych

Przepływ pozyskiwania danych

Urządzenie / Czujnik
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Usługa pozyskiwania danych)
↓ (Zapis)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Normalizacja danych)
myems-normalization (Usługa normalizacji)
↓ (Czyszczenie danych)
myems-cleaning (Usługa czyszczenia)
↓ (Agregacja danych)
myems-aggregation (Usługa agregacji)
↓ (Zapis)
myems_energy_db (Dane energetyczne)
myems_billing_db (Dane rozliczeniowe)
myems_carbon_db (Dane emisji węgla)

Przepływ odpytywania danych

Żądanie użytkownika

myems-api (Usługa API)
↓ (Odpytywanie)
myems_system_db (Dane konfiguracyjne)
myems_historical_db (Dane historyczne)
myems_energy_db (Dane energetyczne)
↓ (Odpowiedź)
myems-web / myems-admin (Wyświetlanie na froncie)

Schemat relacji danych

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Obliczenie agregacji)
myems_energy_db.tbl_meter_hourly
↓ (Powiązanie)
myems_system_db.tbl_meters
↓ (Powiązanie)
myems_system_db.tbl_equipments
↓ (Powiązanie)
myems_system_db.tbl_spaces

Specyfikacja projektowania struktury tabel

Pola ogólne

Wszystkie tabele zawierają następujące pola ogólne:

Nazwa polaTypOpis
idBIGINT NOT NULL AUTO_INCREMENTKlucz główny, autoinkrementujący
nameVARCHAR(255)Nazwa
uuidCHAR(36)UUID, używane do integracji z systemami zewnętrznymi
descriptionVARCHAR(255)Opis (opcjonalnie)

Pola czasu

Nazwa polaTypOpis
utc_date_timeDATETIMECzas UTC (tabela danych historycznych)
start_datetime_utcDATETIMECzas rozpoczęcia okresu czasu (tabela danych zagregowanych)
created_datetime_utcDATETIMECzas utworzenia
updated_datetime_utcDATETIMECzas aktualizacji
last_run_datetime_utcDATETIMECzas ostatniego uruchomienia
next_run_datetime_utcDATETIMECzas następnego uruchomienia

Uwaga: Wszystkie pola czasu powinny jednolicie używać czasu UTC, a wyświetlanie na froncie powinno być konwertowane na czas lokalny.

Pola liczbowe

Nazwa polaTypOpis
actual_valueDECIMAL(21, 6)Wartość rzeczywista, obsługuje wysoką precyzję (6 miejsc po przecinku)
set_valueDECIMAL(21, 6)Wartość ustawiona
rated_capacityDECIMAL(21, 6)Pojemność znamionowa
rated_powerDECIMAL(21, 6)Moc znamionowa

Pola JSON

Nazwa polaTypOpis
connectionLONGTEXTKonfiguracja połączenia (w formacie JSON)
expressionLONGTEXTWyrażenie (w formacie JSON)
payloadLONGTEXTŁadunek (w formacie JSON)
dataLONGTEXTDane (w formacie JSON)

Uwaga: Pola JSON przechowują sformatowane ciągi JSON i wymagają analizy przed użyciem.

Pola statusu

Nazwa polaTypOpis
is_enabledBOOLWłączone lub nie
is_activeBOOLStatus aktywacji
is_badBOOLCzy są złe dane
is_publishedBOOLCzy zostało opublikowane
is_countedBOOLCzy jest uwzględnione w statystykach
statusVARCHAR(32)Status (np. new, sent, done, error)

Projektowanie indeksów

Indeks klucza głównego:

  • Wszystkie tabele mają PRIMARY KEY (id)

Indeks unikalny:

  • Kluczowe pola (takie jak name, uuid) zazwyczaj mają indeksy unikalne

Indeks złożony:

  • Ustanowienie indeksu złożonego dla często odpytywanych kombinacji pól
  • Na przykład: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Indeks czasu:

  • Pole czasu jest zazwyczaj indeksowane oddzielnie, obsługuje zapytania o zakres czasu