Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Panduan Merancang Database Untuk Keranjang Belanja Online Di MySQL

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 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 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 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih 10 Catatan Teratas untuk Setiap Kategori di MySQL

  2. Bagaimana saya bisa mengulang hasil MySQL yang ditetapkan lebih dari sekali menggunakan fungsi mysql_*?

  3. Cara Menampilkan Kolasi Kolom di MySQL

  4. Kesalahan fatal:[] operator tidak didukung untuk string

  5. iterator/generator SqlAlchemy built-in yang hemat memori?