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
- Szczegółowy opis baz danych
- Relacje przepływu danych
- Specyfikacja projektowania struktury tabel
Projektowanie architektury bazy danych
Koncepcja projektowania
- 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.
- Separacja odczytu i zapisu: Dane historyczne są przechowywane w formacie szeregów czasowych, co umożliwia efektywne zapytania.
- Skalowanie poziome: Duże bazy danych (historical_db, energy_db) mogą być skalowane niezależnie.
- 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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_energy_categories | Kategorie energii (prąd, woda, gaz, chłód, ciepło itp.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Podpozycje zużycia energii (oświetlenie, klimatyzacja, moc itp.) | id, name, energy_category_id |
tbl_cost_centers | Centra kosztów | id, name, external_id |
tbl_data_sources | Konfiguracja źródeł danych | id, name, gateway_id, protocol, connection |
tbl_protocols | Konfiguracja protokołów | id, name, protocol_type |
1.2 Tabela zarządzania urządzeniami
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_equipments | Informacje o urządzeniach | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Urządzenia złożone (kombinacja wielu urządzeń) | id, name, is_input_counted, is_output_counted |
tbl_meters | Informacje o licznikach | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Liczniki offline (wprowadzane ręcznie) | id, name, energy_category_id |
tbl_virtual_meters | Liczniki wirtualne (obliczane) | id, name, expression (w formacie JSON) |
tbl_points | Informacje o punktach danych | id, name, data_source_id, object_type, object_id |
1.3 Tabela organizacji przestrzennej
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_spaces | Informacje o przestrzeniach (pokoje, piętra itp.) | id, name, uuid, parent_space_id, area |
tbl_stores | Informacje o sklepach | id, name, uuid, space_id |
tbl_tenants | Informacje o najemcach | id, name, uuid, space_id |
tbl_shopfloors | Informacje o halach produkcyjnych | id, 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 licznikamitbl_equipments_offline_meters: Asocjacja między urządzeniami a licznikami offlinetbl_equipments_virtual_meters: Asocjacja między urządzeniami a licznikami wirtualnymitbl_spaces_equipments: Asocjacja między przestrzeniami a urządzeniamitbl_spaces_meters: Asocjacja między przestrzeniami a licznikamitbl_combined_equipments_equipments: Asocjacja między urządzeniami złożonymi a urządzeniami- itd...
1.5 Lista urządzeń energii odnawialnej
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_photovoltaic_power_stations | Elektrownie fotowoltaiczne | id, name, capacity, contact_id |
tbl_energy_storage_containers | Kontenery magazynowania energii | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | Elektrownie magazynowania energii | id, name, rated_capacity |
tbl_microgrids | Mikrosieci | id, name, address |
tbl_charging_stations | Stacje ładowania | id, name, rated_capacity, rated_power |
1.6 Tabela sterowania i harmonogramowania
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_commands | Polecenia sterowania | id, name, topic, payload (w formacie JSON) |
tbl_control_modes | Tryby sterowania | id, name, is_active |
tbl_control_modes_times | Okresy czasu trybów sterowania | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Inne tabele konfiguracyjne
tbl_contacts: Informacje kontaktowetbl_distribution_systems: Systemy dystrybucyjnetbl_distribution_circuits: Obwody dystrybucyjnetbl_energy_flow_diagrams: Schematy przepływu energiitbl_tariffs: Konfiguracja cen energii elektrycznejtbl_working_calendars: Kalendarze roboczetbl_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
idi dwa pola kluczy obcych - Pola JSON używają typu
LONGTEXTdo 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 tabeli | Opis | Kluczowe pola | Strategia indeksowania |
|---|---|---|---|
tbl_analog_value | Historyczne dane analogowe | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_analog_value_latest | Najnowsza wartość analogowa (pamięć podręczna) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Historyczne dane cyfrowe | point_id, utc_date_time, actual_value (INT) | (point_id, utc_date_time), (utc_date_time) |
tbl_digital_value_latest | Najnowsza wartość cyfrowa (pamięć podręczna) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_energy_value | Historyczne dane zużycia energii | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_energy_value_latest | Najnowsza wartość zużycia energii (pamięć podręczna) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_text_value | Historyczne dane tekstowe | point_id, utc_date_time, actual_value (LONGTEXT) | (point_id, utc_date_time), (utc_date_time) |
tbl_text_value_latest | Najnowsza wartość tekstowa (pamięć podręczna) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
Tabela przechowywania plików:
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_cost_files | Pliki kosztów (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | Pliki danych liczników offline | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | Pliki naprawy danych | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Pliki planów zużycia energii | file_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 przecinkuutc_date_time: DATETIME - Czas UTC, wszystkie czasy są jednolicie używane w UTCis_bad: BOOL - Oznaczenie jakości danych, True oznacza złe daneis_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
_latestsłuży do szybkiego odpytywania najnowszych wartości i unikania skanowania tabel historycznych - Tabela plików używa
LONGBLOBdo 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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_meter_hourly | Godzinowe zużycie energii licznika | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Dzienowe zużycie energii licznika | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Miesięczne zużycie energii licznika | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Roczne zużycie energii licznika | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Godzinowe zużycie energii licznika offline | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Godzinowe zużycie energii licznika wirtualnego | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Tabela zużycia energii urządzeń
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_equipment_input_category_hourly | Wejściowe zużycie energii urządzenia (według kategorii) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Wejściowe zużycie energii urządzenia (według podpozycji) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Wyjściowe zużycie energii urządzenia (według kategorii) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Wejś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_hourly | Wyjś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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_space_input_category_hourly | Wejściowe zużycie energii przestrzeni (według kategorii) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Wejściowe zużycie energii przestrzeni (według podpozycji) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Wyjściowe zużycie energii przestrzeni (według kategorii) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Wejściowe zużycie energii sklepu | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Wejściowe zużycie energii najemcy | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Wejściowe zużycie energii hali produkcyjnej | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Tabela zużycia energii urządzeń energii odnawialnej
| Nazwa tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Godzinowa produkcja energii elektrowni fotowoltaicznej | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Pojemność ładowania kontenera magazynowania energii | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Pojemność rozładowania kontenera magazynowania energii | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Zakup energii elektrycznej przez kontener magazynowania energii | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Sprzedaż energii elektrycznej przez kontener magazynowania energii | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Pojemność ładowania mikrosieci | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Pojemność rozładowania mikrosieci | microgrid_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_utcoznacza czas rozpoczęcia okresu czasu (np. 2024-01-01 00:00:00 oznacza 1 stycznia od 0:00 do 1:00)actual_valuejest 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-aggregationprzy 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-aggregationna 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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_meter_8760 | Model 8760 godzin licznika | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Model wejściowego zużycia energii urządzenia | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Model wejściowego zużycia energii urządzenia złożonego | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Model wejściowego zużycia energii przestrzeni | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Model wejściowego zużycia energii hali produkcyjnej | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Model wejściowego zużycia energii sklepu | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Model wejściowego zużycia energii najemcy | tenant_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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_rules | Reguły diagnostyczne | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Wiadomości webowe | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | Wiadomości e-mail | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | Skrzynka nadawcza SMS | id, rule_id, recipient_mobile, message, status, acknowledge_code |
tbl_text_messages_inbox | Skrzynka odbiorcza SMS | id, sender_mobile, message, status |
tbl_wechat_messages_outbox | Skrzynka nadawcza wiadomości WeChat | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | Skrzynka odbiorcza wiadomości WeChat | id, sender_openid, message, status |
tbl_email_servers | Konfiguracja serwerów e-mail | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | Konfiguracja WeChat | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Kategorie reguł (category):
REALTIME: Alarmy w czasie rzeczywistymSYSTEM: Alarmy systemoweSPACE: Alarmy przestrzeniMETER: Alarmy licznikówTENANT: Alarmy najemcówSTORE: Alarmy sklepówSHOPFLOOR: Alarmy hal produkcyjnychEQUIPMENT: Alarmy urządzeńCOMBINEDEQUIPMENT: Alarmy urządzeń złożonych
Priorytet (priority):
CRITICAL: KrytycznyHIGH: WysokiMEDIUM: ŚredniLOW: Niski
Uwagi dla programistów:
- Pole
expressionprzechowuje wyrażenie reguły w formacie JSON message_templateobsługuje podstawianie zmiennych (np.$name,$value)- Reguły obsługują zarówno wykonywanie zaplanowane, jak i natychmiastowe
- Statusy wiadomości:
new→sent→acknowledged/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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_users | Informacje o użytkownikach | 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 | Konfiguracja uprawnień | id, name, data (w formacie JSON) |
tbl_sessions | Sesje użytkowników | id, user_uuid, token, utc_expires |
tbl_api_keys | Klucze API | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | Wiadomości e-mail | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | Konwersacje e-mail | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Dzienniki operacji | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Komunikaty powiadomień | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Nowi użytkownicy (do aktywacji) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | Kody weryfikacyjne | id, 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ń:
unread→read→archived
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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_reports | Konfiguracja raportów | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | Pliki raportów | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | Pliki szablonów raportów | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | Wiadomości e-mail | id, 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 tabeli | Opis | Kluczowe pola |
|---|---|---|
tbl_products | Informacje o produktach | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Informacje o zespołach | id, name, uuid, description |
tbl_shifts | Informacje o zmianach | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Godzinowa produkcja hali produkcyjnej | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Godzinowa produkcja przestrzeni | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Asocjacja hali produkcyjnej i produktu | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Asocjacja hali produkcyjnej i zespołu | id, 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 pola | Typ | Opis |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Klucz główny, autoinkrementujący |
name | VARCHAR(255) | Nazwa |
uuid | CHAR(36) | UUID, używane do integracji z systemami zewnętrznymi |
description | VARCHAR(255) | Opis (opcjonalnie) |
Pola czasu
| Nazwa pola | Typ | Opis |
|---|---|---|
utc_date_time | DATETIME | Czas UTC (tabela danych historycznych) |
start_datetime_utc | DATETIME | Czas rozpoczęcia okresu czasu (tabela danych zagregowanych) |
created_datetime_utc | DATETIME | Czas utworzenia |
updated_datetime_utc | DATETIME | Czas aktualizacji |
last_run_datetime_utc | DATETIME | Czas ostatniego uruchomienia |
next_run_datetime_utc | DATETIME | Czas 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 pola | Typ | Opis |
|---|---|---|
actual_value | DECIMAL(21, 6) | Wartość rzeczywista, obsługuje wysoką precyzję (6 miejsc po przecinku) |
set_value | DECIMAL(21, 6) | Wartość ustawiona |
rated_capacity | DECIMAL(21, 6) | Pojemność znamionowa |
rated_power | DECIMAL(21, 6) | Moc znamionowa |
Pola JSON
| Nazwa pola | Typ | Opis |
|---|---|---|
connection | LONGTEXT | Konfiguracja połączenia (w formacie JSON) |
expression | LONGTEXT | Wyrażenie (w formacie JSON) |
payload | LONGTEXT | Ładunek (w formacie JSON) |
data | LONGTEXT | Dane (w formacie JSON) |
Uwaga: Pola JSON przechowują sformatowane ciągi JSON i wymagają analizy przed użyciem.
Pola statusu
| Nazwa pola | Typ | Opis |
|---|---|---|
is_enabled | BOOL | Włączone lub nie |
is_active | BOOL | Status aktywacji |
is_bad | BOOL | Czy są złe dane |
is_published | BOOL | Czy zostało opublikowane |
is_counted | BOOL | Czy jest uwzględnione w statystykach |
status | VARCHAR(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