Dokumen Desain Basis Data MyEMS
Dokumen ini ditujukan untuk programmer dan memberikan penjelasan rinci tentang arsitektur basis data, struktur tabel, dan filosofi desain sistem manajemen energi MyEMS.
Daftar Isi
- Desain arsitektur basis data
- Deskripsi rinci basis data
- Hubungan aliran data
- Spesifikasi Desain Struktur Tabel
Desain arsitektur basis data
Konsep desain
- Pemisahan data: Memisahkan data ke dalam basis data yang berbeda berdasarkan tipe data dan penggunaan untuk menghindari basis data tunggal menjadi terlalu besar
- Pemisahan baca-tulis: Data historis disimpan dalam format deret waktu, memungkinkan kueri yang efisien
- Skala horizontal: Basis data besar (
historical_db,energy_db) dapat diskalakan secara independen - Standar terpadu: Semua basis data menggunakan set karakter dan aturan pengurutan yang sama
Konfigurasi basis data
Semua basis data menggunakan konfigurasi berikut secara seragam:
- Set Karakter:
utf8mb4(mendukung set karakter UTF-8 lengkap, termasuk emoji) - Aturan Pengurutan:
utf8mb4_unicode_ci(aturan pengurutan Unicode) - Mesin Penyimpanan: InnoDB (default, mendukung transaksi dan kunci asing)
Konvensi penamaan
- Penamaan Basis Data:
myems_{Fungsi}_db(huruf kecil, dipisahkan dengan garis bawah) - Penamaan Tabel:
tbl_{Nama Entitas}(huruf kecil, dipisahkan dengan garis bawah) - Penamaan Bidang: Huruf kecil, dipisahkan dengan garis bawah, misalnya
start_datetime_utc - Penamaan Indeks:
tbl_{Nama Tabel}_index_{Nomor Urut}
Deskripsi rinci basis data
1. Myems_system_db (basis data konfigurasi sistem)
Tujuan: Menyimpan konfigurasi dasar dan metadata sistem, berfungsi sebagai pustaka konfigurasi inti dari seluruh sistem.
Fitur:
- Berisi paling banyak tabel (sekitar 150+ tabel)
- Volume data relatif kecil, tetapi strukturnya kompleks
- Berisi sejumlah besar tabel asosiasi
Klasifikasi Tabel Utama:
1.1 Tabel Konfigurasi Dasar
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_energy_categories | Klasifikasi energi (listrik, air, gas, dingin, panas, dll.) | id, name, unit_of_measure, kgce, kgco2e |
tbl_energy_items | Sub item konsumsi energi (pencahayaan, AC, daya, dll.) | id, name, energy_category_id |
tbl_cost_centers | Pusat biaya | id, name, external_id |
tbl_data_sources | Konfigurasi Sumber Data | id, name, gateway_id, protocol, connection |
tbl_protocols | Konfigurasi Protokol | id, name, protocol_type |
1.2 Tabel Manajemen Peralatan
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_equipments | Informasi Perangkat | id, name, uuid, equipment_type_id, cost_center_id |
tbl_combined_equipments | Perangkat gabungan (kombinasi beberapa perangkat) | id, name, is_input_counted, is_output_counted |
tbl_meters | Informasi meteran | id, name, uuid, energy_category_id, is_counted |
tbl_offline_meters | Meteran offline (dimasukkan secara manual) | id, name, energy_category_id |
tbl_virtual_meters | Meteran Virtual (Hitung) | id, name, expression (dalam format JSON) |
tbl_points | Informasi titik data | id, name, data_source_id, object_type, object_id |
1.3 Tabel Organisasi Spasial
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_spaces | Informasi spasial (ruangan, lantai, dll.) | id, name, uuid, parent_space_id, area |
tbl_stores | Informasi Toko | id, name, uuid, space_id |
tbl_tenants | informasi penyewa | id, name, uuid, space_id |
tbl_shopfloors | Informasi bengkel | id, name, uuid, space_id |
1.4 Tabel Hubungan Asosiasi
Sistem menggunakan sejumlah besar tabel asosiasi untuk membangun hubungan banyak ke banyak:
tbl_equipments_meters: Asosiasi antara perangkat dan meterantbl_equipments_offline_meters: Asosiasi antara perangkat dan meteran offlinetbl_equipments_virtual_meters: Asosiasi antara perangkat dan meteran virtualtbl_spaces_equipments: Asosiasi antara ruang dan perangkattbl_spaces_meters: Asosiasi antara ruang dan meterantbl_combined_equipments_equipments: Asosiasi antara perangkat gabungan dan perangkat- dll...
1.5 Daftar Peralatan Energi Baru
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_photovoltaic_power_stations | pembangkit listrik tenaga surya | id, name, capacity, contact_id |
tbl_energy_storage_containers | Wadah penyimpanan energi | id, name, rated_capacity, rated_power |
tbl_energy_storage_power_stations | pembangkit listrik penyimpanan energi | id, name, rated_capacity |
tbl_microgrids | mikrogrid | id, name, address |
tbl_charging_stations | stasiun pengisian daya | id, name, rated_capacity, rated_power |
1.6 Tabel Kontrol dan Penjadwalan
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_commands | perintah kontrol | id, name, topic, payload (dalam format JSON) |
tbl_control_modes | mode kontrol | id, name, is_active |
tbl_control_modes_times | Periode waktu mode kontrol | id, control_mode_id, start_time_of_day, end_time_of_day |
1.7 Tabel Konfigurasi Lainnya
tbl_contacts: Informasi kontaktbl_distribution_systems: Sistem distribusitbl_distribution_circuits: Sirkuit distribusitbl_energy_flow_diagrams: Diagram Aliran Energitbl_tariffs: Konfigurasi harga listriktbl_working_calendars: Kalender kerjatbl_web_messages: Pesan Web
Peringatan pengembangan:
- Semua tabel memiliki
id(BIGINT AUTO-INCREMENT) sebagai kunci utama - Sebagian besar tabel memiliki bidang
uuid(CHAR (36)) untuk integrasi sistem eksternal - Tabel asosiasi biasanya hanya memiliki
iddan dua bidang kunci asing - Bidang JSON menggunakan tipe
LONGTEXTuntuk menyimpan string JSON terformat
2. Myems_historics_db (Basis Data Data Historis)
Tujuan: Menyimpan data pemantauan real-time dan data historis, dan merupakan salah satu basis data terbesar dalam volume data sistem.
Fitur:
- Volume data sangat besar, dan menggunakan penyimpanan deret waktu
- Berisi data mentah dan tabel cache nilai terbaru
- Mendukung pelabelan kualitas data (
is_bad,is_published)
Struktur Tabel Utama:
| nama tabel | Instruksi | bidang kunci | Strategi Indeks |
|---|---|---|---|
tbl_analog_value | Data historis analog | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_analog_value_latest | Nilai analog terbaru (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_digital_value | Data historis digital | point_id, utc_date_time, actual_value (INT) | (point_id, utc_date_time), (utc_date_time) |
tbl_digital_value_latest | Nilai numerik terbaru (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_energy_value | Data historis konsumsi energi | point_id, utc_date_time, actual_value, is_bad, is_published | (point_id, utc_date_time), (utc_date_time) |
tbl_energy_value_latest | Nilai konsumsi energi terbaru (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
tbl_text_value | Data historis volume teks | point_id, utc_date_time, actual_value (LONGTEXT) | (point_id, utc_date_time), (utc_date_time) |
tbl_text_value_latest | Nilai volume teks terbaru (cache) | point_id, utc_date_time, actual_value | (point_id, utc_date_time) |
Tabel Penyimpanan File:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_cost_files | Dokumen biaya (Excel/CSV) | file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB) |
tbl_offline_meter_files | File data meteran offline | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_data_repair_files | File perbaikan data | file_name, uuid, upload_datetime_utc, status, file_object |
tbl_energy_plan_files | Dokumen rencana konsumsi energi | file_name, uuid, upload_datetime_utc, status, file_object |
Deskripsi Tipe Data:
actual_value: DECIMAL (21,6) - Mendukung nilai numerik presisi tinggi dengan 6 tempat desimalutc_date_time: DATETIME - Waktu UTC, semua waktu menggunakan UTC secara seragamis_bad: BOOL - Label Kualitas Data, True menunjukkan data burukis_published: BOOL - flag publikasi, True menunjukkan sudah dipublikasikan
Peringatan pengembangan:
- Semua bidang waktu menggunakan waktu UTC, dan tampilan front-end dikonversi ke waktu lokal
- Tabel
_latestdigunakan untuk kueri cepat nilai terbaru dan menghindari pemindaian tabel historis - Tabel file menggunakan
LONGBLOBuntuk menyimpan file biner, perhatikan batas ukuran - Bersihkan data historis secara teratur untuk menghindari tabel terlalu besar dan mempengaruhi kinerja
3. Myems_energy_db (basis data konsumsi energi)
Tujuan: Menyimpan statistik konsumsi energi berbagai perangkat dan mengagregasikannya per jam, hari, bulan, dan tahun.
Fitur:
- Data dihitung dan dihasilkan oleh layanan
myems-aggregation - Dibagi menurut granularitas waktu menjadi tabel jam, hari, bulan, dan tahun
- Mendukung statistik menurut kategori energi dan item konsumsi energi
Aturan Penamaan Tabel:
tbl_{Tipe Objek}_{Arah}_{Klasifikasi}_{Granularitas Waktu}- Tipe objek:
meter,equipment,combined_equipment,space,store,tenant,shopfloor - Arah:
input(masukan),output(keluaran) - Kategori:
category(kategori energi),item(sub item konsumsi energi) - Granularitas waktu:
hourly,daily,monthly,yearly
Struktur Tabel Utama:
3.1 Meteran konsumsi energi
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_meter_hourly | Konsumsi energi meteran per jam | meter_id, start_datetime_utc, actual_value |
tbl_meter_daily | Konsumsi energi meteran harian | meter_id, start_datetime_utc, actual_value |
tbl_meter_monthly | Konsumsi energi meteran bulanan | meter_id, start_datetime_utc, actual_value |
tbl_meter_yearly | Konsumsi energi meteran tahunan | meter_id, start_datetime_utc, actual_value |
tbl_offline_meter_hourly | Konsumsi energi meteran offline per jam | offline_meter_id, start_datetime_utc, actual_value |
tbl_virtual_meter_hourly | Konsumsi energi meteran virtual per jam | virtual_meter_id, start_datetime_utc, actual_value |
3.2 Tabel Konsumsi Energi Perangkat
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_equipment_input_category_hourly | Konsumsi energi masukan perangkat (berdasarkan kategori) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_equipment_input_item_hourly | Konsumsi energi masukan perangkat (berdasarkan item) | equipment_id, energy_item_id, start_datetime_utc, actual_value |
tbl_equipment_output_category_hourly | Konsumsi energi keluaran perangkat (berdasarkan kategori) | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_hourly | Konsumsi energi masukan perangkat gabungan (berdasarkan kategori) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_output_category_hourly | Konsumsi energi keluaran perangkat gabungan (berdasarkan klasifikasi) | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
3.3 Tabel Konsumsi Energi Spasial
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_space_input_category_hourly | Konsumsi energi masukan spasial (berdasarkan kategori) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_item_hourly | Konsumsi energi masukan spasial (berdasarkan item) | space_id, energy_item_id, start_datetime_utc, actual_value |
tbl_space_output_category_hourly | Konsumsi energi keluaran spasial (berdasarkan klasifikasi) | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_hourly | Konsumsi energi masukan toko | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_hourly | Penyewa memasukkan konsumsi energi | tenant_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_hourly | Konsumsi energi masukan bengkel | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
3.4 Tabel Konsumsi Energi Peralatan Energi Baru
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_photovoltaic_power_station_hourly | Pembangkitan daya pembangkit listrik tenaga surya per jam | photovoltaic_power_station_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_charge_hourly | Kapasitas pengisian wadah penyimpanan energi | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_discharge_hourly | Kapasitas pengeluaran wadah penyimpanan energi | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_buy_hourly | Wadah penyimpanan energi membeli listrik | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_energy_storage_container_grid_sell_hourly | Penjualan listrik dari wadah penyimpanan energi | energy_storage_container_id, start_datetime_utc, actual_value |
tbl_microgrid_charge_hourly | Kapasitas pengisian mikrogrid | microgrid_id, start_datetime_utc, actual_value |
tbl_microgrid_discharge_hourly | Kapasitas pengeluaran mikrogrid | microgrid_id, start_datetime_utc, actual_value |
Desain Indeks:
- Semua tabel memiliki indeks komposit:
(ID Objek, ID Klasifikasi, start_datetime_utc)atau(ID Objek, start_datetime_utc) - Mendukung kueri cepat menurut objek dan rentang waktu
Peringatan pengembangan:
start_datetime_utcmewakili waktu mulai periode waktu (misal 2024-01-01 00:00:00 mewakili 1 Januari dari 00:00 hingga 01:00)actual_valueadalah nilai teragregasi, bukan nilai asli- Data dihitung secara berkala oleh layanan agregasi, tidak ditulis secara real-time
- Perhatikan konversi zona waktu saat melakukan kueri
4. myems_billing_db (Basis Data Penagihan)
Tujuan: Menyimpan data konsumsi energi terkait penagihan. Strukturnya mirip dengan myems_energy_db, tetapi datanya dihitung berdasarkan tarif listrik.
Fitur:
- Struktur tabel identik dengan
myems_energy_db - Data dihitung oleh layanan
myems-aggregationmenggunakan konfigurasi tarif - Mendukung aturan penagihan kompleks seperti tarif berdasarkan waktu penggunaan dan harga bertingkat
Tabel Utama:
- Struktur tabel sama dengan
myems_energy_db - Nilai data dikalikan dengan tarif yang sesuai, biasanya dalam satuan mata uang (misal, CNY, USD)
Catatan Pengembangan:
- Data penagihan bergantung pada konfigurasi tarif di
myems_system_db.tbl_tariffs - Harus diasosiasikan dengan pusat biaya (
cost_center) - Mendukung berbagai strategi tarif (berdasarkan waktu penggunaan, bertingkat, berbasis kapasitas, dll.)
5. myems_carbon_db (Basis Data Emisi Karbon)
Tujuan: Menyimpan data energi terkait emisi karbon untuk perhitungan jejak karbon.
Fitur:
- Struktur tabel identik dengan
myems_energy_db - Data dihitung oleh layanan
myems_aggregationberdasarkan faktor emisi karbon - Faktor emisi karbon disimpan di
myems_system_db.tbl_energy_categories.kgco2e
Tabel Utama:
- Struktur tabel sama dengan
myems_energy_db - Nilai data dikalikan dengan faktor emisi karbon, biasanya dalam kgCO2e (kilogram setara CO₂)
Catatan Pengembangan:
- Faktor emisi karbon dapat berubah seiring waktu, sehingga harus mendukung faktor historis
- Jenis energi yang berbeda (listrik, gas, minyak, dll.) memiliki faktor emisi yang berbeda
- Mendukung perhitungan emisi karbon Scope 1, Scope 2, dan Scope 3
6. myems_energy_baseline_db (Basis Data Garis Dasar Energi)
Tujuan: Menyimpan data garis dasar energi untuk analisis hemat energi dan evaluasi efisiensi energi.
Fitur:
- Struktur tabel mirip dengan
myems_energy_db - Data garis dasar biasanya dihitung berdasarkan data historis atau nilai standar
- Digunakan untuk membandingkan konsumsi energi aktual dengan konsumsi garis dasar untuk menghitung penghematan energi
Tabel Utama:
- Struktur tabel sama dengan
myems_energy_db - Menyimpan nilai garis dasar bukan nilai aktual
Catatan Pengembangan:
- Data garis dasar perlu diperbarui secara teratur
- Mendukung berbagai metode perhitungan garis dasar (rata-rata historis, analisis regresi, nilai standar, dll.)
7. Myems_energy_model_db (basis data model konsumsi energi)
Tujuan: Menyimpan data model konsumsi energi 8760 jam per tahun (8760 jam per tahun).
Fitur:
- Setiap objek menyimpan 8760 catatan (data per jam untuk satu tahun)
- Digunakan untuk peramalan dan perencanaan konsumsi energi
- Nama tabel berisi akhiran
_8760
Tabel Utama:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_meter_8760 | Model 8760 jam meteran | meter_id, start_datetime_utc, actual_value |
tbl_equipment_input_category_8760 | Model konsumsi energi masukan perangkat | equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_combined_equipment_input_category_8760 | Model konsumsi energi masukan perangkat gabungan | combined_equipment_id, energy_category_id, start_datetime_utc, actual_value |
tbl_space_input_category_8760 | Model konsumsi energi masukan spasial | space_id, energy_category_id, start_datetime_utc, actual_value |
tbl_shopfloor_input_category_8760 | Model konsumsi energi masukan bengkel | shopfloor_id, energy_category_id, start_datetime_utc, actual_value |
tbl_store_input_category_8760 | Model konsumsi energi masukan toko | store_id, energy_category_id, start_datetime_utc, actual_value |
tbl_tenant_input_category_8760 | Model konsumsi energi masukan penyewa | tenant_id, energy_category_id, start_datetime_utc, actual_value |
Peringatan pengembangan:
- Model 8760 jam biasanya dihasilkan berdasarkan data historis atau model standar
- Digunakan untuk peramalan konsumsi energi tahunan dan persiapan anggaran
- Mendukung tampilan menurut dimensi seperti minggu, bulan, kuartal, dll.
8. myems_energy_plan_db (Basis Data Rencana Energi)
Tujuan: Menyimpan data rencana dan target energi.
Fitur:
- Struktur tabel mirip dengan
myems_energy_db - Menyimpan nilai direncanakan bukan nilai aktual
- Digunakan untuk anggaran konsumsi energi dan manajemen target
Tabel Utama:
- Struktur tabel sama dengan
myems_energy_db - Data berasal dari file rencana atau input manual
Catatan Pengembangan:
- Data rencana perlu dibandingkan dengan data aktual untuk analisis
- Mendukung rencana multi-level (tahunan, bulanan, mingguan, dll.)
9. myems_energy_prediction_db (Basis Data Prediksi Energi)
Tujuan: Menyimpan data prediksi konsumsi energi.
Fitur:
- Struktur tabel mirip dengan
myems_energy_db - Menyimpan nilai prediksi bukan nilai aktual
- Digunakan untuk peramalan dan peringatan konsumsi energi
Tabel Utama:
- Struktur tabel sama dengan
myems_energy_db - Data dihasilkan oleh algoritma prediksi
Catatan Pengembangan:
- Data prediksi perlu diperbarui secara teratur
- Mendukung berbagai algoritma prediksi (deret waktu, pembelajaran mesin, dll.)
- Akurasi prediksi perlu dioptimalkan secara berkelanjutan
10. Myems_fdd_db (Basis Data Diagnosa Kerusakan)
Tujuan: Menyimpan data terkait deteksi dan diagnosa kerusakan.
Fitur:
- Mendukung berbagai saluran peringatan (web, email, SMS, WeChat, telepon)
- Mesin aturan mendukung logika deteksi kerusakan yang kompleks
- Mendukung konfirmasi dan penanganan pesan kerusakan
Struktur Tabel Utama:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_rules | Aturan diagnostik | id, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled |
tbl_web_messages | Pesan Web | id, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id |
tbl_email_messages | Pesan email | id, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status |
tbl_text_messages_outbox | Kotak keluar SMS | id, rule_id, recipient_mobile, message, status, acknowledge_code |
tbl_text_messages_inbox | kotak masuk sms | id, sender_mobile, message, status |
tbl_wechat_messages_outbox | Kotak pengirim pesan WeChat | id, rule_id, recipient_openid, message_template_id, message_data (JSON) |
tbl_wechat_messages_inbox | Kotak masuk pesan WeChat | id, sender_openid, message, status |
tbl_email_servers | Konfigurasi Server Email | id, host, port, requires_authentication, user_name, password, from_addr |
tbl_wechat_configs | Konfigurasi WeChat | id, api_server, app_id, app_secret, access_token, expires_datetime_utc |
Kategori Aturan (category):
REALTIME: Peringatan real-timeSYSTEM: Peringatan sistemSPACE: Peringatan spasialMETER: Peringatan meteranTENANT: Peringatan penyewaSTORE: Peringatan tokoSHOPFLOOR: Peringatan bengkelEQUIPMENT: Peringatan perangkatCOMBINEDEQUIPMENT: Peringatan perangkat gabungan
Prioritas (priority):
CRITICAL: KritisHIGH: TinggiMEDIUM: SedangLOW: Rendah
Catatan Pengembangan:
- Bidang
expressionmenyimpan ekspresi aturan dalam format JSON message_templatemendukung substitusi variabel (misal,$name,$value)- Aturan mendukung eksekusi terjadwal dan eksekusi segera
- Status pesan:
new→sent→acknowledged/timeout
11. myems_user_db (Basis Data Pengguna)
Tujuan: Menyimpan autentikasi pengguna, kunci API, pesan email, dll.
Fitur:
- Volume data kecil, tetapi persyaratan keamanan tinggi
- Mendukung manajemen izin pengguna
- Mendukung autentikasi kunci API
Struktur Tabel Utama:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_users | Informasi Pengguna | 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 | Konfigurasi Izin | id, name, data (dalam format JSON) |
tbl_sessions | sesi pengguna | id, user_uuid, token, utc_expires |
tbl_api_keys | Kunci API | id, name, token, created_datetime_utc, expires_datetime_utc |
tbl_email_messages | Pesan email | id, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc |
tbl_email_message_sessions | Percakapan Email | id, recipient_email, token, expires_datetime_utc |
tbl_logs | Log operasi | id, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON) |
tbl_notifications | Pesan Pemberitahuan | id, user_id, created_datetime_utc, status, subject, message, url |
tbl_new_users | Pengguna baru (menunggu aktivasi) | id, name, uuid, display_name, email, salt, password |
tbl_verification_codes | Kode Verifikasi | id, recipient_email, verification_code, created_datetime_utc, expires_datetime_utc |
Desain Keamanan:
- Kata sandi disimpan menggunakan salt + hash, tidak disimpan dalam teks biasa
- Mendukung waktu kedaluwarsa akun dan kata sandi
- Mendukung batas upaya gagal login
- Kunci API mendukung waktu kedaluwarsa
Catatan Pengembangan:
- Bidang kata sandi harus dienkripsi untuk penyimpanan, jangan kueri secara langsung
- Token sesi harus dibersihkan secara berkala untuk menghapus catatan kedaluwarsa
- Log operasi harus mencatat semua tindakan kritis untuk audit
- Status pemberitahuan:
unread→read→archived
12. myems_reporting_db (Basis Data Pelaporan)
Tujuan: Menyimpan pesan email dan lampiran terkait laporan.
Fitur:
- Volume data kecil
- Mendukung penyimpanan template laporan dan file yang dihasilkan
Struktur Tabel Utama:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_reports | Konfigurasi Laporan | id, name, uuid, expression (JSON), is_enabled, last_run_datetime_utc, next_run_datetime_utc, is_run_immediately |
tbl_reports_files | dokumen laporan | id, uuid, create_datetime_utc, file_name, file_type (xlsx/pdf/docx), file_object (LONGBLOB) |
tbl_template_files | File Template Laporan | id, uuid, report_id, file_name, file_type, file_object |
tbl_email_messages | Pesan email | id, recipient_name, recipient_email, subject, message, attachment_file_name, attachment_file_object, status |
Catatan Pengembangan:
- File laporan mendukung format Excel, PDF, dan Word
- File template digunakan untuk menghasilkan laporan
- Laporan mendukung pembuatan terjadwal dan pembuatan segera
- File disimpan menggunakan
LONGBLOB; perhatikan batas ukuran
13. myems_production_db (Basis Data Produksi)
Tujuan: Menyimpan data produk terkait produksi.
Karakteristik:
- Volume data kecil
- Digunakan untuk analisis korelasi konsumsi energi produksi
Struktur Tabel Utama:
| nama tabel | Instruksi | bidang kunci |
|---|---|---|
tbl_products | Informasi Produk | id, name, uuid, unit_of_measure, tag, standard_product_coefficient |
tbl_teams | Informasi Tim | id, name, uuid, description |
tbl_shifts | Informasi shift | id, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp |
tbl_shopfloor_hourly | Output jam bengkel | id, shopfloor_id, start_datetime_utc, product_id, product_count |
tbl_space_hourly | Output jam spasial | id, space_id, start_datetime_utc, product_id, product_count |
tbl_shopfloors_products | Asosiasi bengkel dan produk | id, shopfloor_id, product_id |
tbl_shopfloors_teams | Asosiasi bengkel dan tim | id, shopfloor_id, team_id |
Peringatan pengembangan:
- Data produksi digunakan untuk menghitung konsumsi energi per unit produk
- Mendukung statistik berdasarkan dimensi seperti produk, tim, bengkel, dll.
- Berasosiasi dengan data konsumsi energi untuk menghitung indikator efisiensi energi
Hubungan aliran data
Proses pengumpulan data
Alur Akuisisi Data
Perangkat / Sensor
↓ (Modbus TCP / MQTT / HTTP)
myems-modbus-tcp (Layanan Akuisisi Data)
↓ (Tulis)
myems_historical_db.tbl_analog_value / tbl_digital_value / tbl_energy_value
↓ (Normalisasi Data)
myems-normalization (Layanan Normalisasi)
↓ (Pembersihan Data)
myems-cleaning (Layanan Pembersihan)
↓ (Agregasi Data)
myems-aggregation (Layanan Agregasi)
↓ (Tulis)
myems_energy_db (Data Energi)
myems_billing_db (Data Penagihan)
myems_carbon_db (Data Emisi Karbon)
Alur Kueri Data
Permintaan Pengguna
↓
myems-api (Layanan API)
↓ (Kueri)
myems_system_db (Data Konfigurasi)
myems_historical_db (Data Historis)
myems_energy_db (Data Energi)
↓ (Respons)
myems-web / myems-admin (Tampilan Frontend)
Diagram Hubungan Data
myems_system_db.tbl_points
↓ (point_id)
myems_historical_db.tbl_analog_value
↓ (Perhitungan Agregasi)
myems_energy_db.tbl_meter_hourly
↓ (Tautan)
myems_system_db.tbl_meters
↓ (Tautan)
myems_system_db.tbl_equipments
↓ (Tautan)
myems_system_db.tbl_spaces
Spesifikasi Desain Struktur Tabel
Bidang umum
Semua tabel berisi bidang umum berikut:
| nama bidang | tipe | Instruksi |
|---|---|---|
id | BIGINT NOT NULL AUTO_INCREMENT | Kunci utama, auto increment |
name | VARCHAR(255) | nama |
uuid | CHAR(36) | UUID, Digunakan untuk integrasi sistem eksternal |
description | VARCHAR(255) | Deskripsi (opsional) |
Bidang waktu
| nama bidang | tipe | Instruksi |
|---|---|---|
utc_date_time | DATETIME | Waktu UTC (tabel data historis) |
start_datetime_utc | DATETIME | Waktu mulai periode waktu (tabel data teragregasi) |
created_datetime_utc | DATETIME | Waktu Pembuatan |
updated_datetime_utc | DATETIME | Waktu pembaruan |
last_run_datetime_utc | DATETIME | Waktu berjalan terakhir |
next_run_datetime_utc | DATETIME | Waktu berjalan selanjutnya |
Perhatian: Semua bidang waktu harus menggunakan waktu UTC secara seragam, dan tampilan front-end harus dikonversi ke waktu lokal.
Bidang numerik
| nama bidang | tipe | Instruksi |
|---|---|---|
actual_value | DECIMAL(21, 6) | Nilai aktual, mendukung presisi tinggi (6 tempat desimal) |
set_value | DECIMAL(21, 6) | nilai set |
rated_capacity | DECIMAL(21, 6) | Kapasitas terrating |
rated_power | DECIMAL(21, 6) | daya terrating |
Bidang JSON
| nama bidang | tipe | Instruksi |
|---|---|---|
connection | LONGTEXT | Konfigurasi Koneksi (format JSON) |
expression | LONGTEXT | Ekspresi (format JSON) |
payload | LONGTEXT | Load (format JSON) |
data | LONGTEXT | Data (format JSON) |
Catatan: Bidang JSON menyimpan string JSON terformat dan perlu diurai sebelum digunakan.
Bidang status
| nama bidang | tipe | Instruksi |
|---|---|---|
is_enabled | BOOL | Apakah diaktifkan |
is_active | BOOL | Status aktivasi |
is_bad | BOOL | Apakah ada data buruk |
is_published | BOOL | Apakah sudah dirilis? |
is_counted | BOOL | Apakah termasuk dalam statistik |
status | VARCHAR(32) | Status (misal new, sent, done, error) |
Desain Indeks
Indeks kunci utama:
- Semua tabel memiliki
PRIMARY KEY (id)
Indeks unik:
- Bidang kunci (seperti
name,uuid) biasanya memiliki indeks unik
Indeks komposit:
- Membuat indeks komposit untuk kombinasi bidang yang sering dikueri
- Contoh:
(point_id, utc_date_time),(meter_id, start_datetime_utc)
Indeks waktu:
- Bidang waktu biasanya diindeks secara terpisah dan mendukung kueri rentang waktu