Pada materi kali ini, kita akan melakukan Pengembangan pada struktur database yang sebelumnya pernah kita buat.
Sesuai dengan tujuan akhir, kita akan membuat database untuk aplikasi e-commerce. Oleh karena itu, kita akan melakukan beberapa penyesuaian pada database yang sudah ada.
Penyesuaian Struktur Tabel
Sesuai dengan tujuan akhir, kita akan membuat database untuk aplikasi e-commerce. Oleh karena itu, kita akan melakukan beberapa penyesuaian pada database yang sudah ada.
Struktur Database Sebelumnya :
Rancangan Tambahan Untuk Aplikasi E-commerce :
1. Penjual hanya bisa memiliki satu toko.
2. Setiap toko hanya memiliki satu alamat.
3. Pembeli bisa memiliki banyak alamat.
4. Setiap produk memiliki alamat (slug) unik dan gambar.
5. Pembeli bisa menyimpan produk pada keranjang.
6. Aplikasi akan terintegrasi dengan Raja Ongkir untuk mendapatkan total ongkir.
Penyesuaian Struktur Tabel
- Penyesuaian Tabel stores
- Penambahan attr user_id supaya setiap pengguna hanya bisa memiliki satu toko.
- Penambahan attr logo
- Penambahan attr deskrpsi toko
- Penambahan attr slug
- Penambahan Tabel Untuk Menampung Data Raja Ongkir
Catatan : Tabel-tabel ini akan digunakan untuk menampung data Provinsi, Kota dan Kecamatan dari Raja Ongkir.
CREATE TABLE ro_provinces (province_id SERIAL PRIMARY KEY,province_name VARCHAR(255) NOT NULL);CREATE TABLE ro_cities (city_id SERIAL PRIMARY KEY,province_id INT NOT NULL,city_name VARCHAR(255) NOT NULL,postal_code CHAR(5),FOREIGN KEY (province_id) REFERENCES ro_provinces(province_id) ON DELETE CASCADE);CREATE TABLE ro_subdistricts (subdistrict_id SERIAL PRIMARY KEY,city_id INT NOT NULL,subdistrict_name VARCHAR(255) NOT NULL,FOREIGN KEY (city_id) REFERENCES ro_cities(city_id) ON DELETE CASCADE); - Penambahan Tabel store_addressesCREATE TABLE store_addresses (id SERIAL PRIMARY KEY,store_id INTEGER NOT NULL REFERENCES stores(id) ON DELETE CASCADE,district_id INTEGER NOT NULL REFERENCES ro_subdistricts(subdistrict_id) ON DELETE RESTRICT,location_name VARCHAR(100) NOT NULL,street_address TEXT NOT NULL,postal_code VARCHAR(10),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- Penambahan Tabel user_addressesCREATE TABLE user_addresses (id SERIAL PRIMARY KEY,user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,district_id INTEGER NOT NULL REFERENCES ro_subdistricts(subdistrict_id) ON DELETE RESTRICT,label VARCHAR(50), -- Contoh: 'Rumah', 'Kantor'recipient_name VARCHAR(100) NOT NULL,phone_number VARCHAR(15) NOT NULL,street_address TEXT NOT NULL,postal_code VARCHAR(10),is_default BOOLEAN DEFAULT FALSE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- Penyesuaian Tabel products
- Penambahan attr slug
- Penambahan attr weight
- Penambahan tabel product_images
Catatan : Tabel ini akan digunakan untuk menyimpan gambar setiap produk, rencananya satu produk bisa memiliki banyak gambar. - Penambahan Tabel cartCREATE TABLE carts (id SERIAL PRIMARY KEY,user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE,quantity INTEGER NOT NULL DEFAULT 1,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- Penambahan Tabel paymentCREATE TABLE payments (id SERIAL PRIMARY KEY,order_id INTEGER NOT NULL REFERENCES orders(id) ON DELETE CASCADE,payment_method INTEGER NOT NULL, -- 1 = Bank Transfer, 2 = Credit Cardpayment_status INTEGER NOT NULL, -- 0 = Menunggu Pembayaran, 1 = Dibayartransaction_id VARCHAR(100), -- ID transaksi dari Midtransbank_name VARCHAR(50), -- Nama bank yang digunakan untuk pembayaranva_number VARCHAR(50), -- Nomor Virtual Account (untuk Bank Transfer)amount NUMERIC(10, 2) NOT NULL, -- Jumlah yang dibayarkanpaid_at TIMESTAMP, -- Waktu pembayaranexpiration_time TIMESTAMP,payment_url VARCHAR(255),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- Penambahan Tabel shippingCREATE TABLE shippings (id SERIAL PRIMARY KEY,order_id INTEGER NOT NULL REFERENCES orders(id) ON DELETE CASCADE,expedition_name VARCHAR(50) NOT NULL, -- 'JNE', 'POS Indonesia', 'Tiki', dll.shipping_type VARCHAR(50), -- 'REGULAR', 'OKE', 'YES', dll.estimated_delivery_time VARCHAR(20), -- '1 - 2 Hari'.tracking_number VARCHAR(100),shipped_at TIMESTAMP, -- Waktu pengirimandelivered_at TIMESTAMP, -- Waktu diterimacourier_code VARCHAR(50),weight NUMERIC(10, 2),cost NUMERIC(10, 2),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);CREATE TABLE shipping_addresses (id SERIAL PRIMARY KEY,shipping_id INTEGER NOT NULL REFERENCES shippings(id) ON DELETE CASCADE,origin_district_id INTEGER NOT NULL,origin_district_name VARCHAR(255) NOT NULL,origin_city_id INTEGER NOT NULL,origin_city_name VARCHAR(255) NOT NULL,origin_province_id INTEGER NOT NULL,origin_province_name VARCHAR(255) NOT NULL,recipient_name VARCHAR(255) NOT NULL,recipient_phone VARCHAR(20) NOT NULL,street_address VARCHAR(255) NOT NULL,postal_code VARCHAR(10),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- Penyesuaian Tabel ordersALTER TABLE ordersADD COLUMN order_status INTEGER NOT NULL DEFAULT 0; -- 0 = Menunggu, 1 = Diproses, 2 = Dikirim, 3 = Selesai, 4 = DibatalkanALTER TABLE ordersADD COLUMN order_number VARCHAR(50) UNIQUE;ALTER TABLE ordersADD COLUMN notes TEXT;
Pengembangan Sturktur Database telah selesai kita lakukan, dengan pengembangan ini sudah sangat cukup untuk kita membuat aplikasi e-commerce. Setelah ini, teman-teman dapat melanjutkan ke seri tutorial Laravel untuk membangun API menggunakan database yang telah dibuat.
Struktur akhir database :
Temen-temen bisa mengunduh database hasil pengembangan pada link berikut :
Mungkin itu saja yang bisa kita pelajari pada materi kali ini. Semoga materinya dapat memberikan sedikit gambaran bagi temen-temen mengenai struktur database untuk e-commerce. Jika teman-teman memiliki pertanyaan atau ingin berbagi pengalaman, silakan ketikkan pada kolom komentar di bawah.
Sedikit Tentang Saya :
Sebagai seorang programmer profesional dengan pengalaman sekitar 4 tahun di bidang IT, saya siap membantu Anda dengan berbagai kebutuhan konsultasi.
Jangan ragu untuk menghubungi saya melalui WhatsApp.
Sampai jumpa di tutorial berikutnya!
Kontak Saya :
Email : ronisurya.115@gmail.com
WhatsApp : 081222821596
Website : Roni Surya