Pergi ke konten utama

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

Konsep desain

  1. Pemisahan data: Memisahkan data ke dalam basis data yang berbeda berdasarkan tipe data dan penggunaan untuk menghindari basis data tunggal menjadi terlalu besar
  2. Pemisahan baca-tulis: Data historis disimpan dalam format deret waktu, memungkinkan kueri yang efisien
  3. Skala horizontal: Basis data besar (historical_db, energy_db) dapat diskalakan secara independen
  4. 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 tabelInstruksibidang kunci
tbl_energy_categoriesKlasifikasi energi (listrik, air, gas, dingin, panas, dll.)id, name, unit_of_measure, kgce, kgco2e
tbl_energy_itemsSub item konsumsi energi (pencahayaan, AC, daya, dll.)id, name, energy_category_id
tbl_cost_centersPusat biayaid, name, external_id
tbl_data_sourcesKonfigurasi Sumber Dataid, name, gateway_id, protocol, connection
tbl_protocolsKonfigurasi Protokolid, name, protocol_type

1.2 Tabel Manajemen Peralatan

nama tabelInstruksibidang kunci
tbl_equipmentsInformasi Perangkatid, name, uuid, equipment_type_id, cost_center_id
tbl_combined_equipmentsPerangkat gabungan (kombinasi beberapa perangkat)id, name, is_input_counted, is_output_counted
tbl_metersInformasi meteranid, name, uuid, energy_category_id, is_counted
tbl_offline_metersMeteran offline (dimasukkan secara manual)id, name, energy_category_id
tbl_virtual_metersMeteran Virtual (Hitung)id, name, expression (dalam format JSON)
tbl_pointsInformasi titik dataid, name, data_source_id, object_type, object_id

1.3 Tabel Organisasi Spasial

nama tabelInstruksibidang kunci
tbl_spacesInformasi spasial (ruangan, lantai, dll.)id, name, uuid, parent_space_id, area
tbl_storesInformasi Tokoid, name, uuid, space_id
tbl_tenantsinformasi penyewaid, name, uuid, space_id
tbl_shopfloorsInformasi bengkelid, 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 meteran
  • tbl_equipments_offline_meters: Asosiasi antara perangkat dan meteran offline
  • tbl_equipments_virtual_meters: Asosiasi antara perangkat dan meteran virtual
  • tbl_spaces_equipments: Asosiasi antara ruang dan perangkat
  • tbl_spaces_meters: Asosiasi antara ruang dan meteran
  • tbl_combined_equipments_equipments: Asosiasi antara perangkat gabungan dan perangkat
  • dll...

1.5 Daftar Peralatan Energi Baru

nama tabelInstruksibidang kunci
tbl_photovoltaic_power_stationspembangkit listrik tenaga suryaid, name, capacity, contact_id
tbl_energy_storage_containersWadah penyimpanan energiid, name, rated_capacity, rated_power
tbl_energy_storage_power_stationspembangkit listrik penyimpanan energiid, name, rated_capacity
tbl_microgridsmikrogridid, name, address
tbl_charging_stationsstasiun pengisian dayaid, name, rated_capacity, rated_power

1.6 Tabel Kontrol dan Penjadwalan

nama tabelInstruksibidang kunci
tbl_commandsperintah kontrolid, name, topic, payload (dalam format JSON)
tbl_control_modesmode kontrolid, name, is_active
tbl_control_modes_timesPeriode waktu mode kontrolid, control_mode_id, start_time_of_day, end_time_of_day

1.7 Tabel Konfigurasi Lainnya

  • tbl_contacts: Informasi kontak
  • tbl_distribution_systems: Sistem distribusi
  • tbl_distribution_circuits: Sirkuit distribusi
  • tbl_energy_flow_diagrams: Diagram Aliran Energi
  • tbl_tariffs: Konfigurasi harga listrik
  • tbl_working_calendars: Kalender kerja
  • tbl_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 id dan dua bidang kunci asing
  • Bidang JSON menggunakan tipe LONGTEXT untuk 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 tabelInstruksibidang kunciStrategi Indeks
tbl_analog_valueData historis analogpoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_analog_value_latestNilai analog terbaru (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_digital_valueData historis digitalpoint_id, utc_date_time, actual_value (INT)(point_id, utc_date_time), (utc_date_time)
tbl_digital_value_latestNilai numerik terbaru (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_energy_valueData historis konsumsi energipoint_id, utc_date_time, actual_value, is_bad, is_published(point_id, utc_date_time), (utc_date_time)
tbl_energy_value_latestNilai konsumsi energi terbaru (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)
tbl_text_valueData historis volume tekspoint_id, utc_date_time, actual_value (LONGTEXT)(point_id, utc_date_time), (utc_date_time)
tbl_text_value_latestNilai volume teks terbaru (cache)point_id, utc_date_time, actual_value(point_id, utc_date_time)

Tabel Penyimpanan File:

nama tabelInstruksibidang kunci
tbl_cost_filesDokumen biaya (Excel/CSV)file_name, uuid, upload_datetime_utc, status, file_object (LONGBLOB)
tbl_offline_meter_filesFile data meteran offlinefile_name, uuid, upload_datetime_utc, status, file_object
tbl_data_repair_filesFile perbaikan datafile_name, uuid, upload_datetime_utc, status, file_object
tbl_energy_plan_filesDokumen rencana konsumsi energifile_name, uuid, upload_datetime_utc, status, file_object

Deskripsi Tipe Data:

  • actual_value: DECIMAL (21,6) - Mendukung nilai numerik presisi tinggi dengan 6 tempat desimal
  • utc_date_time: DATETIME - Waktu UTC, semua waktu menggunakan UTC secara seragam
  • is_bad: BOOL - Label Kualitas Data, True menunjukkan data buruk
  • is_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 _latest digunakan untuk kueri cepat nilai terbaru dan menghindari pemindaian tabel historis
  • Tabel file menggunakan LONGBLOB untuk 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 tabelInstruksibidang kunci
tbl_meter_hourlyKonsumsi energi meteran per jammeter_id, start_datetime_utc, actual_value
tbl_meter_dailyKonsumsi energi meteran harianmeter_id, start_datetime_utc, actual_value
tbl_meter_monthlyKonsumsi energi meteran bulananmeter_id, start_datetime_utc, actual_value
tbl_meter_yearlyKonsumsi energi meteran tahunanmeter_id, start_datetime_utc, actual_value
tbl_offline_meter_hourlyKonsumsi energi meteran offline per jamoffline_meter_id, start_datetime_utc, actual_value
tbl_virtual_meter_hourlyKonsumsi energi meteran virtual per jamvirtual_meter_id, start_datetime_utc, actual_value

3.2 Tabel Konsumsi Energi Perangkat

nama tabelInstruksibidang kunci
tbl_equipment_input_category_hourlyKonsumsi energi masukan perangkat (berdasarkan kategori)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_equipment_input_item_hourlyKonsumsi energi masukan perangkat (berdasarkan item)equipment_id, energy_item_id, start_datetime_utc, actual_value
tbl_equipment_output_category_hourlyKonsumsi energi keluaran perangkat (berdasarkan kategori)equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_hourlyKonsumsi energi masukan perangkat gabungan (berdasarkan kategori)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_output_category_hourlyKonsumsi energi keluaran perangkat gabungan (berdasarkan klasifikasi)combined_equipment_id, energy_category_id, start_datetime_utc, actual_value

3.3 Tabel Konsumsi Energi Spasial

nama tabelInstruksibidang kunci
tbl_space_input_category_hourlyKonsumsi energi masukan spasial (berdasarkan kategori)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_item_hourlyKonsumsi energi masukan spasial (berdasarkan item)space_id, energy_item_id, start_datetime_utc, actual_value
tbl_space_output_category_hourlyKonsumsi energi keluaran spasial (berdasarkan klasifikasi)space_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_hourlyKonsumsi energi masukan tokostore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_hourlyPenyewa memasukkan konsumsi energitenant_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_hourlyKonsumsi energi masukan bengkelshopfloor_id, energy_category_id, start_datetime_utc, actual_value

3.4 Tabel Konsumsi Energi Peralatan Energi Baru

nama tabelInstruksibidang kunci
tbl_photovoltaic_power_station_hourlyPembangkitan daya pembangkit listrik tenaga surya per jamphotovoltaic_power_station_id, start_datetime_utc, actual_value
tbl_energy_storage_container_charge_hourlyKapasitas pengisian wadah penyimpanan energienergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_discharge_hourlyKapasitas pengeluaran wadah penyimpanan energienergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_buy_hourlyWadah penyimpanan energi membeli listrikenergy_storage_container_id, start_datetime_utc, actual_value
tbl_energy_storage_container_grid_sell_hourlyPenjualan listrik dari wadah penyimpanan energienergy_storage_container_id, start_datetime_utc, actual_value
tbl_microgrid_charge_hourlyKapasitas pengisian mikrogridmicrogrid_id, start_datetime_utc, actual_value
tbl_microgrid_discharge_hourlyKapasitas pengeluaran mikrogridmicrogrid_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_utc mewakili waktu mulai periode waktu (misal 2024-01-01 00:00:00 mewakili 1 Januari dari 00:00 hingga 01:00)
  • actual_value adalah 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-aggregation menggunakan 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_aggregation berdasarkan 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 tabelInstruksibidang kunci
tbl_meter_8760Model 8760 jam meteranmeter_id, start_datetime_utc, actual_value
tbl_equipment_input_category_8760Model konsumsi energi masukan perangkatequipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_combined_equipment_input_category_8760Model konsumsi energi masukan perangkat gabungancombined_equipment_id, energy_category_id, start_datetime_utc, actual_value
tbl_space_input_category_8760Model konsumsi energi masukan spasialspace_id, energy_category_id, start_datetime_utc, actual_value
tbl_shopfloor_input_category_8760Model konsumsi energi masukan bengkelshopfloor_id, energy_category_id, start_datetime_utc, actual_value
tbl_store_input_category_8760Model konsumsi energi masukan tokostore_id, energy_category_id, start_datetime_utc, actual_value
tbl_tenant_input_category_8760Model konsumsi energi masukan penyewatenant_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 tabelInstruksibidang kunci
tbl_rulesAturan diagnostikid, name, category, fdd_code, priority, channel, expression (JSON), message_template, is_enabled
tbl_web_messagesPesan Webid, rule_id, user_id, subject, category, priority, message, status, belong_to_object_type, belong_to_object_id
tbl_email_messagesPesan emailid, rule_id, recipient_name, recipient_email, subject, message, attachment_file_name, status
tbl_text_messages_outboxKotak keluar SMSid, rule_id, recipient_mobile, message, status, acknowledge_code
tbl_text_messages_inboxkotak masuk smsid, sender_mobile, message, status
tbl_wechat_messages_outboxKotak pengirim pesan WeChatid, rule_id, recipient_openid, message_template_id, message_data (JSON)
tbl_wechat_messages_inboxKotak masuk pesan WeChatid, sender_openid, message, status
tbl_email_serversKonfigurasi Server Emailid, 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 Aturan (category):

  • REALTIME: Peringatan real-time
  • SYSTEM: Peringatan sistem
  • SPACE: Peringatan spasial
  • METER: Peringatan meteran
  • TENANT: Peringatan penyewa
  • STORE: Peringatan toko
  • SHOPFLOOR: Peringatan bengkel
  • EQUIPMENT: Peringatan perangkat
  • COMBINEDEQUIPMENT: Peringatan perangkat gabungan

Prioritas (priority):

  • CRITICAL: Kritis
  • HIGH: Tinggi
  • MEDIUM: Sedang
  • LOW: Rendah

Catatan Pengembangan:

  • Bidang expression menyimpan ekspresi aturan dalam format JSON
  • message_template mendukung substitusi variabel (misal, $name, $value)
  • Aturan mendukung eksekusi terjadwal dan eksekusi segera
  • Status pesan: newsentacknowledged / 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 tabelInstruksibidang kunci
tbl_usersInformasi 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 Izinid, 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_messagesPesan emailid, recipient_name, recipient_email, subject, message, attachment_file_name, status, scheduled_datetime_utc
tbl_email_message_sessionsPercakapan Emailid, recipient_email, token, expires_datetime_utc
tbl_logsLog operasiid, user_uuid, request_datetime_utc, request_method, resource_type, resource_id, request_body (JSON)
tbl_notificationsPesan Pemberitahuanid, user_id, created_datetime_utc, status, subject, message, url
tbl_new_usersPengguna baru (menunggu aktivasi)id, name, uuid, display_name, email, salt, password
tbl_verification_codesKode Verifikasiid, 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: unreadreadarchived

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 tabelInstruksibidang 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_filesFile Template Laporanid, uuid, report_id, file_name, file_type, file_object
tbl_email_messagesPesan emailid, 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 tabelInstruksibidang kunci
tbl_productsInformasi Produkid, name, uuid, unit_of_measure, tag, standard_product_coefficient
tbl_teamsInformasi Timid, name, uuid, description
tbl_shiftsInformasi shiftid, shopfloor_id, team_id, product_id, product_count, start_datetime_utc, end_datetime_utc, reference_timestamp
tbl_shopfloor_hourlyOutput jam bengkelid, shopfloor_id, start_datetime_utc, product_id, product_count
tbl_space_hourlyOutput jam spasialid, space_id, start_datetime_utc, product_id, product_count
tbl_shopfloors_productsAsosiasi bengkel dan produkid, shopfloor_id, product_id
tbl_shopfloors_teamsAsosiasi bengkel dan timid, 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 bidangtipeInstruksi
idBIGINT NOT NULL AUTO_INCREMENTKunci utama, auto increment
nameVARCHAR(255)nama
uuidCHAR(36)UUID, Digunakan untuk integrasi sistem eksternal
descriptionVARCHAR(255)Deskripsi (opsional)

Bidang waktu

nama bidangtipeInstruksi
utc_date_timeDATETIMEWaktu UTC (tabel data historis)
start_datetime_utcDATETIMEWaktu mulai periode waktu (tabel data teragregasi)
created_datetime_utcDATETIMEWaktu Pembuatan
updated_datetime_utcDATETIMEWaktu pembaruan
last_run_datetime_utcDATETIMEWaktu berjalan terakhir
next_run_datetime_utcDATETIMEWaktu berjalan selanjutnya

Perhatian: Semua bidang waktu harus menggunakan waktu UTC secara seragam, dan tampilan front-end harus dikonversi ke waktu lokal.

Bidang numerik

nama bidangtipeInstruksi
actual_valueDECIMAL(21, 6)Nilai aktual, mendukung presisi tinggi (6 tempat desimal)
set_valueDECIMAL(21, 6)nilai set
rated_capacityDECIMAL(21, 6)Kapasitas terrating
rated_powerDECIMAL(21, 6)daya terrating

Bidang JSON

nama bidangtipeInstruksi
connectionLONGTEXTKonfigurasi Koneksi (format JSON)
expressionLONGTEXTEkspresi (format JSON)
payloadLONGTEXTLoad (format JSON)
dataLONGTEXTData (format JSON)

Catatan: Bidang JSON menyimpan string JSON terformat dan perlu diurai sebelum digunakan.

Bidang status

nama bidangtipeInstruksi
is_enabledBOOLApakah diaktifkan
is_activeBOOLStatus aktivasi
is_badBOOLApakah ada data buruk
is_publishedBOOLApakah sudah dirilis?
is_countedBOOLApakah termasuk dalam statistik
statusVARCHAR(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