Pergi ke kandungan utama

Dokumen Reka Bentuk Pangkalan Data MyEMS

Dokumen ini bertujuan untuk pengaturcara dan menyediakan penjelasan terperinci mengenai arketekktur pangkalan data, struktur jadual, dan falsafah reka bentuk sistem pengurusan tenaga MyEMS.

Isi Kandungan


Reka bentuk arketekktur pangkalan data

Falsafah reka bentuk

  1. Pemisahan data: Pisahkan data ke dalam pangkalan data yang berbeza berdasarkan jenis data dan penggunaan untuk mengelakkan pangkalan data tunggal menjadi terlalu besar
  2. Pemisahan baca-tulis: Data sejarah disimpan dalam format siri masa, membolehkan pertanyaan cekap
  3. Pengskalaan mendatar: Pangkalan data besar (historical_db, energy_db) boleh diskala secara bebas
  4. Standard seragam: Semua pangkalan data menggunakan set karakter dan peraturan pengisihan yang sama

Konfigurasi pangkalan data

Semua pangkalan data menggunakan konfigurasi berikut secara seragam:

  • Set Karakter: utf8mb4 (menyokong set karakter UTF-8 lengkap, termasuk emoji)
  • Peraturan pengisihan: utf8mb4_unicode_ci (peraturan pengisihan Unicode)
  • Enjin storan: InnoDB (default, menyokong transaksi dan kunci asing)

Peraturan penamaan

  • Penamaan Pangkalan Data: myems_{Fungsi}_db (huruf kecil, dipisahkan oleh garis bawah)
  • Penamaan Jadual: tbl_{Nama Entiti} (huruf kecil, dipisahkan oleh garis bawah)
  • Penamaan Medan: Huruf kecil, dipisahkan oleh garis bawah, contohnya start_datetime_utc
  • Penamaan Indeks: tbl_{Nama Jadual}_index_{Nombor Siri}

Penerangan terperinci pangkalan data

1. Myems_system_db (pangkalan data konfigurasi sistem)

Tujuan: Konfigurasi asas dan metadata storan sistem, berfungsi sebagai perpustakaan konfigurasi teras keseluruhan sistem.

Ciri-ciri:

  • Mengandungi paling banyak jadual (kira-kira 150+ jadual)
  • Isipadu data agak kecil, tetapi struktur kompleks
  • Mengandungi sejumlah besar jadual persatuan

Klasifikasi Jadual Utama:

1.1 Jadual Konfigurasi Asas

nama jadualArahanmedan kunci
tbl_energy_categoriesPengelasan tenaga (elektrik, air, gas, sejuk, haba, dsb)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsSub item penggunaan tenaga (pencahayaan, pendingin udara, kuasa, dsb)id, name, energy_category_id
tbl_cost_centerspusat kosid, name, external_id
tbl_data_sourcesKonfigurasi Sumber Dataid, name, gateway_id, protocol, connection
tbl_protocolsKonfigurasi Protokolid, name, protocol_type

1.2 Jadual Pengurusan Peralatan

nama jadualArahanmedan kunci
tbl_equipmentsMaklumat Perantiid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsPeranti gabungan (gabungan beberapa peranti)id, name, is_input_counted, is_output_counted
tbl_metersmaklumat meterid, name, uuid, energy_category_id, is_counted
tbl_offline_metersMeter luar talian (dimasukkan secara manual)id, name, energy_category_id
tbl_virtual_metersMeter Maya (Dikira)id, name, expression (dalam format JSON)
tbl_pointsmaklumat titik dataid, name, data_source_id, object_type, object_id

1.3 Jadual Organisasi Spatial

nama jadualArahanmedan kunci
tbl_spacesMaklumat spatial (bilik, lantai, dsb)id, name, uuid, parent_space_id, area
tbl_storesMaklumat Kedaiid, name, uuid, space_id
tbl_tenantsmaklumat penyewaid, name, uuid, space_id
tbl_shopfloorsmaklumat bengkelid, name, uuid, space_id

1.4 Jadual Hubungan Persatuan

Sistem menggunakan sejumlah besar jadual persatuan untuk mewujudkan hubungan banyak ke banyak:

  • tbl_equipments_meters: Persatuan antara peralatan dan meter
  • tbl_equipments_offline_meters: Persatuan antara peralatan dan meter luar talian
  • tbl_equipments_virtual_meters: Persatuan antara peralatan dan meter maya
  • tbl_spaces_equipments: Persatuan antara ruang dan peralatan
  • tbl_spaces_meters: Persatuan antara ruang dan meter
  • tbl_combined_equipments_equipments: Persatuan antara peralatan gabungan dan peranti
  • dan lain-lain...

1.5 Senarai Peralatan Tenaga Baharu

nama jadualArahanmedan kunci
tbl_photovoltaic_power_stationsstesen kuasa fotovoltikid, name, capacity, contact_id
tbl_energy_storage_containersBeg storan tenagaid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationsstesen kuasa storan tenagaid, name, rated_capacity
tbl_microgridsmikrogidid, name, address
tbl_charging_stationsstesen pengecasanid, name, rated_capacity, rated_power

1.6 Jadual Kawalan dan Penjadwalan

nama jadualArahanmedan kunci
tbl_commandsperintah kawalanid, name, topic, payload (dalam format JSON)
tbl_control_modesmod kawalanid, name, is_active
tbl_control_modes_timesTempoh masa mod kawalanid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Jadual Konfigurasi Lain

  • tbl_contacts: Maklumat Hubungan
  • tbl_distribution_systems: Sistem Pengedaran
  • tbl_distribution_circuits: Litar Pengedaran
  • tbl_energy_flow_diagrams: Gambarajah Aliran Tenaga
  • tbl_tariffs: Konfigurasi harga elektrik
  • tbl_working_calendars: Kalendar kerja
  • tbl_web_messages: Mesej Web

Peringatan pembangunan:

  • Semua jadual mempunyai id (BIGINT AUTO-INCREMENT) sebagai kunci utama
  • Kebanyakan jadual mempunyai medan uuid (CHAR (36)) untuk integrasi sistem luaran
  • Jadual persatuan biasanya hanya mempunyai id dan dua medan kunci asing
  • Medan JSON menggunakan jenis LONGTEXT untuk menyimpan rentetan JSON berformat

2. Myems_historics_db (Pangkalan Data Data Sejarah)

Tujuan: Untuk menyimpan data pemantauan masa nyata dan data sejarah, dan merupakan salah satu pangkalan data terbesar dari segi isipadu data sistem.

Ciri-ciri:

  • Isipadu data sangat besar, dan penyimpanan siri masa digunakan
  • Mengandungi data mentah dan jadual cache nilai terkini
  • Menyokong pelabelan kualiti data (is_bad, is_published)

Struktur Jadual Utama:

nama jadualArahanmedan kunciStrategi Indeks
tbl_analog_valueData sejarah analogpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestNilai analog terkini (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueData sejarah digitalpoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestNilai berangka terkini (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueData penggunaan tenaga sejarahpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestNilai penggunaan tenaga terkini (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueData sejarah isipadu tekspoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestNilai isipadu teks terkini (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Jadual Storan Fail:

nama jadualArahanmedan kunci
tbl_cost_filesDokumen kos (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesFail data meter luar talianfile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesFail pembaikan datafile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesDokumen pelan penggunaan tenagafile_name, uuid, upload_datetime_utc, status, file_object

Penerangan Jenis Data:

  • actual_value: DECIMAL (21,6) - Menyokong nilai berangka presisi tinggi dengan 6 tempat perpuluhan
  • utc_date_time: DATETIME - Masa UTC, semua masa menggunakan UTC secara seragam
  • is_bad: BOOL - Label Kualiti Data, True menunjukkan data rosak
  • is_published: BOOL - tanda terbit, True menunjukkan telah diterbitkan

Peringatan pembangunan:

  • Semua medan masa menggunakan masa UTC, dan paparan hadapan ditukar kepada masa tempatan
  • Jadual _latest digunakan untuk menyemak nilai terkini dengan cepat dan mengelakkan mengimbas jadual sejarah
  • Jadual fail menggunakan LONGBLOB untuk menyimpan fail binari, perhatikan had saiz
  • Bersihkan data sejarah secara berkala untuk mengelakkan jadual terlalu besar dan menjejaskan prestasi

3. Myems_energy_db (pangkalan data penggunaan tenaga)

Tujuan: Untuk menyimpan statistik penggunaan tenaga pelbagai peranti dan mengagregatkannya mengikut jam, hari, bulan dan tahun.

Ciri-ciri:

  • Data dikira dan dijana oleh perkhidmatan myems-aggregation
  • Dibahagikan mengikut kehalusan masa kepada jadual jam, harian, bulanan dan tahunan
  • Menyokong statistik mengikut kategori tenaga dan item penggunaan tenaga

Peraturan Penamaan Jadual:

  • tbl_{Jenis Objek}_{Arah}_{Klasifikasi}_{Kehalusan Masa}
  • Jenis objek: meter, equipment, combined_equipment, space, store, tenant, shopfloor
  • Arah: input(input), output(output)
  • Kategori: category (kategori tenaga), item (sub item penggunaan tenaga)
  • Kehalusan masa: hourly, daily, monthly, yearly

Struktur Jadual Utama:

3.1 Meter penggunaan tenaga

nama jadualArahanmedan kunci
tbl_meter_hourlyPenggunaan tenaga meter setiap jammeter_id, start_datetime_utc, actual_value
tbl_meter_dailyPenggunaan tenaga meter harianmeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyPenggunaan tenaga meter bulananmeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyPenggunaan tenaga meter tahunanmeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyPenggunaan tenaga meter luar talian setiap jamoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyPenggunaan tenaga meter maya setiap jamvirtual_meter_id, start_datetime_utc, actual_value

3.2 Jadual Penggunaan Tenaga Peralatan

nama jadualArahanmedan kunci
tbl_equipment_input_category_hourlyPenggunaan tenaga input peralatan (mengikut kategori)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyPenggunaan tenaga input peralatan (mengikut item)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyPenggunaan tenaga output peralatan (mengikut kategori)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyPenggunaan tenaga input peranti gabungan (mengikut kategori)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyPenggunaan tenaga output peralatan gabungan (mengikut klasifikasi)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Jadual Penggunaan Tenaga Ruang

nama jadualArahanmedan kunci
tbl_space_input_category_hourlyPenggunaan tenaga input ruang (mengikut kategori)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyPenggunaan tenaga input ruang (mengikut item)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyPenggunaan tenaga output ruang (mengikut klasifikasi)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyPenggunaan tenaga input kedaistore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyPenyewa memasukkan penggunaan tenagatenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyPenggunaan tenaga input bengkelshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Jadual Penggunaan Tenaga Peralatan Tenaga Baharu

nama jadualArahanmedan kunci
tbl_photovoltaic_power_station_hourlyHasil kuasa stesen kuasa fotovoltik setiap jamphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyKapasiti pengecasan beg storan tenagaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyKapasiti nyahcas beg storan tenagaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyBeg storan tenaga membeli elektrikenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyJualan elektrik dari beg storan tenagaenergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyKapasiti pengecasan mikrogidmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyKapasiti nyahcas mikrogidmicrogrid_id, start_datetime_utc, actual_value

Reka Bentuk Indeks:

  • Semua jadual mempunyai indeks komposit: (ID Objek, ID Klasifikasi, start_datetime_utc) atau (ID Objek, start_datetime_utc)
  • Menyokong pertanyaan cepat mengikut objek dan julat masa

Peringatan pembangunan:

  • start_datetime_utc mewakili masa permulaan tempoh masa (contoh: 1 Januari 2024-01 00:00:00 mewakili 1 Januari dari 0:00 hingga 1:00)
  • actual_value adalah nilai terkumpul, bukan nilai asal
  • Data dikira secara berkala oleh perkhidmatan agregasi, tidak ditulis secara masa nyata
  • Perhatikan penukaran zon masa apabila membuat pertanyaan

4. myems_billing_db (Pangkalan Data Penagihan)

Tujuan: Menyimpan data penggunaan tenaga berkaitan penagihan. Strukturnya serupa dengan myems_energy_db, tetapi data dikira berdasarkan tarif elektrik.

Ciri-ciri:

  • Struktur jadual adalah sama dengan myems_energy_db
  • Data dikira oleh perkhidmatan myems_aggregation menggunakan konfigurasi tarif
  • Menyokong peraturan penagihan kompleks seperti tarif mengikut masa penggunaan dan harga berperingkat

Jadual Utama:

  • Struktur jadual yang sama dengan myems_energy_db
  • Nilai data didarab dengan tarif yang sepadan, biasanya dalam unit mata wang (contoh: CNY, USD)

Nota Pembangunan:

  • Data penagihan bergantung pada konfigurasi tarif dalam myems_system_db.tbl_tariffs
  • Mesti dikaitkan dengan pusat kos (cost_center)
  • Menyokong pelbagai strategi tarif (mengikut masa penggunaan, berperingkat, berdasarkan kapasiti, dsb)

5. myems_carbon_db (Pangkalan Data Pelepasan Karbon)

Tujuan: Menyimpan data tenaga berkaitan pelepasan karbon untuk pengiraan kesan karbon.

Ciri-ciri:

  • Struktur jadual adalah sama dengan myems_energy_db
  • Data dikira oleh perkhidmatan myems_aggregation berdasarkan faktor pelepasan karbon
  • Faktor pelepasan karbon disimpan dalam myems_system_db.tbl_energy_categories.kgco2e

Jadual Utama:

  • Struktur jadual yang sama dengan myems_energy_db
  • Nilai data didarab dengan faktor pelepasan karbon, biasanya dalam kgCO2e (kilogram setara CO₂)

Nota Pembangunan:

  • Faktor pelepasan karbon mungkin berubah dari semasa ke semasa, jadi faktor sejarah mesti disokong
  • Jenis tenaga yang berbeza (elektrik, gas, minyak, dsb) mempunyai faktor pelepasan yang berbeza
  • Menyokong pengiraan pelepasan karbon Skop 1, Skop 2 dan Skop 3

6. myems_energy_baseline_db (Pangkalan Data Garisan Asas Tenaga)

Tujuan: Menyimpan data garisan asas tenaga untuk analisis penjimatan tenaga dan penilaian kecekapan tenaga.

Ciri-ciri:

  • Struktur jadual serupa dengan myems_energy_db
  • Data garisan asas biasanya dikira berdasarkan data sejarah atau nilai standard
  • Digunakan untuk membandingkan penggunaan tenaga sebenar dengan penggunaan garisan asas untuk mengira penjimatan tenaga

Jadual Utama:

  • Struktur jadual yang sama dengan myems_energy_db
  • Menyimpan nilai garisan asas dan bukannya nilai sebenar

Nota Pembangunan:

  • Data garisan asas perlu dikemas kini secara berkala
  • Menyokong pelbagai kaedah pengiraan garisan asas (purata sejarah, analisis regresi, nilai standard, dsb)

7. Myems_energy_model_db (pangkalan data model penggunaan tenaga)

Tujuan: Untuk menyimpan data model penggunaan tenaga 8760 jam tahunan (8760 jam setahun).

Ciri-ciri:

  • Setiap objek menyimpan 8760 rekod (data setiap jam untuk setahun)
  • Digunakan untuk ramalan dan perancangan penggunaan tenaga
  • Nama jadual mengandungi akhiran _8760

Jadual Utama:

nama jadualArahanmedan kunci
tbl_meter_8760Model 8760 jam metermeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Model penggunaan tenaga input peralatanequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Model penggunaan tenaga input peranti gabungancombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Model penggunaan tenaga input ruangspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Model penggunaan tenaga input bengkelshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Model penggunaan tenaga input kedaistore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Model penggunaan tenaga input penyewatenant_id, energy_category_id, start_datetime_utc, actual_value

Peringatan pembangunan:

  • Model 8760 jam biasanya dijana berdasarkan data sejarah atau model standard
  • Digunakan untuk ramalan penggunaan tenaga tahunan dan penyediaan belanjawan
  • Menyokong paparan mengikut dimensi seperti minggu, bulan, suku tahun, dsb

8. myems_energy_plan_db (Pangkalan Data Pelan Tenaga)

Tujuan: Menyimpan data pelan dan sasaran tenaga.

Ciri-ciri:

  • Struktur jadual serupa dengan myems_energy_db
  • Menyimpan nilai dirancang dan bukannya nilai sebenar
  • Digunakan untuk belanjawan penggunaan tenaga dan pengurusan sasaran

Jadual Utama:

  • Struktur jadual yang sama dengan myems_energy_db
  • Data berasal dari fail pelan atau input manual

Nota Pembangunan:

  • Data pelan perlu dibandingkan dengan data sebenar untuk analisis
  • Menyokong pelan berbilang peringkat (tahunan, bulanan, mingguan, dsb)

9. myems_energy_prediction_db (Pangkalan Data Ramalan Tenaga)

Tujuan: Menyimpan data ramalan penggunaan tenaga.

Ciri-ciri:

  • Struktur jadual serupa dengan myems_energy_db
  • Menyimpan nilai diramalkan dan bukannya nilai sebenar
  • Digunakan untuk ramalan dan amaran penggunaan tenaga

Jadual Utama:

  • Struktur jadual yang sama dengan myems_energy_db
  • Data dijana oleh algoritma ramalan

Nota Pembangunan:

  • Data ramalan perlu dikemas kini secara berkala
  • Menyokong pelbagai algoritma ramalan (siri masa, pembelajaran mesin, dsb)
  • Ketepatan ramalan perlu dioptimumkan secara berterusan

10. Myems_fdd_db (Pangkalan Data Diagnosis Kerosakan)

Tujuan: Untuk menyimpan data berkaitan dengan pengesanan dan diagnosis kerosakan.

Ciri-ciri:

  • Menyokong pelbagai saluran amaran (web, emel, SMS, WeChat, telefon)
  • Enjin peraturan menyokong logik pengesanan kerosakan kompleks
  • Menyokong pengesahan dan pengendalian mesej kerosakan

Struktur Jadual Utama:

nama jadualArahanmedan kunci
tbl_rulesPeraturan diagnosisid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesMesej Webid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesMesej emelid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxPetak keluar SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxpetak masuk smsid, sender_mobile, message, status
tbl_wechat_messages_outboxPetak penghantar mesej WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxPetak masuk mesej WeChatid, sender_openid, message, status
tbl_email_serversKonfigurasi Pelayan Emelid, host, port, requires_authentication, user_name, password, from_addr
tbl_wechat_configsKonfigurasi WeChatid, api_server, app_id, app_secret, access_token, expires_datetime_utc

Kategori Peraturan (category):

  • REALTIME: Amaran masa nyata
  • SYSTEM: Amaran sistem
  • SPACE: Amaran ruang
  • METER: Amaran meter
  • TENANT: Amaran penyewa
  • STORE: Amaran kedai
  • SHOPFLOOR: Amaran bengkel
  • EQUIPMENT: Amaran peralatan
  • COMBINEDEQUIPMENT: Amaran peralatan gabungan

Keutamaan (priority):

  • CRITICAL: Kritikal
  • HIGH: Tinggi
  • MEDIUM: Sederhana
  • LOW: Rendah

Nota Pembangunan:

  • Medan expression menyimpan ekspresi peraturan dalam format JSON
  • message_template menyokong penggantian pemboleh ubah (contoh: $name, $value)
  • Peraturan menyokong kedua-dua pelaksanaan yang dijadualkan dan pelaksanaan serta-merta
  • Status mesej: newsentacknowledged / timeout

11. myems_user_db (Pangkalan Data Pengguna)

Tujuan: Menyimpan pengesahan pengguna, kunci API, mesej emel, dsb.

Ciri-ciri:

  • Isipadu data kecil, tetapi keperluan keselamatan tinggi
  • Menyokong pengurusan kebenaran pengguna
  • Menyokong pengesahan kunci API

Struktur Jadual Utama:

nama jadualArahanmedan kunci
tbl_usersMaklumat Penggunaid, 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_privilegesKonfigurasi Kebenaranid, name, data (dalam format JSON)
tbl_sessionssesi penggunaid, user_uuid, token, utc_expires
tbl_api_keysKunci APIid, name, token, created_datetime_utc, expires_datetime_utc
tbl_email_messagesMesej emelid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsPerbualan Emelid, recipient_email, token, expires_datetime_utc
tbl_logsLog Operasiid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsMesej Pemberitahuanid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersPengguna baharu (belum diaktifkan)id, name, uuid, display_name, email, salt, password
tbl_verification_codesKod Pengesahanid, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc

Reka Bentuk Keselamatan:

  • Kata laluan disimpan menggunakan garam + hash, tiada storan teks biasa
  • Menyokong masa luput akaun dan kata laluan
  • Menyokong had percubaan kegagalan log masuk
  • Kunci API menyokong masa luput

Nota Pembangunan:

  • Medan kata laluan perlu disimpan secara terenkripsi, jangan semak secara langsung
  • Token sesi perlu dibersihkan secara berkala untuk menghapus rekod yang luput
  • Log operasi perlu merekod semua tindakan kritikal untuk audit
  • Status pemberitahuan: unreadreadarchived

12. myems_reporting_db (Pangkalan Data Pelaporan)

Tujuan: Menyimpan mesej emel dan lampiran berkaitan dengan laporan.

Ciri-ciri:

  • Isipadu data kecil
  • Menyokong penyimpanan templat laporan dan fail yang dijana

Struktur Jadual Utama:

nama jadualArahanmedan kunci
tbl_reportsKonfigurasi Laporanid, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately
tbl_reports_filesdokumen laporanid, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB)
tbl_template_filesFail Templat Laporanid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesMesej emelid, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status

Nota Pembangunan:

  • Fail laporan menyokong format Excel, PDF dan Word
  • Fail templat digunakan untuk menjana laporan
  • Laporan menyokong kedua-dua penjanaan yang dijadualkan dan penjanaan serta-merta
  • Fail disimpan menggunakan LONGBLOB; perhatikan had saiz

13. myems_production_db (Pangkalan Data Pengeluaran)

Tujuan: Menyimpan data produk berkaitan pengeluaran.

Ciri-ciri:

  • Isipadu data kecil
  • Digunakan untuk analisis korelasi penggunaan tenaga pengeluaran

Struktur Jadual Utama:

nama jadualArahanmedan kunci
tbl_productsMaklumat Produkid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsMaklumat Pasukanid, name, uuid, description
tbl_shiftsmaklumat Shiftid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyOutput setiap jam bengkelid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyOutput jam ruangid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsPersatuan bengkel dan produkid, shopfloor_id, product_id
tbl_shopfloors_teamsPersatuan bengkel dan pasukanid, shopfloor_id, team_id

Peringatan pembangunan:

  • Data pengeluaran digunakan untuk mengira penggunaan tenaga unit produk
  • Menyokong statistik berdasarkan dimensi seperti produk, pasukan, bengkel, dsb
  • Dikaitkan dengan data penggunaan tenaga untuk mengira penunjuk kecekapan tenaga

Hubungan aliran data

Proses pengumpulan data

Aliran Pemerolehan Data

Peranti / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Perkhidmatan Pemerolehan Data)
↓ (Tulis)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Penormalan Data)
myems-normalization (Perkhidmatan Penormalan)
↓ (Pembersihan Data)
myems-cleaning (Perkhidmatan Pembersihan)
↓ (Agregasi Data)
myems-aggregation (Perkhidmatan Agregasi)
↓ (Tulis)
myems_energy_db (Data Tenaga)
myems_billing_db (Data Penagihan)
myems_carbon_db (Data Pelepasan Karbon)

Aliran Pertanyaan Data

Permintaan Pengguna

myems-api (Perkhidmatan API)
↓ (Pertanyaan)
myems_system_db (Data Konfigurasi)
myems_historical_db (Data Sejarah)
myems_energy_db (Data Tenaga)
↓ (Respons)
myems-web / myems-admin (Paparan Hadapan)

Gambarajah Hubungan Data

myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Pengiraan Agregasi)
myems_energy_db.tbl_meter_hourly
↓ (Pautan)
myems_system_db.tbl_meters
↓ (Pautan)
myems_system_db.tbl_equipments
↓ (Pautan)
myems_system_db.tbl_spaces

Spesifikasi Reka Bentuk Struktur Jadual

Medan amalan

Semua jadual mengandungi medan biasa berikut:

nama medanjenisArahan
idBIGINT NOT NULL AUTO_INCREMENTKunci utama, auto increment
nameVARCHAR(255)nama
uuidCHAR(36)UUID, Digunakan untuk integrasi sistem luaran
descriptionVARCHAR(255)Penerangan (pilihan)

Medan masa

nama medanjenisArahan
utc_date_timeDATETIMEMasa UTC (jadual data sejarah)
start_datetime_utcDATETIMEMasa permulaan tempoh masa (jadual data terkumpul)
created_datetime_utcDATETIMEMasa Penciptaan
updated_datetime_utcDATETIMEMasa Kemas Kini
last_run_datetime_utcDATETIMEMasa terakhir dijalankan
next_run_datetime_utcDATETIMEMasa run seterusnya

Perhatian: Semua medan masa harus menggunakan masa UTC secara seragam, dan paparan hadapan harus ditukar kepada masa tempatan.

Medan berangka

nama medanjenisArahan
actual_valueDECIMAL(21, 6)Nilai sebenar, menyokong presisi tinggi (6 tempat perpuluhan)
set_valueDECIMAL(21, 6)nilai set
rated_capacityDECIMAL(21, 6)Kapasiti terkadar
rated_powerDECIMAL(21, 6)kuasa terkadar

Medan JSON

nama medanjenisArahan
connectionLONGTEXTKonfigurasi Sambungan (format JSON)
expressionLONGTEXTEkspresi (format JSON)
payloadLONGTEXTMuat (format JSON)
dataLONGTEXTData (format JSON)

Nota: Medan JSON menyimpan rentetan JSON berformat dan perlu diurai sebelum digunakan.

Medan status

nama medanjenisArahan
is_enabledBOOLSamada dibenarkan
is_activeBOOLStatus Pengaktifan
is_badBOOLAdakah terdapat data rosak
is_publishedBOOLAdakah ia telah dikeluarkan?
is_countedBOOLAdakah ia disertakan dalam statistik
statusVARCHAR(32)Status (contoh: baru, dihantar, selesai, ralat)

Reka Bentuk Indeks

Indeks kunci utama:

  • Semua jadual mempunyai PRIMARY KEY (id)

Indeks unik:

  • Medan kunci (seperti name, uuid) biasanya mempunyai indeks unik

Indeks komposit:

  • Mewujudkan indeks komposit untuk gabungan medan yang sering disemak
  • Contoh: (point_id, utc_date_time), (meter_id, start_datetime_utc)

Indeks masa:

  • Medan masa biasanya diindeks secara berasingan dan menyokong pertanyaan julat masa