Lapisan Bronze

Lapisan Bronze berisi dua skema data yang berbeda, masing-masing melayani aspek berbeda dari platform telematika dan intelijen bisnis:

  • raw_business_data - berisi tabel, atribut, dan nilai yang terkait dengan informasi bisnis, seperti kendaraan, karyawan, geofence yang ditambahkan oleh pengguna, dll.

  • raw_telematics_data - berisi tabel, atribut, dan nilai yang terkait dengan data telematika yang dikirim dari perangkat yang dipantau, seperti lokasi, input, output, dan peristiwa.

Setiap skema dioptimalkan untuk domain data dan pola akses spesifiknya, menyediakan cakupan komprehensif untuk kebutuhan operasional, telematik, dan manajemen aset.

raw_business_data struktur

Skema ini berisi 40+ tabel yang dipilih dengan cermat untuk mencakup berbagai aspek bisnis dan kasus penggunaan. Tabel-tabel ini merepresentasikan entitas inti bisnis Anda, struktur organisasi, dan data operasional.

circle-info

Diagram interaktif skema raw_business_data tersedia di dbdiagram.io: https://dbdiagram.io/d/V3-bronze-layer-68ecfd1c2e68d21b4131089aarrow-up-right

Temukan rincian skema data bisnis mentah di bawah ini.

chevron-rightskema raw_business_datahashtag

Frekuensi pembaruan

Data dalam skema ini disinkronkan dengan DB inti. Pembaruan terjadi secara inkremental saat perubahan terjadi di database MySQL sumber, biasanya kurang dari 5 menit sejak perubahan sumber.

description_parameters

Sistem mencakup data referensi untuk menstandarkan nilai di seluruh basis data:

Jenis referensi
Deskripsi
Contoh nilai

Definisi tipe

Jenis entitas standar

vehicle_type: car, truck, bus

Kode status

Nilai status tugas dan sistem

tasks_status: unassigned, assigned, done

Definisi satuan

Satuan pengukuran untuk sensor

units_type: liter, gallon, celsius

Klasifikasi entitas

Kategori entitas bisnis

entities_type: place, task, customer

Tabel kunci menurut kategori

Tabel-tabel dalam raw_business_data skema diatur ke dalam kategori fungsional untuk navigasi yang lebih mudah. Tabel di bawah merangkum tabel-tabel kunci menurut tujuan bisnisnya:

Entitas bisnis inti

chevron-rightusershashtag

Tujuan: Informasi akun pengguna dan profil

Atribut
Rincian

Kolom kunci

user_id, company_label, first_name, last_name, middle_name, locale, timezone_label, master_id, registration_datetime

Relasi

Pengguna induk melalui master_id, terkait dengan employees, departments, places, tasks melalui user_id

Catatan khusus

Entitas pusat yang menghubungkan data organisasi; master_id memungkinkan hierarki pengguna untuk struktur akun multi-level

chevron-rightemployeeshashtag

Tujuan: Catatan karyawan dan pengemudi dengan detail lisensi dan penugasan

Atribut
Rincian

Kolom kunci

employee_id, user_id, object_id, department_id, first_name, last_name, driver_license_number, driver_license_valid_till, hardware_key

Relasi

Tautan ke users, departments, objects (tracker yang ditugaskan), dilacak di driver_history dan checkins

Catatan khusus

Hardware key memungkinkan identifikasi pengemudi melalui iButton atau RFID; mendukung geofencing dengan latitude, longitude, radius kolom

chevron-rightdepartmentshashtag

Tujuan: Unit organisasi dengan lokasi geografis

Atribut
Rincian

Kolom kunci

department_id, user_id, department_label, latitude, longitude, radius, address

Relasi

Menghubungkan karyawan ke struktur organisasi melalui department_id

Catatan khusus

Kolom lokasi mendukung analitik berbasis geofence untuk pelaporan tingkat departemen

Pelacakan dan pemantauan

chevron-rightdeviceshashtag

Tujuan: Informasi perangkat pelacakan fisik dan status jaringan

Atribut
Rincian

Kolom kunci

device_id, owner_id, device_imei, phone, status_listing_id, network_label, signal_level, has_roaming, created_at

Relasi

Entitas inti yang menghubungkan ke objects, models, sensor_description, counters; owner_id references users.user_id

Catatan khusus

Semua data telematik dalam raw_telematics_data skema mereferensikan tabel ini melalui device_id

chevron-rightobjectshashtag

Tujuan: Entitas yang dimonitor (kendaraan, aset, personel)

Atribut
Rincian

Kolom kunci

object_id, client_id, device_id, object_label, model, group_id, create_datetime, is_deleted

Relasi

Pusat yang menghubungkan perangkat ke pengguna (client_id), detail kendaraan, riwayat pelacakan, tugas, dan aturan

Catatan khusus

Mewakili "unit yang dapat dilacak" dalam sistem; satu objek per perangkat yang aktif digunakan

chevron-rightmodelshashtag

Tujuan: Spesifikasi perangkat keras perangkat dan kapabilitasnya

Atribut
Rincian

Kolom kunci

model_id, model, vendor, alternative_label, analog_amount, digital_amount, outputs_amount, has_battery_level, has_altitude, has_phone

Konten

Flag kapabilitas Boolean menunjukkan bidang data mana yang tersedia dari tipe perangkat ini

Catatan khusus

Gunakan flag kapabilitas untuk menentukan sensor dan input yang valid saat mengambil data telematik

chevron-rightsensor_descriptionhashtag

Tujuan: Konfigurasi sensor dan data kalibrasi

Atribut
Rincian

Kolom kunci

sensor_id, device_id, sensor_label, input_label, sensor_type, units_type, multiplier, divider, accuracy, calibration_data

Relasi

Mengaitkan input perangkat (dari raw_telematics_data.inputs) ke logika bisnis melalui device_id dan input_label matching

Catatan khusus

calibration_data (JSONB) menyimpan tabel kalibrasi spesifik-sensor untuk sensor level bahan bakar; multiplier dan divider mengonversi nilai mentah ke satuan

Manajemen aset

chevron-rightvehicleshashtag

Tujuan: Spesifikasi kendaraan, dokumentasi, dan parameter operasional

Atribut
Rincian

Kolom kunci

vehicle_id, user_id, object_id, garage_id, vehicle_label, registration_number, vin, manufacture_year, fuel_type, fuel_cost, standard_fuel_consumption, max_speed

Relasi

Tautan ke objects (tracker saat ini), garages (lokasi layanan), vehicle_service_tasks; dilacak di vehicle_trackers_history

Catatan khusus

Kolom dimensi fisik (payload_length, payload_width, payload_height, gross_weight) mendukung analitik perencanaan muatan; tanggal asuransi memungkinkan pelacakan kepatuhan

chevron-rightgarageshashtag

Tujuan: Lokasi fasilitas layanan dan pemeliharaan

Atribut
Rincian

Kolom kunci

garage_id, user_id, latitude, longitude, radius, address, organization_label, mechanic_name, dispatcher_name

Relasi

Direferensikan oleh vehicles.garage_id untuk penetapan lokasi layanan

Catatan khusus

Kolom lokasi memungkinkan deteksi kunjungan layanan berbasis geofence dan analisis kedekatan

chevron-rightvehicle_service_taskshashtag

Tujuan: Jadwal pemeliharaan dan riwayat layanan

Atribut
Rincian

Kolom kunci

service_task_id, vehicle_id, description, status, cost, start_date, end_date, completion_date, predicted_datetime, mileage_limit, engine_hours_limit

Konten

Mendukung tiga jenis pemicu: berbasis tanggal, berbasis jarak, berbasis jam mesin; pengaturan notifikasi untuk email, SMS, push

Catatan khusus

is_repeat dan kolom interval memungkinkan jadwal pemeliharaan berulang; is_unplanned membedakan pemeliharaan terjadwal vs. reaktif

Lokasi dan perutean

chevron-rightzoneshashtag

Tujuan: Area geofence untuk pemantauan dan otomatisasi

Atribut
Rincian

Kolom kunci

zone_id, client_id, zone_label, zone_type, latitude, longitude, circle_center_latitude, circle_center_longitude, radius, address, color

Konten

Jenis zona mencakup lingkaran, poligon (didefinisikan melalui geofence_points), dan klasifikasi area khusus

Relasi

Direferensikan oleh rules2zones, users2zones; simpul poligon disimpan di geofence_points

Catatan khusus

Fungsi PostGIS dapat digunakan untuk memeriksa titik-di-dalam-poligon untuk analisis geofence yang kompleks

chevron-rightplaceshashtag

Tujuan: Titik minat dengan atribut kustom

Atribut
Rincian

Kolom kunci

place_id, user_id, place_label, latitude, longitude, radius, address, description, external_id, custom_fields

Relasi

Diperluas dengan nilai bidang kustom melalui places_text_fields, places_decimal_fields, places_bigint_fields, places_longtext_fields, places_linked_entity_fields

Catatan khusus

custom_fields JSONB menyediakan akses cepat; tabel terkait memungkinkan pemfilteran dan pengurutan berdasarkan atribut kustom

chevron-rightgeofence_pointshashtag

Tujuan: Koordinat simpul poligon untuk bentuk geofence kompleks

Atribut
Rincian

Kolom kunci

zone_id, number, latitude, longitude

Relasi

Beberapa catatan per zone_id mendefinisikan batas poligon; number kolom menentukan urutan simpul

Catatan khusus

Query dengan ORDER BY number untuk membangun kembali jalur poligon; gunakan bersama PostGIS ST_MakePolygon untuk operasi geometri

Manajemen tugas dan alur kerja

chevron-righttaskshashtag

Tujuan: Penugasan work order dan pelacakan eksekusi

Atribut
Rincian

Kolom kunci

task_id, user_id, object_id, parent_task_id, task_label, status, task_type, latitude, longitude, radius, arrival_datetime, created_at, status_change_datetime, custom_fields

Konten

Mendukung tugas hirarkis melalui parent_task_id; jendela waktu didefinisikan oleh time_from/time_to; validasi geofence dengan lokasi dan radius

Relasi

Tautan ke forms (pengumpulan data), task_history (perubahan status), objects (tracker yang ditugaskan)

Catatan khusus

stay_duration dan arrival_duration_minutes memungkinkan pemantauan kepatuhan untuk tugas pengiriman dan layanan

chevron-rightformshashtag

Tujuan: Formulir pengumpulan data dan pengiriman

Atribut
Rincian

Kolom kunci

form_id, task_id, object_id, form_label, kolom, values, submitted_at, submission_latitude, submission_longitude, is_submission_in_zone

Konten

kolom mendefinisikan struktur formulir (JSON); values mengandung data yang dikirim (JSON)

Relasi

Tautan ke tasks (work order terkait), objects (pengirim), direferensikan di checkins

Catatan khusus

Flag validasi lokasi is_submission_in_zone memungkinkan aturan pengiriman formulir berbasis geofence

chevron-rightcheckinshashtag

Tujuan: Catatan kehadiran dan aktivitas berbasis lokasi

Atribut
Rincian

Kolom kunci

checkin_id, employee_id, object_id, form_id, user_id, planned_datetime, actual_datetime, latitude, longitude, radius, address, comment

Relasi

Menghubungkan karyawan ke formulir dan lokasi; melacak penyimpangan dari jadwal yang direncanakan

Catatan khusus

Varians waktu antara planned_datetime dan actual_datetime memungkinkan pelaporan ketepatan waktu; radius menentukan toleransi lokasi yang dapat diterima

chevron-righttask_historyhashtag

Tujuan: Jejak audit untuk peristiwa siklus hidup tugas

Atribut
Rincian

Kolom kunci

task_history_id, task_id, user_id, activity, event_datetime, payload

Konten

Jenis aktivitas didefinisikan dalam description_parametrs; payload menyimpan rincian khusus-peristiwa (teks)

Catatan khusus

Esensial untuk analisis penyelesaian tugas, pelaporan transisi status, dan pelacakan aktivitas pengguna

Aturan dan otomatisasi

chevron-rightruleshashtag

Tujuan: Pemicu peristiwa dan konfigurasi peringatan

Atribut
Rincian

Kolom kunci

rule_id, object_id, client_id, event_type, event_label, event_group, description, parameters, alert_email, alert_sms, alert_phone, is_push_enabled, created_at, is_deleted

Konten

Parameter aturan (JSONB) mendefinisikan kondisi pemicu; mendukung notifikasi email, SMS, telepon, dan push

Relasi

Tautan ke objek melalui rules2objects, zona melalui rules2zones

Catatan khusus

event_type mendefinisikan skenario pemantauan spesifik (pelanggaran kecepatan, pelanggaran geofence, ambang sensor); maximum kolom memungkinkan agregasi peristiwa untuk pemberitahuan berbasis ambang

chevron-rightrules2objectshashtag

Tujuan: Asosiasi aturan-ke-objek dengan parameter spesifik-instansi

Atribut
Rincian

Kolom kunci

rule_id, object_id, param_group_number, object_params

Konten

object_params (JSONB) memungkinkan kustomisasi aturan per-objek (mis. batas kecepatan berbeda per kendaraan)

Catatan khusus

Relasi banyak-ke-banyak memungkinkan satu aturan memantau beberapa objek dengan parameter berbeda

chevron-rightrules2zoneshashtag

Tujuan: Mengaitkan aturan dengan pemicu geofence

Atribut
Rincian

Kolom kunci

rule_id, zone_id

Catatan khusus

Relasi banyak-ke-banyak memungkinkan pemantauan multi-zona untuk satu aturan (mis. peringatan saat memasuki salah satu dari beberapa area terbatas)

Status dan kategorisasi

chevron-rightstatuseshashtag

Tujuan: Definisi status kustom untuk daftar status

Atribut
Rincian

Kolom kunci

status_id, listing_id, status_label, color, order_sort, is_deleted

Relasi

Grup status diorganisir oleh listing_id (mereferensikan status_listings); digunakan dalam status_history

Catatan khusus

order_sort mendefinisikan urutan tampilan; warna memungkinkan pembedaan visual dalam pelaporan

chevron-rightstatus_listingshashtag

Tujuan: Definisi set status untuk perangkat atau karyawan

Atribut
Rincian

Kolom kunci

status_listing_id, user_id, status_listing_label, is_supervisor_controlled, is_employee_controlled, is_deleted

Relasi

Direferensikan oleh devices.status_listing_id dan statuses.listing_id

Catatan khusus

Flag kontrol menentukan siapa yang dapat mengubah status: supervisor-saja, layanan mandiri karyawan, atau keduanya

chevron-rightstatus_historyhashtag

Tujuan: Jejak audit untuk perubahan status

Atribut
Rincian

Kolom kunci

status_history_id, device_id, old_status_id, new_status_id, updated_by, changed_datetime, server_datetime, latitude, longitude, address

Relasi

Tautan ke devices, statuses (lama dan baru), description_parametrs (untuk updated_by peran)

Catatan khusus

Pengambilan lokasi memungkinkan analisis geografis dari transisi status; berguna untuk pelaporan lokasi mulai/akhir hari kerja

chevron-righttagshashtag

Tujuan: Label kategorisasi yang didefinisikan pengguna

Atribut
Rincian

Kolom kunci

tag_id, user_id, tag_label, color

Relasi

Diterapkan ke entitas melalui tag_links; ruang lingkup didefinisikan oleh pengguna

Catatan khusus

Sistem kategorisasi fleksibel yang mendukung banyak tag per entitas

Grup dan hirarki

chevron-rightgroupshashtag

Tujuan: Pengelompokan organisasi untuk objek (tracker)

Atribut
Rincian

Kolom kunci

group_id, client_id, group_label, group_color

Relasi

Direferensikan oleh objects.group_id; kepemilikan klien melalui client_id (mereferensikan users)

Catatan khusus

Memungkinkan organisasi seperti folder dari entitas pemantauan untuk pelaporan dan izin

chevron-rightgroups_objectshashtag

Tujuan: Relasi banyak-ke-banyak antara grup dan objek

Atribut
Rincian

Kolom kunci

Kunci primer komposit: groups_client_id, objects_client_id

Catatan khusus

Memungkinkan objek menjadi bagian dari beberapa grup secara bersamaan; query dengan kedua client_id nilai untuk keanggotaan grup

Kolom kustom dan entitas

chevron-rightentitieshashtag

Tujuan: Definisi jenis entitas untuk kerangka bidang kustom

Atribut
Rincian

Kolom kunci

entity_id, user_id, entity_label, builtin_type

Relasi

Direferensikan oleh custom_fields untuk menentukan bidang kustom mana yang berlaku untuk jenis entitas mana

Catatan khusus

builtin_type terkait ke description_parametrs untuk klasifikasi entitas yang ditentukan sistem

chevron-rightcustom_fieldshashtag

Tujuan: Definisi bidang kustom

Atribut
Rincian

Kolom kunci

custom_field_id, entity_id, custom_field_label, custom_field_type, description, is_required, parameters

Konten

parameters (JSONB) menyimpan konfigurasi spesifik-jenis-bidang (aturan validasi, opsi dropdown, dll.)

Relasi

Mendefinisikan atribut kustom yang tersedia untuk entitas; tipe bidang terkait ke description_parametrs

Catatan khusus

Memungkinkan perluasan skema dinamis tanpa perubahan basis data; digunakan secara luas di places dan tasks

Pelacakan historis

chevron-rightdriver_historyhashtag

Tujuan: Log perubahan penugasan karyawan-ke-objek

Atribut
Rincian

Kolom kunci

driver_history_id, object_id, old_employee_id, new_employee_id, hardware_key, changed_datetime, server_datetime, updated_by, latitude, longitude, address

Relasi

Melacak penugasan pengemudi ke kendaraan dari waktu ke waktu; terhubung ke employees dan objects

Catatan khusus

Esensial untuk pelaporan spesifik-pengemudi saat pengemudi berpindah kendaraan; pengambilan lokasi memungkinkan analisis lokasi perubahan penugasan

chevron-rightvehicle_trackers_historyhashtag

Tujuan: Log perubahan penugasan kendaraan-ke-tracker

Atribut
Rincian

Kolom kunci

vehicle_tracker_history_id, vehicle_id, object_id, changed_datetime

Relasi

Melacak perangkat GPS mana yang dipasang di kendaraan mana dari waktu ke waktu

Catatan khusus

Kritis untuk analisis data historis saat tracker dipindahkan antar kendaraan; memungkinkan atribusi jarak dan penggunaan yang akurat

Data referensi dan pencarian

chevron-rightdescription_parametrshashtag

Tujuan: Data referensi sistem dan nilai enumerasi

Atribut
Rincian

Kolom kunci

key, type, description

Konten

Menyediakan label yang dapat dibaca manusia untuk nilai bernomor di seluruh basis data (status tugas, jenis bahan bakar, jenis counter, dll.)

Relasi

Direferensikan melalui kunci asing dari beberapa tabel untuk kategorisasi yang terstandarisasi

Catatan khusus

Esensial untuk menerjemahkan kode integer menjadi nilai yang dapat dibaca dalam pelaporan; type mengelompokkan enumerasi terkait

chevron-rightcountershashtag

Tujuan: Konfigurasi pelacakan odometer dan jam mesin

Atribut
Rincian

Kolom kunci

counter_id, device_id, counter_type, sensor_id, multiplier

Relasi

Mengaitkan perangkat ke pembacaan sensor yang merepresentasikan counter jarak atau waktu

Catatan khusus

multiplier mengonversi pulsa sensor ke satuan aktual (km, mil, jam); counter_type dari description_parametrs menentukan jenis pengukuran

chevron-rightdevice_output_namehashtag

Tujuan: Label kustom untuk saluran keluaran perangkat

Atribut
Rincian

Kolom kunci

device_id, number, label

Konten

Memetakan nomor saluran keluaran ke nama yang ditetapkan pengguna (mis. "Door Lock", "Engine Block")

Catatan khusus

Mengaktifkan pelaporan yang dapat dibaca saat menganalisis perintah dan status keluaran perangkat

raw_telematics_data struktur

The raw_telematics_data skema berisi tiga jenis tabel utama yang bekerja sama untuk menyediakan data perangkat yang komprehensif.

Bronze layer raw telematics data ERD
ERD data telematik mentah lapisan Bronze
circle-info

Diagram interaktif skema raw_telematics_data tersedia di dbdiagram.io: https://dbdiagram.io/d/v1-schema-telematics-bd-67a0acef263d6cf9a0d8e750arrow-up-right

Temukan detail skema data telematik mentah di bawah.

chevron-rightskema raw_telematics_datahashtag

Tabel kunci menurut kategori

Setiap tabel memiliki tujuan spesifik dalam menangkap aspek informasi perangkat yang berbeda:

chevron-righttracking_data_corehashtag

Tujuan: Data inti lokasi dan gerak

Atribut
Rincian

Kolom kunci

device_id, device_time, platform_time, latitude, longitude, speed, altitude, satellites, hdop, event_id

Pengindeksan

Dioptimalkan dengan indeks pada (device_id, device_time)

Catatan khusus

Data lokasi (latitude dan longitude) menggunakan format integer dengan presisi 10⁷ untuk kinerja TimescaleDB yang optimal Kecepatan juga disimpan dalam integer, jadi Anda perlu membaginya dengan 100

chevron-rightinputshashtag

Tujuan: Pembacaan sensor dari perangkat

Atribut
Rincian

Kolom kunci

input_id, device_id, device_time, sensor_name, value

Konten

Pembacaan analog (level bahan bakar, suhu, tegangan), nilai terhitung (engine RPM)

Relasi

chevron-rightstateshashtag

Tujuan: Indikator status perangkat dan mode operasional

Atribut
Rincian

Field Kunci

state_id, device_id, device_time, state_name, value

Konten

Indikator mode operasi (working, idle, off), status komponen (ignition, doors)

Format Nilai

Nilai boolean (1/0) atau kode status spesifik

Data dalam skema ini diambil langsung dari perangkat, dengan latensi minimal (biasanya detik). Skema dioptimalkan untuk data deret waktu menggunakan TimescaleDB untuk penyimpanan dan pengambilan yang efisien.

Informasi tambahan

Validasi data

Basis data menegakkan integritas data melalui beberapa mekanisme:

  • CHECK constraints memvalidasi bahwa nilai berada dalam rentang yang dapat diterima

  • Foreign keys memastikan hubungan antar tabel tetap konsisten

  • NOT NULL constraints menjamin bahwa field yang diwajibkan selalu memiliki nilai

  • DEFAULT values memberikan nilai cadangan ketika data tidak disediakan secara eksplisit

Optimisasi query

Tabel diatur dengan strategi pengindeksan spesifik:

  • Semua tabel menyertakan indeks berbasis waktu pada record_added_at

  • Kolom foreign key memiliki indeks khusus untuk kinerja join

  • Kombinasi kolom yang sering digunakan memiliki indeks komposit

  • TimescaleDB menyediakan indeks khusus untuk query deret waktu

repo struktur data

circle-exclamation

The repo skema menyediakan kerangka kerja komprehensif untuk mengelola struktur organisasi, aset, perangkat, dan hubungan mereka dalam lingkungan multi-tenant. Dibangun di atas PostgreSQL 14+ dengan ekstensi ltree, skema mendukung organisasi hierarkis, definisi field kustom untuk jenis entitas apa pun, kontrol akses berbasis peran dengan pembatasan tingkat objek, dan jejak audit lengkap dengan pelacakan perubahan tingkat field. Semua entitas dapat diperluas tanpa modifikasi skema, dilokalkan untuk penyebaran internasional, dan dihubungkan melalui hubungan polimorfik yang fleksibel.

Skema ini menangani skenario manajemen data kompleks termasuk hirarki aset armada di seluruh tingkat organisasi, platform SaaS multi-tenant yang memerlukan isolasi data, operasi yang didorong kepatuhan dengan persyaratan audit terperinci, dan sistem yang membutuhkan model data dinamis yang dapat disesuaikan melalui field kustom daripada migrasi database.

circle-info

Diagram interaktifrepo skema data tersedia di dbdiagram.io: https://dbdiagram.io/d/Navixy-Repo-data-schema-68ad788c1e7a611967a0930earrow-up-right

Temukan repo detail skema di bawah.

chevron-rightrepo skema datahashtag

Frekuensi pembaruan

Data di repo skema disinkronkan secara waktu nyata dengan sistem sumber. Pembaruan terjadi segera saat perubahan berlangsung, dengan jejak audit yang merekam semua modifikasi untuk kepatuhan dan analisis historis.

ci_base

The repo skema menggunakan pola Single Table Inheritance untuk semua data referensi melalui ci_base tabel:

The repo skema menggunakan Single Table Inheritance pola untuk semua data referensi melalui ci_base tabel. Desain ini mengonsolidasikan kamus sistem, klasifikasi, dan item referensi yang didefinisikan pengguna ke dalam satu struktur terpadu, memberikan konsistensi dan fleksibilitas di seluruh skema.

Arsitektur:

The ci_base tabel berfungsi sebagai fondasi untuk semua data referensi, menggunakan discriminator field untuk mengidentifikasi tipe referensi spesifik. Setiap tipe referensi memiliki tabel yang sesuai (seperti ci_device_type, ci_asset_type) yang berbagi id sebagai ci_base, menciptakan hubungan pewarisan yang aman tipe.

Bagaimana entitas bisnis terhubung ke ci_base:

Semua entitas bisnis dalam repo skema merujuk ci_base subtipe untuk mendefinisikan klasifikasi dan perilaku mereka:

  • organization → merujuk ci_organization_type (yang mewarisi dari ci_entity_typeci_base)

  • user → merujuk ci_user_type (yang mewarisi dari ci_entity_typeci_base)

  • device → merujuk ci_device_type dan ci_device_status (keduanya mewarisi dari ci_base)

  • asset → merujuk ci_asset_type (yang mewarisi dari ci_entity_typeci_base)

  • inventory → merujuk ci_inventory_type (yang mewarisi dari ci_entity_typeci_base)

  • asset_group → merujuk ci_asset_group_type (yang mewarisi dari ci_entity_typeci_base)

Kategori tipe referensi:

Kategori
Tabel
Tujuan

Konfigurasi sistem

ci_module, ci_country, ci_role

Mendefinisikan modul sistem, referensi geografis, dan peran pengguna

Definisi tipe entitas

ci_entity_type, ci_device_type, ci_asset_type, ci_inventory_type, ci_organization_type, ci_user_type, ci_asset_group_type

Mengklasifikasikan semua entitas bisnis berdasarkan tipe

Status dan klasifikasi

ci_device_status, ci_asset_type_category

Melacak status entitas dan mengelompokkan tipe ke dalam kategori

Kontrol akses

ci_permission_scope

Mendefinisikan izin apa yang dapat diberikan (terkait dengan ci_module dan ci_entity_type)

Relasi

ci_device_relation_type

Mendefinisikan tipe hubungan antar perangkat (master-slave, backup, dll.)

Kategorisasi

ci_tag, ci_catalog_category

Memungkinkan penandaan yang fleksibel dan organisasi katalog

chevron-rightContoh pola kuerihashtag

Tabel kunci menurut kategori

Tabel-tabel dalam repo skema diatur ke dalam kategori fungsional. Deskripsi berikut merangkum tabel terpenting berdasarkan tujuan bisnisnya.

chevron-rightorganizationhashtag

Tujuan: Manajemen organisasi hirarkis

Atribut
Rincian

Kolom kunci

id, parent_id, path, organization_type_id, title_en, is_active, deleted_at

Pengindeksan

Indeks GiST pada path untuk kueri hirarkis, indeks pada parent_id dan organization_type_id

Catatan khusus

Menggunakan ltree untuk hierarki multi-level, mewarisi dari customizable_entity untuk dukungan bidang kustom

chevron-rightuserhashtag

Tujuan: Akun pengguna dan autentikasi

Atribut
Rincian

Kolom kunci

id, organization_id, user_type_id, identity_provider, identity_provider_id, full_name, is_active

Pengindeksan

Indeks unik pada (organization_id, identity_provider, identity_provider_id)

Catatan khusus

Integrasi penyedia identitas eksternal (Keycloak, Auth0, Okta), mewarisi dari customizable_entity

chevron-rightdevicehashtag

Tujuan: Perangkat pelacakan fisik

Atribut
Rincian

Kolom kunci

id, organization_id, device_type_id, status_id, hw_id, label

Pengindeksan

Indeks pada organization_id, device_type_id, status_id, hw_id

Catatan khusus

Identifier perangkat keras untuk pelacakan perangkat, mewarisi dari customizable_entity untuk bidang kustom

chevron-rightassethashtag

Tujuan: Aset fisik atau virtual

Atribut
Rincian

Kolom kunci

id, organization_id, asset_type_id, label, description

Pengindeksan

Indeks pada organization_id dan asset_type_id

Catatan khusus

Mewarisi dari customizable_entity, terhubung ke perangkat melalui device_asset_link

chevron-rightinventoryhashtag

Tujuan: Catatan inventaris dan gudang

Atribut
Rincian

Kolom kunci

id, organization_id, inventory_type_id, code

Pengindeksan

Indeks unik pada (organization_id, code)

Catatan khusus

Kode unik dalam organisasi, terhubung ke perangkat melalui device_inventory_link

chevron-rightasset_grouphashtag

Tujuan: Pengelompokan aset dengan pelacakan historis

Atribut
Rincian

Kolom kunci

id, organization_id, group_type_id, title_en, description

Relasi

FROM repo.asset_group AS ag JOIN repo.asset_group_item AS agi ON agi.group_id = ag.id JOIN repo.asset AS a ON a.id = agi.asset_id WHERE agi.detached_at IS NULL

Catatan khusus

Keanggotaan berbasis waktu melalui asset_group_item, kueri anggota saat ini dengan WHERE detached_at IS NULL

chevron-rightcustom_field_defhashtag

Tujuan: Definisi bidang kustom dan metadata

Atribut
Rincian

Kolom kunci

id, organization_id, owner_entity_type_id, code, field_type, is_multi, is_required

Konten

Tipe bidang mencakup text, number, boolean, date, datetime, entity_ref, catalog_item_ref

Catatan khusus

Memungkinkan bidang kustom yang fleksibel untuk jenis entitas apa pun, nilai disimpan di custom_field_value_* tabel

chevron-rightacl_role_permissionhashtag

Tujuan: Manajemen izin berbasis peran

Atribut
Rincian

Kolom kunci

id, role_id, permission_scope_id, target_entity_id, actions

Konten

Bitmask aksi (READ=1, UPDATE=2, DELETE=4, CREATE=8), izin spesifik target atau luas untuk tipe entitas

Relasi

FROM repo.user_role AS ur JOIN repo.acl_role_permission AS rp ON rp.role_id = ur.role_id WHERE ur.user_id = $user_id

Catatan khusus

Bekerja dengan user_role dan acl_user_scope untuk menentukan izin akhir pengguna

chevron-rightaudit_eventhashtag

Tujuan: Log audit terpadu untuk semua perubahan sistem

Atribut
Rincian

Kolom kunci

id, event_category, user_id, aggregate_type, aggregate_id, event_type, event_data, occurred_at

Pengindeksan

Indeks pada (user_id, occurred_at), (aggregate_type, aggregate_id, occurred_at), (event_category, occurred_at)

Catatan khusus

Dipartisi berdasarkan occurred_at (bulanan), dua kategori: auth (autentikasi) dan domain (peristiwa bisnis), menyimpan delta perubahan tingkat bidang dalam event_data JSONB

Hubungan data

The repo skema mengimplementasikan pola hubungan yang canggih untuk pemodelan data yang fleksibel:

Struktur hirarkis

  • Organisasi menggunakan path ltree untuk kueri pohon yang efisien

  • Item referensi (ci_base) mendukung hirarki opsional

  • Pemeliharaan path otomatis melalui trigger database

Pola pewarisan

  • Pewarisan tabel: customizable_entity → entitas bisnis (organization, user, device, asset, inventory, asset_group)

  • Pewarisan ID: ci_base → tabel tipe referensi

  • Diskriminasi tipe melalui entity_type_id dan discriminator kolom

Hubungan polimorfik

Beberapa tabel menggunakan referensi polimorfik tanpa constraint foreign key untuk fleksibilitas maksimum:

  • acl_role_permission.target_entity_id → setiap customizable_entity

  • acl_user_scope.target_entity_id → setiap customizable_entity

  • entity_tag.entity_id → setiap customizable_entity

Hubungan ini divalidasi pada tingkat aplikasi.

Informasi tambahan

Validasi data

The repo skema menegakkan integritas data melalui beberapa mekanisme:

Keterbatasan database

  • KONSTRAINT UNIQUE dengan dukungan soft delete (indeks parsial WHERE deleted_at IS NULL)

  • KONSTRAINT CHECK (mis., device_relation memastikan master_idslave_id)

  • KONSTRAINT NOT NULL pada bidang yang wajib

  • Nilai DEFAULT untuk timestamp dan flag boolean

Validasi pada tingkat aplikasi

  • Validasi tipe entitas untuk referensi polimorfik

  • Validasi katalog untuk referensi bidang kustom

  • Validasi tipe bidang kustom

  • Manajemen array bidang multi-nilai

Optimisasi query

Tabel diatur dengan strategi pengindeksan spesifik:

Indeks standar:

  • Semua foreign key memiliki indeks khusus

  • Indeks berbasis waktu pada created_at, updated_at, deleted_at

  • Indeks komposit untuk kolom yang sering dijoin

Indeks khusus:

  • Indeks GiST pada path ltree untuk kueri hirarkis

  • Indeks unik parsial yang mendukung soft delete

  • Indeks nilai bidang kustom untuk penyaringan dan pengurutan

  • Indeks audit event pada waktu + entitas untuk pencarian yang efisien

Pertimbangan performa:

  • Disarankan penggunaan connection pooling (PgBouncer)

  • Perawatan VACUUM rutin untuk tabel besar

  • Kemungkinan partisi di masa depan untuk device tabel oleh organization_id

  • View materialized untuk perhitungan kontrol akses yang kompleks

Last updated

Was this helpful?