WebTech Interaktif XI RPL

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:

  1. Menampilkan daftar master produk lengkap dengan nama kategorinya (Read).
  2. Mendaftarkan produk baru dengan validasi format dan kode unik (Create).
  3. Mengubah data harga atau nama produk tanpa merusak konsistensi data (Update).
  4. Menghapus produk dari daftar katalog (Delete).
  5. Memproses transaksi kasir: memilih produk, memeriksa ketersediaan stok, menghitung total bayar, mencatat riwayat transaksi, dan memotong stok produk terkait secara real-time.
  6. 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 key category_id di tabel products.
  • Product ke Transaction (1 : N) — satu produk dapat terjual dalam banyak transaksi (hasMany); satu baris transaksi merujuk pada satu produk tertentu (belongsTo). Penghubungnya kolom product_id di tabel transactions, sedangkan invoice_number menjadi nomor nota unik setiap transaksi.