Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database toko online dan keranjang belanja untuk mengelola pengguna, produk, ulasan, keranjang, pesanan, dan pembayaran. Ini dapat digunakan lebih lanjut untuk mengembangkan situs web atau aplikasi berbasis toko online dan keranjang belanja.
Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.
Keranjang Belanja Online
Catatan :Memungkinkan pesanan tamu untuk melakukan pemesanan tanpa login. Keamanan dapat ditangani dengan mengikuti Database RBAC di MySql.
Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu, Cara Menginstal MySQL 8 di Windows, Cara Menginstal MySQL 8 Dengan Workbench Di Windows 10, Database RBAC di MySql, Database Blog di MySql, Database Kuis Di MySQL, Basis Data Poll &Survei Di MySQL, dan Pelajari Kueri SQL Dasar di MySQL.
Database Toko
Langkah pertama adalah membuat Database Toko. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.
CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Saya telah menggunakan set karakter utf8mb4 untuk mendukung berbagai karakter.
Tabel Pengguna
Di bagian ini, kita akan mendesain Tabel Pengguna untuk menyimpan informasi pengguna. Tabel yang sama dapat digunakan untuk mengelola berbagai jenis pengguna termasuk admin dan pelanggan. Ini juga dapat digunakan untuk menghubungkan pembuat produk (dari panel admin) dan pesanan pelanggan yang ditempatkan di situs web. Pengguna dapat melacak pesanan mereka sendiri dan melacak statusnya. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengguna.
Id | Id unik untuk mengidentifikasi pengguna. |
Nama Depan | Nama depan pengguna. |
Nama Tengah | Nama tengah pengguna. |
Nama Belakang | Nama belakang pengguna. |
Seluler | Nomor ponsel pengguna. Ini dapat digunakan untuk tujuan login dan registrasi. |
Email pengguna. Ini dapat digunakan untuk tujuan login dan registrasi. | |
Hash Kata Sandi | Hash kata sandi yang dihasilkan oleh algoritme yang sesuai. Kita harus menghindari penyimpanan kata sandi biasa atau terenkripsi. |
Admin | Bendera untuk mengidentifikasi apakah pengguna adalah administrator. Tidak diperlukan jika tabel RBAC dibuat dengan mengikuti desain database RBAC. |
Penjual | Bendera untuk mengidentifikasi apakah pengguna dapat meng-host produk di toko. Tidak diperlukan jika tabel RBAC dibuat dengan mengikuti desain database RBAC. |
Terdaftar Di | Kolom ini dapat digunakan untuk menghitung umur pengguna dengan aplikasi tersebut. |
Login Terakhir | Ini dapat digunakan untuk mengidentifikasi login terakhir pengguna. |
Pengantar | Pengenalan singkat tentang Pengguna Vendor yang akan ditampilkan di Halaman Produk. |
Profil | Detail vendor yang akan ditampilkan di Halaman Produk. |
Tabel Pengguna dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`admin` TINYINT(1) NOT NULL DEFAULT 0,
`vendor` TINYINT(1) NOT NULL DEFAULT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );
Tabel Produk
Di bagian ini, kita akan mendesain Tabel Produk untuk menyimpan data produk. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Produk.
Id | Id unik untuk mengidentifikasi produk. |
Id Pengguna | ID pengguna untuk mengidentifikasi admin atau vendor. |
Judul | Judul produk yang akan ditampilkan di Halaman Toko dan Halaman Produk. |
Judul Meta | Judul meta yang akan digunakan untuk judul browser dan SEO. |
Siput | Siput untuk membentuk URL. |
Ringkasan | Ringkasan untuk menyebutkan sorotan utama. |
Ketik | Jenis untuk membedakan antara berbagai jenis produk. |
SKU | Unit Penyimpanan Stok untuk melacak inventaris produk. |
Harga | Harga produk. |
Diskon | Diskon produk. |
Kuantitas | Jumlah produk yang tersedia. |
Belanja | Ini dapat digunakan untuk mengidentifikasi apakah produk tersedia untuk umum untuk belanja. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat produk dibuat. |
Diperbarui Pada | Menyimpan tanggal dan waktu pembaruan produk. |
Diterbitkan Pada | Ini menyimpan tanggal dan waktu saat produk dipublikasikan di Toko. |
Mulai Dari | Ini menyimpan tanggal dan waktu saat penjualan produk dimulai. |
Berakhir Pada | Ini menyimpan tanggal dan waktu di mana penjualan produk berakhir. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan produk. |
Ini menggunakan jumlah kolom untuk melacak stok yang tersedia di inventaris produk untuk menjaga desain tetap sederhana. Mungkin diperlukan untuk menentukan kuantitas dengan beberapa kolom untuk mencakup berbagai macam produk. Kolom yang mungkin adalah SellQuantity, sellUnit, stockQuantity, dan stockUnit dimana sellQuantity dan sellUnit dapat digunakan untuk ditampilkan di Toko untuk pembeli dan stockQuantity dan stockUnit dapat digunakan untuk melacak inventaris. Mungkin juga diperlukan untuk mengubah sellUnit menjadi stockUnit saat memperbarui inventaris saat melakukan pemesanan. Tabel Produk dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`product` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`shop` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_product_user` (`userId` ASC),
CONSTRAINT `fk_product_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Meta Produk
Tabel Meta Produk dapat digunakan untuk menyimpan informasi tambahan tentang produk termasuk URL spanduk produk, dll. Di bawah ini adalah deskripsi dari semua kolom Tabel Meta Produk.
Id | Id unik untuk mengidentifikasi meta produk. |
Id Produk | Id produk untuk mengidentifikasi produk induk. |
Kunci | Kunci yang mengidentifikasi meta. |
Konten | Kolom yang digunakan untuk menyimpan metadata produk. |
Tabel Meta Produk dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`product_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_product` (`productId` ASC),
UNIQUE INDEX `uq_product_meta` (`productId` ASC, `key` ASC),
CONSTRAINT `fk_meta_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Tabel Tinjauan Produk
Di bagian ini, kami akan mendesain Tabel Tinjauan Produk untuk menyimpan review produk. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Tinjauan Produk.
Id | Id unik untuk mengidentifikasi ulasan produk. |
Id Produk | Id produk untuk mengidentifikasi produk induk. |
Id Induk | Id induk untuk mengidentifikasi ulasan induk. |
Judul | Judul ulasan. |
Peringkat | Nilai ulasan. |
Diterbitkan | Ini dapat digunakan untuk mengidentifikasi apakah ulasan tersedia untuk umum. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat ulasan dikirimkan. |
Diterbitkan Pada | Ini menyimpan tanggal dan waktu saat ulasan diterbitkan. |
Konten | Kolom yang digunakan untuk menyimpan detail ulasan. |
Tabel Tinjauan Produk dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`product_review` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`rating` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_review_product` (`productId` ASC),
CONSTRAINT `fk_review_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `shop`.`product_review`
ADD INDEX `idx_review_parent` (`parentId` ASC);
ALTER TABLE `shop`.`product_review`
ADD CONSTRAINT `fk_review_parent`
FOREIGN KEY (`parentId`)
REFERENCES `shop`.`product_review` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Kategori dan Tabel Kategori Produk
Di bagian ini, kita akan mendesain Tabel Kategori dan Tabel Kategori Produk untuk menyimpan kategori produk dan pemetaannya. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori.
Id | Id unik untuk mengidentifikasi kategori. |
Id Induk | Id induk untuk mengidentifikasi kategori induk. |
Judul | Judul kategori. |
Judul Meta | Judul meta yang akan digunakan untuk judul browser dan SEO. |
Siput | Slug kategori untuk membentuk URL. |
Konten | Kolom yang digunakan untuk menyimpan detail kategori. |
Tabel Kategori dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));
ALTER TABLE `shop`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `shop`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `shop`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori Produk.
Id Produk | Id produk untuk mengidentifikasi produk. |
Id Kategori | Id kategori untuk mengidentifikasi kategori. |
Tabel Kategori Produk dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`product_category` (
`productId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`productId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_product` (`productId` ASC),
CONSTRAINT `fk_pc_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `shop`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabel Tag dan Tabel Tag Produk
Mirip dengan tabel kategori dan kategori produk, kita dapat mendesain Tabel Tag dan Tabel Tag Produk . Perbedaan utama antara Kategori dan Tag tercantum di bawah ini.
- Kolom parentId tidak diperlukan di Tabel Tag.
- Jumlah kategori tetap rendah karena ini dapat digunakan untuk membentuk Menu Utama untuk tujuan navigasi. Tag bisa lebih banyak dibandingkan dengan kategori.
- Kategori dan tag dapat digunakan untuk menghubungkan produk.
- Seseorang harus menetapkan hanya beberapa kategori untuk suatu produk sedangkan jumlah tag bisa lebih banyak.
Tabel Keranjang dan Tabel Barang Keranjang
Bagian ini menyediakan tabel untuk mengelola gerobak virtual untuk menyimpan pilihan pengguna sebelum membuat pesanan yang sebenarnya. Jika pengguna membatalkan pembayaran atau pembayaran gagal, gerobak yang sama dapat digunakan sebagai gerobak yang ditinggalkan oleh tim pemasaran untuk menanyakan tentang pembeli. Pengguna yang masuk juga dapat dikaitkan dengan keranjang. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Keranjang.
Catatan :Tabel Keranjang dan Tabel Barang Keranjang dapat dibuat opsional jika Data Lokal, Sesi, atau database dalam memori seperti Redis digunakan untuk menyimpan data kereta. Hal yang sama dapat dirujuk untuk membuat pesanan pada keberhasilan pembayaran.
Id | Id unik untuk mengidentifikasi keranjang. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna atau pembeli yang terkait dengan keranjang. |
Id Sesi | Id sesi unik yang terkait dengan keranjang. |
Token | Token unik yang terkait dengan keranjang untuk mengidentifikasi kereta selama beberapa sesi. Token yang sama juga dapat diteruskan ke Payment Gateway jika diperlukan. |
Status | Status troli bisa New, Cart, Checkout, Paid, Complete, dan Abandoned. |
Nama Depan | Nama depan pengguna. |
Nama Tengah | Nama tengah pengguna. |
Nama Belakang | Nama belakang pengguna. |
Seluler | Nomor ponsel pengguna. |
Email pengguna. | |
Baris 1 | Baris pertama untuk menyimpan alamat. |
Baris 2 | Baris kedua untuk menyimpan alamat. |
Kota | Kota alamat. |
Provinsi | Provinsi alamat. |
Negara | Negara alamat. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat keranjang dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana keranjang diperbarui. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan dari keranjang. |
Tabel Keranjang dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`cart` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`sessionId` VARCHAR(100) NOT NULL,
`token` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_cart_user` (`userId` ASC),
CONSTRAINT `fk_cart_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Item Keranjang.
Id | Id unik untuk mengidentifikasi item keranjang. |
Id Produk | Id produk untuk mengidentifikasi produk yang terkait dengan item keranjang. |
Id Keranjang | Id keranjang untuk mengidentifikasi keranjang yang terkait dengan item keranjang. |
SKU | SKU produk saat membelinya. |
Harga | Harga produk saat membelinya. |
Diskon | Diskon produk saat membelinya. |
Kuantitas | Jumlah produk yang dipilih oleh pengguna. |
Aktif | Bendera untuk mengidentifikasi apakah produk aktif di keranjang. Ini dapat digunakan untuk menghindari produk yang sama ditambahkan ke keranjang yang sama beberapa kali. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat item keranjang dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat item keranjang diperbarui. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan dari item keranjang. |
Tabel Item Keranjang dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`cart_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`cartId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_cart_item_product` (`productId` ASC),
CONSTRAINT `fk_cart_item_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `shop`.`cart_item`
ADD INDEX `idx_cart_item_cart` (`cartId` ASC);
ALTER TABLE `shop`.`cart_item`
ADD CONSTRAINT `fk_cart_item_cart`
FOREIGN KEY (`cartId`)
REFERENCES `shop`.`cart` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Pesanan dan Tabel Item Pesanan
Bagian ini menyediakan tabel untuk mengelola pesanan toko. Pengguna yang masuk juga dapat dikaitkan dengan pesanan. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pesanan.
Id | Id unik untuk mengidentifikasi pesanan. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna atau pembeli yang terkait dengan pesanan. |
Id Sesi | ID sesi unik yang terkait dengan pesanan. |
Token | Token unik yang terkait dengan pesanan untuk mengidentifikasinya dalam beberapa sesi. Token yang sama juga dapat diteruskan ke Payment Gateway jika diperlukan. |
Status | Status pesanan bisa New, Checkout, Paid, Failed, Shipped, Delivered, Returned, dan Complete. |
SubTotal | Harga Total Barang Pesanan. |
Diskon Barang | Total diskon untuk Item Pesanan. |
Pajak | Pajak atas Item Pesanan. |
Pengiriman | Biaya pengiriman Barang Pesanan. |
Total | Total harga Pesanan sudah termasuk pajak dan ongkos kirim. Itu tidak termasuk diskon item. |
Promo | Kode promo Pesanan. |
Diskon | Total diskon Pesanan berdasarkan kode promo atau diskon toko. |
Total Keseluruhan | Jumlah total pesanan yang harus dibayar oleh pembeli. |
Nama Depan | Nama depan pengguna. |
Nama Tengah | Nama tengah pengguna. |
Nama Belakang | Nama belakang pengguna. |
Seluler | Nomor ponsel pengguna. |
Email pengguna. | |
Baris 1 | Baris pertama untuk menyimpan alamat. |
Baris 2 | Baris kedua untuk menyimpan alamat. |
Kota | Kota alamat. |
Provinsi | Provinsi alamat. |
Negara | Negara alamat. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pesanan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana pesanan diperbarui. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan pesanan. |
Tabel Pesanan dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`sessionId` VARCHAR(100) NOT NULL,
`token` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`subTotal` FLOAT NOT NULL DEFAULT 0,
`itemDiscount` FLOAT NOT NULL DEFAULT 0,
`tax` FLOAT NOT NULL DEFAULT 0,
`shipping` FLOAT NOT NULL DEFAULT 0,
`total` FLOAT NOT NULL DEFAULT 0,
`promo` VARCHAR(50) NULL DEFAULT NULL,
`discount` FLOAT NOT NULL DEFAULT 0,
`grandTotal` FLOAT NOT NULL DEFAULT 0,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_user` (`userId` ASC),
CONSTRAINT `fk_order_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Item Pesanan.
Id | Id unik untuk mengidentifikasi barang yang dipesan. |
Id Produk | Id produk untuk mengidentifikasi produk yang terkait dengan barang yang dipesan. |
Id Pesanan | Id pesanan untuk mengidentifikasi pesanan yang terkait dengan barang pesanan. |
SKU | SKU produk saat membelinya. |
Harga | Harga produk saat membelinya. |
Diskon | Diskon produk saat membelinya. |
Kuantitas | Jumlah produk yang dipilih oleh pengguna. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat item yang dipesan dibuat. |
Diperbarui Pada | Menyimpan tanggal dan waktu pembaruan item yang dipesan. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan dari barang yang dipesan. |
Tabel Item Pesanan dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_item_product` (`productId` ASC),
CONSTRAINT `fk_order_item_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `shop`.`order_item`
ADD INDEX `idx_order_item_order` (`orderId` ASC);
ALTER TABLE `shop`.`order_item`
ADD CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `shop`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Transaksi
Kami juga membutuhkan tabel transaksi untuk melacak pembayaran pesanan yang dilakukan oleh pembeli dan untuk pembukuan. Kami juga dapat menggunakan tabel yang sama untuk mencatat pengembalian dana sebagian atau penuh dari pesanan. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Transaksi.
Id | Id unik untuk mengidentifikasi transaksi. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang terkait dengan transaksi. |
Id Pesanan | Id pesanan untuk mengidentifikasi pesanan yang terkait dengan transaksi. |
Kode | Id pembayaran yang disediakan oleh gateway pembayaran. |
Ketik | Jenis transaksi order dapat berupa Kredit atau Debit. |
Mode | Mode transaksi order bisa Offline, Cash On Delivery, Cheque, Draft, Wired, dan Online. |
Status | Status transaksi order bisa Baru, Dibatalkan, Gagal, Tertunda, Ditolak, Ditolak, dan Sukses. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat transaksi pesanan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana transaksi pesanan diperbarui. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan transaksi. |
Tabel Transaksi dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `shop`.`transaction` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`code` VARCHAR(100) NOT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`mode` SMALLINT(6) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_transaction_user` (`userId` ASC),
CONSTRAINT `fk_transaction_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `shop`.`transaction`
ADD INDEX `idx_transaction_order` (`orderId` ASC);
ALTER TABLE `shop`.`transaction`
ADD CONSTRAINT `fk_transaction_order`
FOREIGN KEY (`orderId`)
REFERENCES `shop`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Alamat
Tabel alamat dapat digunakan untuk menghindari kolom yang berlebihan di tabel Cart and Order tergantung pada implementasi yang sebenarnya. Itu bisa langsung dipetakan ke Cart Table dan Order Table menggunakan foreign key yang sesuai.
Ringkasan
Dalam tutorial ini, kita telah membahas desain database Keranjang Belanja Online untuk menyimpan pengguna dan mengelola inventaris produk. Selain itu juga menyediakan desain database untuk mengelola gerobak, menyimpan barang-barang gerobak, dan mengelola pesanan di toko online. Diagram Alir Belanja Online Sederhana dapat dirujuk untuk menerapkan Keranjang Belanja.
Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Blog dan Poll &Survey. Skema database lengkap juga tersedia di GitHub.