Laravel · Bab 3
Studi Kasus Smart Retail App & Desain Database
Kebutuhan fungsional aplikasi kasir retail, desain tiga tabel categories–products–transactions, dan relasi 1:N yang akan dibangun di Lab 1–7.
Seluruh lab di topik ini membangun satu sistem utuh. Bab ini menjelaskan skenario bisnisnya dan rancangan database yang menjadi pegangan dari Lab 1 sampai Lab 7.
3.1 Narasi Studi Kasus & Kebutuhan Fungsional
Kamu akan membangun sistem operasional untuk unit usaha retail modern bernama Smart Retail App. Sistem ini mengelola data katalog produk yang terhubung secara relasional dengan kategori produk, serta mencatat transaksi kasir yang langsung memotong sisa stok produk secara otomatis.
Kebutuhan fungsional sistem:
- Menampilkan daftar master produk lengkap dengan nama kategorinya (Read).
- Mendaftarkan produk baru dengan validasi format dan kode unik (Create).
- Mengubah data harga atau nama produk tanpa merusak konsistensi data (Update).
- Menghapus produk dari daftar katalog (Delete).
- Memproses transaksi kasir: memilih produk, memeriksa ketersediaan stok, menghitung total bayar, mencatat riwayat transaksi, dan memotong stok produk terkait secara real-time.
- Mengamankan modul operasional dengan sistem autentikasi (hanya petugas kasir terdaftar yang dapat memanipulasi data).
3.2 Desain Database & Relasi Antar-Entitas
Sistem memakai tiga tabel: categories (master), products (master), dan transactions (transaksi).
┌─────────────────────────┐ ┌─────────────────────────┐
│ categories │ │ products │
├─────────────────────────┤ ├─────────────────────────┤
│ PK id │ 1 N │ PK id │
│ name │<───────────O│ FK category_id │
│ description │ │ product_code │
│ timestamps │ │ name │
└─────────────────────────┘ │ price │
│ stock │
│ timestamps │
└─────────────────────────┘
│ 1
│
│ N
┌─────────────────────────┐
│ transactions │
├─────────────────────────┤
│ PK id │
│ FK product_id │
│ invoice_number │
│ quantity │
│ total_price │
│ transaction_date │
│ timestamps │
└─────────────────────────┘
Spesifikasi Relasi
- Category ke Product (
1 : N) — satu kategori menaungi banyak produk (hasMany); satu produk terikat pada satu kategori (belongsTo). Penghubungnya kolom foreign keycategory_iddi tabelproducts. - Product ke Transaction (
1 : N) — satu produk dapat terjual dalam banyak transaksi (hasMany); satu baris transaksi merujuk pada satu produk tertentu (belongsTo). Penghubungnya kolomproduct_iddi tabeltransactions, sedangkaninvoice_numbermenjadi nomor nota unik setiap transaksi.