Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में ऑनलाइन शॉपिंग कार्ट के लिए डेटाबेस डिजाइन करने के लिए गाइड

यह ट्यूटोरियल उपयोगकर्ताओं, उत्पादों, समीक्षाओं, कार्ट, ऑर्डर और भुगतान को प्रबंधित करने के लिए ऑनलाइन दुकानों और शॉपिंग कार्ट के डेटाबेस स्कीमा को डिज़ाइन करने के लिए पूर्ण चरण प्रदान करता है। इसका उपयोग आगे एक ऑनलाइन दुकान और शॉपिंग कार्ट आधारित वेबसाइटों या अनुप्रयोगों को विकसित करने के लिए किया जा सकता है।

इकाई संबंध आरेख या विज़ुअल डेटाबेस डिज़ाइन नीचे दिखाया गया है।

ऑनलाइन शॉपिंग कार्ट

नोट :यह अतिथि आदेशों को लॉग इन किए बिना आदेश देने की अनुमति देता है। MySql में RBAC डेटाबेस का पालन करके सुरक्षा को नियंत्रित किया जा सकता है।

आप उबंटू पर MySQL 8 कैसे स्थापित करें, विंडोज पर MySQL 8 कैसे स्थापित करें, विंडोज 10 पर कार्यक्षेत्र के साथ MySQL 8 कैसे स्थापित करें, MySQL में RBAC डेटाबेस, MySql में ब्लॉग डेटाबेस, MySQL में प्रश्नोत्तरी डेटाबेस सहित लोकप्रिय ट्यूटोरियल पर जा सकते हैं। MySQL पर पोल और सर्वे डेटाबेस, और MySQL में बेसिक SQL क्वेरीज़ सीखें।

शॉप डेटाबेस

सबसे पहला कदम शॉप डेटाबेस बनाना है। इसे नीचे दिखाए गए अनुसार क्वेरी का उपयोग करके बनाया जा सकता है।

CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

मैंने वर्ण सेट का उपयोग किया है utf8mb4 पात्रों की एक विस्तृत श्रृंखला का समर्थन करने के लिए।

उपयोगकर्ता तालिका

इस अनुभाग में, हम उपयोगकर्ता तालिका . डिज़ाइन करेंगे उपयोगकर्ता जानकारी संग्रहीत करने के लिए। व्यवस्थापक और ग्राहकों सहित विभिन्न प्रकार के उपयोगकर्ताओं को प्रबंधित करने के लिए एक ही तालिका का उपयोग किया जा सकता है। इसका उपयोग उत्पाद निर्माता (व्यवस्थापक पैनल से) और वेबसाइट पर रखे गए ग्राहक आदेशों को जोड़ने के लिए भी किया जा सकता है। उपयोगकर्ता अपने स्वयं के आदेशों को ट्रैक कर सकते हैं और स्थिति को ट्रैक कर सकते हैं। उपयोगकर्ता तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id उपयोगकर्ता की पहचान करने के लिए अद्वितीय आईडी।
प्रथम नाम उपयोगकर्ता का पहला नाम।
मध्य नाम उपयोगकर्ता का मध्य नाम।
उपनाम उपयोगकर्ता का अंतिम नाम।
मोबाइल उपयोगकर्ता का मोबाइल नंबर। इसका उपयोग लॉगिन और पंजीकरण उद्देश्यों के लिए किया जा सकता है।
ईमेल उपयोगकर्ता का ईमेल। इसका उपयोग लॉगिन और पंजीकरण उद्देश्यों के लिए किया जा सकता है।
पासवर्ड हैश उपयुक्त एल्गोरिथम द्वारा उत्पन्न पासवर्ड हैश। हमें सादे या एन्क्रिप्टेड पासवर्ड संग्रहीत करने से बचना चाहिए।
व्यवस्थापक यह पहचानने के लिए ध्वजा कि उपयोगकर्ता एक व्यवस्थापक है या नहीं। यदि RBAC डेटाबेस डिज़ाइन का अनुसरण करके RBAC तालिकाएँ बनाई जाती हैं, तो इसकी आवश्यकता नहीं है।
विक्रेता यह पहचानने के लिए ध्वजा कि क्या उपयोगकर्ता किसी उत्पाद को दुकान में होस्ट कर सकता है। यदि RBAC डेटाबेस डिज़ाइन का अनुसरण करके RBAC तालिकाएँ बनाई जाती हैं, तो इसकी आवश्यकता नहीं है।
पर पंजीकृत इस कॉलम का उपयोग एप्लिकेशन के साथ उपयोगकर्ता के जीवन की गणना करने के लिए किया जा सकता है।
अंतिम लॉगिन इसका उपयोग उपयोगकर्ता के अंतिम लॉगिन की पहचान करने के लिए किया जा सकता है।
पहचान उत्पाद पृष्ठ पर प्रदर्शित होने वाले विक्रेता उपयोगकर्ता का संक्षिप्त परिचय।
प्रोफाइल उत्पाद पृष्ठ पर प्रदर्शित किए जाने वाले विक्रेता विवरण।

उपयुक्त बाधाओं वाली उपयोगकर्ता तालिका नीचे दर्शाई गई है।

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) );

उत्पाद तालिका

इस अनुभाग में, हम उत्पाद तालिका . डिज़ाइन करेंगे उत्पाद डेटा संग्रहीत करने के लिए। उत्पाद तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id उत्पाद की पहचान करने के लिए अद्वितीय आईडी।
उपयोगकर्ता आईडी प्रयोक्ता आईडी व्यवस्थापक या विक्रेता की पहचान करने के लिए।
शीर्षक दुकान पृष्ठ और उत्पाद पृष्ठ पर प्रदर्शित होने वाला उत्पाद शीर्षक।
मेटा शीर्षक ब्राउज़र शीर्षक और SEO के लिए उपयोग किया जाने वाला मेटा शीर्षक।
स्लग यूआरएल बनाने के लिए स्लग।
सारांश मुख्य हाइलाइट्स का उल्लेख करने के लिए सारांश।
टाइप करें विभिन्न उत्पाद प्रकारों के बीच अंतर करने का प्रकार।
SKU उत्पाद सूची को ट्रैक करने के लिए स्टॉक कीपिंग यूनिट।
कीमत उत्पाद की कीमत।
छूट उत्पाद पर छूट।
मात्रा उत्पाद की उपलब्ध मात्रा।
खरीदारी इसका उपयोग यह पहचानने के लिए किया जा सकता है कि उत्पाद खरीदारी के लिए सार्वजनिक रूप से उपलब्ध है या नहीं।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर उत्पाद बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जब उत्पाद अपडेट किया जाता है।
यहां प्रकाशित यह उस तारीख और समय को स्टोर करता है जब उत्पाद को दुकान पर प्रकाशित किया जाता है।
शुरू होता है यह उत्पाद की बिक्री शुरू होने की तारीख और समय को संग्रहीत करता है।
इस पर समाप्त होता है यह उत्पाद की बिक्री समाप्त होने की तिथि और समय को संग्रहीत करता है।
सामग्री उत्पाद के अतिरिक्त विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

यह डिज़ाइन को सरल रखने के लिए उत्पाद सूची में उपलब्ध स्टॉक को ट्रैक करने के लिए कॉलम मात्रा का उपयोग करता है। उत्पादों की एक विस्तृत श्रृंखला को कवर करने के लिए कई स्तंभों द्वारा मात्रा निर्दिष्ट करने की आवश्यकता हो सकती है। संभावित कॉलम सेलक्वांटिटी, सेल यूनिट, स्टॉकक्वांटिटी और स्टॉक यूनिट हो सकते हैं जहां सेलक्वांटिटी और सेल यूनिट का इस्तेमाल खरीदारों के लिए शॉप पर प्रदर्शित किया जा सकता है और स्टॉकक्वांटिटी और स्टॉक यूनिट का इस्तेमाल इन्वेंट्री को ट्रैक करने के लिए किया जा सकता है। ऑर्डर देने पर इन्वेंट्री को अपडेट करते समय सेल यूनिट को स्टॉक यूनिट में बदलने की भी आवश्यकता हो सकती है। उपयुक्त बाधाओं के साथ उत्पाद तालिका नीचे दी गई है।

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);

उत्पाद मेटा

उत्पाद मेटा तालिका का उपयोग उत्पाद बैनर URL आदि सहित उत्पादों के बारे में अतिरिक्त जानकारी संग्रहीत करने के लिए किया जा सकता है। नीचे उत्पाद मेटा तालिका के सभी स्तंभों का विवरण दिया गया है।

Id उत्पाद मेटा की पहचान करने के लिए अद्वितीय आईडी।
उत्पाद आईडी मूल उत्पाद की पहचान करने के लिए उत्पाद आईडी.
कुंजी मेटा की पहचान करने वाली कुंजी।
सामग्री उत्पाद मेटाडेटा संग्रहीत करने के लिए उपयोग किया जाने वाला स्तंभ।

उपयुक्त बाधाओं के साथ उत्पाद मेटा टेबल नीचे दिखाया गया है।

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;

उत्पाद समीक्षा तालिका

इस अनुभाग में, हम उत्पाद समीक्षा तालिका . डिज़ाइन करेंगे उत्पाद समीक्षाओं को संग्रहीत करने के लिए। उत्पाद समीक्षा तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id उत्पाद समीक्षा की पहचान करने के लिए अद्वितीय आईडी।
उत्पाद आईडी मूल उत्पाद की पहचान करने के लिए उत्पाद आईडी.
अभिभावक आईडी अभिभावक समीक्षा की पहचान करने के लिए मूल आईडी।
शीर्षक समीक्षा शीर्षक।
रेटिंग समीक्षा रेटिंग।
प्रकाशित इसका उपयोग यह पहचानने के लिए किया जा सकता है कि समीक्षा सार्वजनिक रूप से उपलब्ध है या नहीं।
पर बनाया गया यह उस तिथि और समय को संग्रहीत करता है जिस पर समीक्षा प्रस्तुत की जाती है।
यहां प्रकाशित यह समीक्षा प्रकाशित होने की तारीख और समय को संग्रहीत करता है।
सामग्री समीक्षा विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

उपयुक्त बाधाओं के साथ उत्पाद समीक्षा तालिका नीचे दी गई है।

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;

श्रेणी तालिका और उत्पाद श्रेणी तालिका

इस खंड में, हम श्रेणी तालिका . डिजाइन करेंगे और उत्पाद श्रेणी तालिका उत्पाद श्रेणियों और उनके मानचित्रण को संग्रहीत करने के लिए। श्रेणी तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id श्रेणी की पहचान करने के लिए अद्वितीय आईडी।
अभिभावक आईडी पेरेंट श्रेणी की पहचान करने के लिए पैरेंट आईडी।
शीर्षक श्रेणी शीर्षक।
मेटा शीर्षक ब्राउज़र शीर्षक और SEO के लिए उपयोग किया जाने वाला मेटा शीर्षक।
स्लग यूआरएल बनाने के लिए कैटेगरी स्लग।
सामग्री श्रेणी विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

उपयुक्त बाधाओं के साथ श्रेणी तालिका नीचे दी गई है।

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;

उत्पाद श्रेणी तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

उत्पाद आईडी उत्पाद आईडी उत्पाद की पहचान करने के लिए।
श्रेणी आईडी श्रेणी की पहचान करने के लिए श्रेणी आईडी।

उपयुक्त बाधाओं के साथ उत्पाद श्रेणी तालिका नीचे दी गई है।

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);

टैग तालिका और उत्पाद टैग तालिका

श्रेणी और उत्पाद श्रेणी तालिकाओं के समान, हम टैग तालिका . डिज़ाइन कर सकते हैं और उत्पाद टैग तालिका . श्रेणी और टैग के बीच प्रमुख अंतर नीचे सूचीबद्ध हैं।

  • टैग तालिका में parentId कॉलम की आवश्यकता नहीं है।
  • श्रेणियों की संख्या कम बनी हुई है क्योंकि इनका उपयोग नौवहन उद्देश्यों के लिए मुख्य मेनू बनाने के लिए किया जा सकता है। टैग श्रेणियों की तुलना में अधिक हो सकते हैं।
  • उत्पादों को जोड़ने के लिए दोनों श्रेणियों और टैग का उपयोग किया जा सकता है।
  • किसी उत्पाद को केवल कुछ श्रेणियां निर्दिष्ट करनी चाहिए जबकि टैग की संख्या अधिक हो सकती है।

कार्ट टेबल और कार्ट आइटम टेबल

यह खंड वास्तविक ऑर्डर बनाने से पहले उपयोगकर्ता चयन को संग्रहीत करने के लिए वर्चुअल कार्ट को प्रबंधित करने के लिए टेबल प्रदान करता है। यदि उपयोगकर्ता भुगतान को रद्द कर देता है या भुगतान विफल हो जाता है, तो मार्केटिंग टीम द्वारा खरीदारों के बारे में पूछताछ करने के लिए उसी कार्ट को एक परित्यक्त गाड़ी के रूप में उपयोग किया जा सकता है। एक लॉग-इन उपयोगकर्ता को कार्ट से भी जोड़ा जा सकता है। नीचे कार्ट टेबल के सभी कॉलमों का विवरण दिया गया है।

नोट :कार्ट टेबल और कार्ट आइटम टेबल को वैकल्पिक बनाया जा सकता है यदि स्थानीय डेटा, सत्र, या इन-मेमोरी डेटाबेस जैसे रेडिस का उपयोग कार्ट डेटा को स्टोर करने के लिए किया जाता है। भुगतान सफलता पर ऑर्डर बनाने के लिए इसे संदर्भित किया जा सकता है।

Id कार्ट की पहचान करने के लिए अद्वितीय आईडी।
उपयोगकर्ता आईडी कार्ट से जुड़े उपयोगकर्ता या खरीदार की पहचान करने के लिए उपयोगकर्ता आईडी।
सत्र क्रमांक कार्ट से संबद्ध अद्वितीय सत्र आईडी।
टोकन कई सत्रों में कार्ट की पहचान करने के लिए कार्ट से संबद्ध अद्वितीय टोकन। जरूरत पड़ने पर वही टोकन पेमेंट गेटवे को भी भेजा जा सकता है।
स्थिति कार्ट की स्थिति नई, कार्ट, चेकआउट, भुगतान, पूर्ण और परित्यक्त हो सकती है।
प्रथम नाम उपयोगकर्ता का पहला नाम।
मध्य नाम उपयोगकर्ता का मध्य नाम।
उपनाम उपयोगकर्ता का अंतिम नाम।
मोबाइल उपयोगकर्ता का मोबाइल नंबर।
ईमेल उपयोगकर्ता का ईमेल।
पंक्ति 1 पता स्टोर करने के लिए पहली पंक्ति।
पंक्ति 2 पता स्टोर करने के लिए दूसरी पंक्ति।
शहर पते का शहर।
प्रांत पते का प्रांत।
देश पते का देश।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर कार्ट बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जब कार्ट को अपडेट किया जाता है।
सामग्री कार्ट का अतिरिक्त विवरण संग्रहीत करने के लिए प्रयुक्त कॉलम।

कार्ट टेबल उपयुक्त बाधाओं के साथ नीचे दिखाया गया है।

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);

कार्ट आइटम टेबल के सभी कॉलम का विवरण नीचे दिया गया है।

Id कार्ट आइटम की पहचान करने के लिए अद्वितीय आईडी।
उत्पाद आईडी कार्ट आइटम से संबद्ध उत्पाद की पहचान करने के लिए उत्पाद आईडी.
कार्ट आईडी कार्ट आइटम से संबद्ध कार्ट की पहचान करने के लिए कार्ट आईडी.
SKU उत्पाद खरीदते समय उसका SKU.
कीमत उत्पाद खरीदते समय उसकी कीमत।
छूट उत्पाद खरीदते समय उस पर छूट।
मात्रा उपयोगकर्ता द्वारा चयनित उत्पाद की मात्रा।
सक्रिय यह पहचानने के लिए ध्वजा कि कार्ट में उत्पाद सक्रिय है या नहीं। इसका उपयोग एक ही उत्पाद को एक ही कार्ट में कई बार जोड़े जाने से बचने के लिए किया जा सकता है।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जब कार्ट आइटम बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जब कार्ट आइटम अपडेट किया जाता है।
सामग्री कार्ट आइटम के अतिरिक्त विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

कार्ट आइटम टेबल उपयुक्त बाधाओं के साथ नीचे दिखाया गया है।

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;

ऑर्डर टेबल और ऑर्डर आइटम टेबल

यह खंड स्टोर ऑर्डर को प्रबंधित करने के लिए टेबल प्रदान करता है। एक लॉग-इन उपयोगकर्ता को भी ऑर्डर के साथ जोड़ा जा सकता है। आदेश तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id आदेश की पहचान करने के लिए अद्वितीय आईडी।
उपयोगकर्ता आईडी आदेश से जुड़े उपयोगकर्ता या खरीदार की पहचान करने के लिए उपयोगकर्ता आईडी।
सत्र क्रमांक आदेश से संबद्ध अद्वितीय सत्र आईडी।
टोकन कई सत्रों में इसकी पहचान करने के लिए ऑर्डर से संबद्ध अद्वितीय टोकन। जरूरत पड़ने पर वही टोकन पेमेंट गेटवे को भी भेजा जा सकता है।
स्थिति आदेश की स्थिति नई, चेकआउट, भुगतान, विफल, भेज दी गई, वितरित, लौटाई गई और पूर्ण हो सकती है।
उप योग आदेश आइटम की कुल कीमत।
आइटम छूट आदेश आइटम की कुल छूट।
टैक्स आदेश की वस्तुओं पर कर।
शिपिंग आदेश की वस्तुओं का शिपिंग शुल्क।
कुल कर और शिपिंग सहित ऑर्डर का कुल मूल्य। इसमें आइटम छूट शामिल नहीं है।
प्रोमो आदेश का प्रोमो कोड।
छूट प्रोमो कोड या स्टोर छूट के आधार पर ऑर्डर की कुल छूट।
कुल योग खरीदार द्वारा भुगतान किए जाने वाले आदेश का कुल योग।
प्रथम नाम उपयोगकर्ता का पहला नाम।
मध्य नाम उपयोगकर्ता का मध्य नाम।
उपनाम उपयोगकर्ता का अंतिम नाम।
मोबाइल उपयोगकर्ता का मोबाइल नंबर।
ईमेल उपयोगकर्ता का ईमेल।
पंक्ति 1 पता स्टोर करने के लिए पहली पंक्ति।
पंक्ति 2 पता स्टोर करने के लिए दूसरी पंक्ति।
शहर पते का शहर।
प्रांत पते का प्रांत।
देश पते का देश।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जब ऑर्डर बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जब ऑर्डर अपडेट किया जाता है।
सामग्री आदेश के अतिरिक्त विवरण संग्रहीत करने के लिए प्रयुक्त कॉलम।

उचित बाधाओं के साथ ऑर्डर टेबल नीचे दिखाया गया है।

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);

ऑर्डर आइटम टेबल के सभी कॉलम का विवरण नीचे दिया गया है।

Id आदेशित वस्तु की पहचान करने के लिए अद्वितीय आईडी।
उत्पाद आईडी आदेशित वस्तु से संबद्ध उत्पाद की पहचान करने के लिए उत्पाद आईडी।
आदेश आईडी आदेशित वस्तु से संबद्ध आदेश की पहचान करने के लिए आदेश आईडी।
SKU उत्पाद खरीदते समय उसका SKU.
कीमत उत्पाद खरीदते समय उसकी कीमत।
छूट उत्पाद खरीदते समय उस पर छूट।
मात्रा उपयोगकर्ता द्वारा चयनित उत्पाद की मात्रा।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर ऑर्डर किया गया आइटम बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर ऑर्डर किया गया आइटम अपडेट किया जाता है।
सामग्री आदेशित वस्तु के अतिरिक्त विवरण संग्रहीत करने के लिए प्रयुक्त कॉलम।

उचित बाधाओं के साथ ऑर्डर आइटम तालिका नीचे दी गई है।

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;

लेन-देन तालिका

हमें खरीदार द्वारा किए गए ऑर्डर भुगतानों और बहीखाता पद्धति को ट्रैक करने के लिए एक लेनदेन तालिका की भी आवश्यकता है। हम ऑर्डर के आंशिक या पूर्ण धनवापसी को रिकॉर्ड करने के लिए भी उसी तालिका का उपयोग कर सकते हैं। लेन-देन तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id लेन-देन की पहचान करने के लिए अद्वितीय आईडी।
उपयोगकर्ता आईडी लेन-देन से जुड़े उपयोगकर्ता की पहचान करने के लिए उपयोगकर्ता आईडी।
आदेश आईडी लेनदेन से जुड़े आदेश की पहचान करने के लिए ऑर्डर आईडी।
कोड पेमेंट गेटवे द्वारा प्रदान की गई भुगतान आईडी।
टाइप करें आदेश लेनदेन का प्रकार क्रेडिट या डेबिट हो सकता है।
मोड आदेश लेनदेन का तरीका ऑफलाइन, कैश ऑन डिलीवरी, चेक, ड्राफ्ट, वायर्ड और ऑनलाइन हो सकता है।
स्थिति आदेश लेनदेन की स्थिति नई, रद्द, विफल, लंबित, अस्वीकृत, अस्वीकृत और सफल हो सकती है।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर ऑर्डर का लेन-देन किया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर ऑर्डर लेनदेन अद्यतन किया जाता है।
सामग्री लेनदेन के अतिरिक्त विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

उपयुक्त बाधाओं के साथ लेन-देन तालिका नीचे दी गई है।

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;

पता तालिका

वास्तविक कार्यान्वयन के आधार पर कार्ट और ऑर्डर तालिका में अनावश्यक कॉलम से बचने के लिए एक पता तालिका का उपयोग किया जा सकता है। इसे उपयुक्त विदेशी कुंजियों का उपयोग करके सीधे कार्ट टेबल और ऑर्डर टेबल पर मैप किया जा सकता है।

सारांश

इस ट्यूटोरियल में, हमने उपयोगकर्ताओं को स्टोर करने और उत्पाद सूची प्रबंधित करने के लिए ऑनलाइन शॉपिंग कार्ट के डेटाबेस डिज़ाइन पर चर्चा की है। इसने कार्ट को प्रबंधित करने, कार्ट आइटम को स्टोर करने और ऑनलाइन दुकान पर ऑर्डर प्रबंधित करने के लिए डेटाबेस डिज़ाइन भी प्रदान किया। शॉपिंग कार्ट को लागू करने के लिए सरलीकृत ऑनलाइन शॉपिंग फ़्लोचार्ट को संदर्भित किया जा सकता है।

आप चर्चा में शामिल होने के लिए अपनी टिप्पणियाँ प्रस्तुत कर सकते हैं। आप ब्लॉग और पोल और सर्वेक्षण अनुप्रयोगों के डेटाबेस को डिजाइन करने में भी रुचि ले सकते हैं। संपूर्ण डेटाबेस स्कीमा 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. MySQL में कल की तारीख कैसे प्राप्त करें

  2. mysql त्रुटि 1364 फ़ील्ड में कोई डिफ़ॉल्ट मान नहीं है

  3. मैं एक बड़ी (14 जीबी) MySQL डंप फ़ाइल को एक नए MySQL डेटाबेस में कैसे आयात कर सकता हूं?

  4. MySQL में संख्यात्मक रूप से varchar फ़ील्ड को सॉर्ट करना

  5. MySQL में ट्रेलिंग व्हाइटस्पेस कैसे निकालें