Setelah menyelesaikan instalasi dan setup CodeIgniter 4 di Part 1, sekarang kita mulai membangun fondasi databasenya. Di tutorial ini, kita akan belajar bagaimana membuat Tabel Produk dan Transaksi di CodeIgniter 4 secara terstruktur dan optimal. Langkah-langkah ini akan mempermudah integrasi dengan aplikasi POS yang sedang kita bangun.
Selanjutnya, kita setup Tabel Produk dan Transaksi di CodeIgniter 4 agar siap digunakan dalam aplikasi POS. Berikut tabel-tabel yang akan dibuat:
- Tabel produk (master barang)
- Tabel transaksi (header)
- Tabel transaksi detail (barang-barang dalam satu transaksi)
- Tabel customer (opsional)
Pembuatan Tabel Produk dan Transaksi di CodeIgniter 4
Pada langkah pertama, kita akan membuat Tabel Produk dan Transaksi di CodeIgniter 4. Anda bisa menggunakan phpmyadmin atau bisa juga melalui mysql command. Berikut sintax untuk membuat tabel-tabel tersebut.
1️⃣ Tabel produk
Menyimpan daftar produk/barang yang dijual.
CREATE TABLE produk (
id INT AUTO_INCREMENT PRIMARY KEY,
kode_produk VARCHAR(50) UNIQUE NOT NULL,
nama_produk VARCHAR(100) NOT NULL,
harga DECIMAL(10, 2) NOT NULL,
stok INT NOT NULL DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Penjelasan:
kode_produk
: bisa berupa SKU atau kode unik.stok
: akan dikurangi otomatis setiap transaksi terjadi.
2️⃣ Tabel customer
(opsional tapi penting)
Menyimpan data pelanggan jika ingin mengembangkan sistem loyalty/member.
CREATE TABLE customer (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
email VARCHAR(100),
no_hp VARCHAR(20),
alamat TEXT
);
3️⃣ Tabel transaksi
Menyimpan informasi umum transaksi seperti waktu, total belanja, kasir, dan customer.
CREATE TABLE transaksi (
id INT AUTO_INCREMENT PRIMARY KEY,
tanggal DATETIME DEFAULT CURRENT_TIMESTAMP,
total DECIMAL(10, 2) DEFAULT 0,
kasir VARCHAR(100),
customer_id INT DEFAULT NULL,
FOREIGN KEY (customer_id) REFERENCES customer(id) ON DELETE SET NULL
);
4️⃣ Tabel transaksi_detail
Menyimpan daftar barang yang dibeli di setiap transaksi.
CREATE TABLE transaksi_detail (
id INT AUTO_INCREMENT PRIMARY KEY,
transaksi_id INT NOT NULL,
produk_id INT NOT NULL,
harga DECIMAL(10, 2) NOT NULL,
jumlah INT NOT NULL,
subtotal DECIMAL(10, 2) AS (harga * jumlah) STORED,
FOREIGN KEY (transaksi_id) REFERENCES transaksi(id) ON DELETE CASCADE,
FOREIGN KEY (produk_id) REFERENCES produk(id)
);
📌 Penjelasan Tabel Produk dan Transaksi di CodeIgniter 4:
Tabel | Fungsi |
---|---|
transaksi | Mewakili 1 transaksi penuh. Setiap baris di tabel ini menunjukkan transaksi secara keseluruhan, misalnya: “Transaksi #1012 pada 29 April 2025 oleh kasir A.” |
transaksi_detail | Menyimpan detail barang yang dibeli dalam setiap transaksi. Satu transaksi bisa memiliki beberapa produk yang dibeli. Setiap baris menunjukkan satu produk yang dibeli, misalnya: Produk A (jumlah 2) dan Produk B (jumlah 1). |
produk | Menyimpan informasi tentang produk yang dijual, seperti nama produk, harga, dan stok yang tersedia. |
customer | Menyimpan data customer yang melakukan pembelian, seperti nama, email, dan alamat. Jika transaksi melibatkan customer, maka customer_id akan diisi. |

Hubungan Antar Tabel Produk dan Transaksi di CodeIgniter 4
Relasi | Deskripsi |
---|---|
transaksi → transaksi_detail | Satu transaksi di tabel transaksi dapat memiliki beberapa detail transaksi di tabel transaksi_detail . Relasi ini menyatakan produk apa saja yang dibeli dalam transaksi tersebut. |
transaksi_detail → produk | Setiap baris di transaksi_detail terkait dengan satu produk yang dibeli. Relasi ini menghubungkan setiap transaksi dengan produk yang dibeli. |
transaksi → customer | Transaksi bisa terkait dengan customer tertentu. Setiap transaksi di tabel transaksi bisa mengacu pada customer_id untuk menunjukkan siapa yang melakukan transaksi. |
produk → transaksi_detail | Setiap produk yang dijual dalam transaksi dicatat di tabel transaksi_detail . Ini memastikan stok produk yang tersedia akan berkurang setiap kali terjadi penjualan. |
Contoh Kasus:
- Transaksi #1012 melibatkan 2 produk: Produk A dan Produk B.
- Di tabel
transaksi
, hanya ada 1 baris yang mencatat informasi transaksi umum. - Di tabel
transaksi_detail
, ada 2 baris:- Baris pertama untuk Produk A (jumlah 2, harga 50.000).
- Baris kedua untuk Produk B (jumlah 1, harga 30.000).
- Di tabel
Beberapa kelebihan dari struktur database dan desain yang kita bahas untuk aplikasi POS (Point of Sale) ini antara lain:
1. Struktur Terorganisir dengan Baik
- Modular: Dengan pemisahan antara
transaksi
dantransaksi_detail
, setiap bagian dari transaksi disimpan dengan jelas dan terpisah, memudahkan untuk melacak data transaksi dan produk yang terlibat. - Fleksibilitas: Satu transaksi bisa mencakup banyak produk tanpa perlu membuat banyak tabel atau data berulang. Ini menghindari redundansi dan mempermudah pemeliharaan data.
2. Kemudahan dalam Pengelolaan Stok Produk
- Update Stok Otomatis: Dengan sistem seperti ini, ketika sebuah produk dibeli (misalnya melalui
transaksi_detail
), stok produk dapat langsung diperbarui, mempermudah pengelolaan persediaan. - Pelacakan Produk yang Jelas: Dengan relasi yang jelas antara
produk
dantransaksi_detail
, mudah untuk mengetahui produk mana yang terjual dalam periode waktu tertentu, serta jumlah yang terjual.
3. Skalabilitas dan Pengembangan Lebih Lanjut
- Modularitas: Misalnya, kamu bisa menambah fitur seperti
customer loyalty
,diskon
, ataumetode pembayaran
dengan cukup menambahkan tabel dan relasi baru tanpa merombak banyak bagian dari struktur yang sudah ada. - Menambah Fitur Pembelian dan Supplier: Seperti yang kamu sebutkan sebelumnya, kamu bisa menambahkan sistem pembelian produk dengan supplier dan pengelolaan stok masuk (pembelian produk). Ini dapat dilakukan dengan menambahkan tabel seperti
pembelian
dansupplier
, serta melakukan perubahan kecil pada tabel yang ada (seperti relasi keproduk
).
4. Kemudahan dalam Laporan dan Analisis
- Laporan Transaksi: Dengan data yang terstruktur, kamu bisa dengan mudah menarik laporan transaksi, melihat produk mana yang paling banyak terjual, total transaksi per customer, dan lain-lain.
- Analisis Produk dan Stok: Dengan data transaksi dan produk yang terpisah, kamu bisa menganalisis tren penjualan produk tertentu, serta memperkirakan kapan harus melakukan restock.
5. Pengelolaan Customer
- Pelacakan Data Customer: Dengan adanya tabel
customer
, kamu bisa melacak pembelian yang dilakukan oleh masing-masing customer. Ini bisa berguna untuk keperluan layanan pelanggan, diskon khusus, atau analisis perilaku pembelian. - Fleksibilitas dalam Hubungan Customer-Transaksi: Relasi ini memberi fleksibilitas jika nantinya ingin menambahkan fitur khusus untuk customer, seperti sistem poin atau loyalitas.
6. Keamanan dan Integritas Data
- Foreign Key dan Relasi: Penggunaan foreign key antara tabel (
transaksi → transaksi_detail
,transaksi → customer
, dantransaksi_detail → produk
) membantu menjaga integritas data. Misalnya, jika sebuah transaksi dihapus, seluruh detailnya di tabeltransaksi_detail
juga akan terhapus, mencegah data yang tidak konsisten. - Mencegah Redundansi: Dengan mendesain tabel
transaksi_detail
terpisah, tidak ada duplikasi data untuk produk yang dibeli dalam satu transaksi, yang mengurangi risiko kesalahan input dan duplikasi data.
7. Simplicity in Queries
- Pengambilan Data yang Efisien: Karena struktur ini modular, kamu bisa menulis query SQL yang lebih efisien dan lebih mudah dibaca, misalnya untuk mengambil data transaksi lengkap dengan produk yang dibeli, atau menghitung total penjualan berdasarkan produk.
Kesimpulan:
Struktur tabel ini menawarkan kejelasan, kemudahan pengelolaan data, dan skala pengembangan yang baik. Kamu bisa menambahkan fitur baru atau mengubah alur bisnis tanpa banyak perubahan pada struktur database yang ada. Dengan cara ini, aplikasi POS menjadi lebih terorganisir dan mudah untuk dikembangkan lebih lanjut sesuai kebutuhan bisnis di masa depan.
📌 Selanjutnya di Part 3:
Kita akan membuat:
- Tampilan sederhana daftar produk menggunakan View bawaan CI4.
- Model dan Controller untuk Produk.
- CRUD Produk (Create, Read, Update, Delete).