Database Architecture
RetailOS menggunakan dua jenis database yang dipilih sesuai kebutuhan masing-masing tier:
Dual Database Strategy
| Aspek | PostgreSQL (Cloud) | SQLite (Store/DC) |
|---|---|---|
| Lokasi | Server kantor pusat | Komputer toko / DC |
| Fungsi | Data terpusat, multi-user | Data lokal, single-writer |
| Ukuran tipikal | 5-50 GB | 50-500 MB per toko |
| Concurrent access | Ratusan koneksi | Single writer, multi reader |
| Backup | pg_dump, WAL archiving | File copy, cloud sync |
| Decimal precision | NUMERIC(18,4) | REAL (IEEE 754 double) |
| Timezone | TIMESTAMPTZ | TEXT (ISO 8601 string) |
Migration System
Migrasi database menggunakan sequential SQL files yang dijalankan otomatis saat startup:
migrations/
├── cloud/ → PostgreSQL migrations (13 files)
│ ├── 001_master_data.sql
│ ├── 002_procurement.sql
│ ├── 003_commercial.sql
│ ├── 010_identity.sql
│ ├── 011_reports.sql
│ ├── 020_hr_ga.sql
│ ├── 030_accounting.sql
│ ├── 030b_coa_seed.sql
│ ├── 030c_arap.sql
│ ├── 031_tax.sql
│ ├── 032_payroll.sql
│ └── 035_store_ops.sql
├── store/ → SQLite migrations (26 files)
│ ├── 001_eventlog.sql
│ ├── 004_pos.sql
│ ├── 003_inventory.sql
│ └── ... (sampai 026)
└── dc/ → SQLite migrations (4 files)
├── 001_init.sql
├── 002_qc_putaway.sql
├── 003_commands.sql
└── 004_cycle_count.sqlMigrasi dijalankan oleh package pkg/dbmigrate yang tracking versi menggunakan tabel schema_version.
Konvensi Desain
- Semua monetary values di PostgreSQL menggunakan
NUMERIC(18,4)-- bukan float - Semua IDs menggunakan
TEXT(UUIDv7 string) -- bukan auto-increment integer - Timestamps di PostgreSQL menggunakan
TIMESTAMPTZ, di SQLite menggunakan ISO 8601TEXT - Soft delete tidak digunakan -- data yang sudah diproses bersifat immutable (event log)
- Foreign keys digunakan di SQLite untuk integritas referensial lokal
- Indexes dibuat untuk semua kolom yang sering di-query (status, dates, foreign keys)
Detail Schema
- Cloud Schema (PostgreSQL) -- Tabel untuk semua module cloud
- Store Schema (SQLite) -- Tabel untuk data toko lokal