Skip to content

Database Architecture

RetailOS menggunakan dua jenis database yang dipilih sesuai kebutuhan masing-masing tier:

Dual Database Strategy

AspekPostgreSQL (Cloud)SQLite (Store/DC)
LokasiServer kantor pusatKomputer toko / DC
FungsiData terpusat, multi-userData lokal, single-writer
Ukuran tipikal5-50 GB50-500 MB per toko
Concurrent accessRatusan koneksiSingle writer, multi reader
Backuppg_dump, WAL archivingFile copy, cloud sync
Decimal precisionNUMERIC(18,4)REAL (IEEE 754 double)
TimezoneTIMESTAMPTZTEXT (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.sql

Migrasi dijalankan oleh package pkg/dbmigrate yang tracking versi menggunakan tabel schema_version.

Konvensi Desain

  1. Semua monetary values di PostgreSQL menggunakan NUMERIC(18,4) -- bukan float
  2. Semua IDs menggunakan TEXT (UUIDv7 string) -- bukan auto-increment integer
  3. Timestamps di PostgreSQL menggunakan TIMESTAMPTZ, di SQLite menggunakan ISO 8601 TEXT
  4. Soft delete tidak digunakan -- data yang sudah diproses bersifat immutable (event log)
  5. Foreign keys digunakan di SQLite untuk integritas referensial lokal
  6. Indexes dibuat untuk semua kolom yang sering di-query (status, dates, foreign keys)

Detail Schema

RetailOS - Sistem ERP Retail Modern untuk Indonesia