Database Penjualan Lengkap & Penjelasan Struktur Tabel
Database penjualan adalah fondasi penting untuk sistem penjualan apapun. Artikel ini menjelaskan setiap tabel, struktur kolom, relasi antar tabel, dan alasan desainnya agar pembaca memahami mengapa database disusun seperti ini.
1. Tabel customers
– Data Pelanggan
Tabel customers
menyimpan semua informasi pelanggan. Struktur kolom dipilih untuk:
- customer_id: Primary Key, unik untuk setiap pelanggan.
- name: Nama pelanggan, wajib diisi (
NOT NULL
). - email: Digunakan untuk login atau notifikasi, harus unik.
- phone: Nomor telepon pelanggan, opsional.
- address: Alamat lengkap pelanggan.
- created_at: Waktu pelanggan ditambahkan ke database, berguna untuk analisis.
SQL untuk membuat tabel:
CREATE TABLE customers ( customer_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, phone VARCHAR(20), address TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
Contoh data:
ID | Nama | Telepon | Alamat | Created At | |
---|---|---|---|---|---|
1 | Budi Santoso | budi@example.com | 08123456789 | Jl. Merdeka No. 10, Jakarta | 2025-09-15 08:00 |
2 | Siti Aminah | siti@example.com | 08198765432 | Jl. Sudirman No. 5, Bandung | 2025-09-15 09:30 |
Alasan desain:
Dengan Primary Key customer_id
, relasi ke tabel lain (pesanan) menjadi mudah. Email unik mencegah duplikasi pelanggan.
2. Tabel products
– Data Produk
Tabel products
menyimpan informasi produk yang dijual. Struktur dipilih agar mudah melakukan:
- Pengelolaan stok.
- Perhitungan harga total pesanan.
- Referensi produk di detail pesanan (
order_items
).
SQL untuk membuat tabel:
CREATE TABLE products ( product_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, description TEXT, price DECIMAL(10,2) NOT NULL, stock INT DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
ID | Nama | Deskripsi | Harga | Stok | Created At |
---|---|---|---|---|---|
1 | Laptop Asus ROG | Laptop gaming 16GB RAM | 15000000 | 10 | 2025-09-15 08:15 |
2 | Mouse Logitech | Mouse wireless Logitech | 250000 | 50 | 2025-09-15 08:20 |
Alasan desain:
Kolom price
dan stock
penting untuk menghitung total penjualan dan memonitor stok barang. product_id
menjadi Primary Key untuk referensi di tabel order_items
.
3. Tabel orders
– Data Pesanan
Tabel orders
menyimpan informasi pesanan dari pelanggan. Struktur dirancang agar mudah:
- Menghubungkan pesanan ke pelanggan dengan
customer_id
. - Mencatat total harga pesanan.
- Menentukan status pesanan (
pending
,completed
, dll).
CREATE TABLE orders ( order_id INT PRIMARY KEY AUTO_INCREMENT, customer_id INT, order_date DATETIME DEFAULT CURRENT_TIMESTAMP, total DECIMAL(10,2), status VARCHAR(20) DEFAULT 'pending', FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
ID | ID Pelanggan | Total | Status | Order Date |
---|---|---|---|---|
1 | 1 | 15250000 | completed | 2025-09-15 10:00 |
2 | 2 | 250000 | pending | 2025-09-15 10:15 |
Alasan desain:
Relasi customer_id → orders
memudahkan tracking siapa pelanggan yang melakukan pesanan. Kolom total
dan status
berguna untuk laporan penjualan dan pengiriman.
4. Tabel order_items
– Detail Produk Per Pesanan
Tabel ini menjelaskan produk apa saja yang dibeli di setiap pesanan. Struktur ini memungkinkan:
- Satu pesanan memiliki banyak produk.
- Menghitung total harga tiap item dan jumlahnya.
- Relasi ke
products
untuk informasi harga dan stok.
CREATE TABLE order_items ( order_item_id INT PRIMARY KEY AUTO_INCREMENT, order_id INT, product_id INT, quantity INT, price DECIMAL(10,2), FOREIGN KEY (order_id) REFERENCES orders(order_id), FOREIGN KEY (product_id) REFERENCES products(product_id) );
ID | ID Pesanan | ID Produk | Jumlah | Harga |
---|---|---|---|---|
1 | 1 | 1 | 1 | 15000000 |
2 | 1 | 2 | 1 | 250000 |
3 | 2 | 2 | 1 | 250000 |
Alasan desain:
Tabel ini membentuk relasi many-to-many antara pesanan dan produk. Dengan cara ini, satu pesanan bisa memiliki beberapa produk, dan satu produk bisa muncul di banyak pesanan.
5. Tabel payments
– Data Pembayaran
Tabel payments
menyimpan informasi pembayaran tiap pesanan:
- Mencatat jumlah yang dibayarkan.
- Metode pembayaran (Transfer, COD, dll).
- Status pembayaran (pending, completed).
- Relasi ke
orders
untuk mengetahui pesanan mana yang dibayar.
CREATE TABLE payments ( payment_id INT PRIMARY KEY AUTO_INCREMENT, order_id INT, payment_date DATETIME DEFAULT CURRENT_TIMESTAMP, amount DECIMAL(10,2), method VARCHAR(50), status VARCHAR(20) DEFAULT 'pending', FOREIGN KEY (order_id) REFERENCES orders(order_id) );
ID | ID Pesanan | Jumlah | Metode | Status |
---|---|---|---|---|
1 | 1 | 15250000 | Transfer Bank | completed |
2 | 2 | 0 | COD | pending |
Alasan desain:
Tabel pembayaran memungkinkan mencatat banyak metode dan status pembayaran per pesanan. Ini fleksibel untuk sistem penjualan yang lebih kompleks.
Baca juga: Database Solusi Perbaikan & Masalah Motor
Kesimpulan
Database penjualan ini memiliki struktur:
- Pelanggan (
customers
) → satu pelanggan bisa memiliki banyak pesanan. - Produk (
products
) → informasi produk digunakan di setiap pesanan. - Pesanan (
orders
) → menghubungkan pelanggan dan detail produk. - Detail Pesanan (
order_items
) → relasi many-to-many antara pesanan dan produk. - Pembayaran (
payments
) → fleksibel untuk metode dan status pembayaran.
Dengan desain ini, sistem penjualan menjadi efisien, mudah diperluas, dan memudahkan analisis laporan penjualan serta stok produk.