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

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

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

इस तरह के ऑर्डर सिस्टम को ऑर्डर प्रोसेसिंग को स्वचालित करने और पीक ऑर्डरिंग समय से कुशलतापूर्वक निपटने के लिए लागू किया जाता है, इस प्रकार कम प्रयासों के साथ ग्राहकों की संतुष्टि में सुधार होता है - रेस्तरां व्यवसायों के लिए एक जीत की स्थिति।

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

रेस्टोरेंट ऑर्डरिंग सिस्टम

नोट :इसका उपयोग रेस्तरां में पहुंचने से पहले टेबल की ऑनलाइन बुकिंग और प्री-ऑर्डर के लिए किया जा सकता है। सुरक्षा को MySQL में RBAC डेटाबेस का अनुसरण करके भी नियंत्रित किया जा सकता है।

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

रेस्तरां डेटाबेस

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

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

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

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

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

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

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

CREATE TABLE `restaurant`.`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,
`chef` TINYINT(1) NOT NULL DEFAULT 0,
`agent` 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 घटक की पहचान करने के लिए अद्वितीय आईडी।
उपयोगकर्ता आईडी व्यवस्थापक की पहचान करने के लिए उपयोगकर्ता आईडी।
विक्रेता आईडी आपूर्तिकर्ता की पहचान करने के लिए विक्रेता आईडी।
शीर्षक आइटम रेसिपी पर प्रदर्शित होने वाली सामग्री का शीर्षक।
स्लग घटक के GID के रूप में उपयोग किया जाने वाला अद्वितीय स्लग।
सारांश मुख्य हाइलाइट्स का उल्लेख करने के लिए सारांश।
टाइप करें विभिन्न घटक प्रकारों के बीच अंतर करने का प्रकार।
SKU सामग्री सूची को ट्रैक करने के लिए स्टॉक कीपिंग यूनिट।
मात्रा घटक की उपलब्ध मात्रा।
इकाई माप की इकाइयाँ संघटक को सौंपी गई हैं।
पर बनाया गया यह उस तारीख और समय को संग्रहीत करता है जिस पर सामग्री बनाई जाती है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर सामग्री को अद्यतन किया जाता है।
सामग्री सामग्री के अतिरिक्त विवरण संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

यह सामग्री सूची में उपलब्ध स्टॉक को ट्रैक करने के लिए कॉलम मात्रा और इकाई का उपयोग करता है। संघटक तालिका उपयुक्त बाधाओं के साथ नीचे दिखाया गया है।

CREATE TABLE `restaurant`.`ingredient` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` BIGINT DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_ingredient_user` (`userId` ASC),
CONSTRAINT `fk_ingredient_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`ingredient`
ADD INDEX `idx_ingredient_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`ingredient`
ADD CONSTRAINT `fk_ingredient_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

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

नोट :हम रेस्तरां और आपूर्तिकर्ता के आदेशों को सरल बनाने के लिए सामग्री और वस्तुओं को संग्रहीत करने के लिए उसी तालिका का उपयोग कर सकते हैं। ऐसे मामले में, आइटम सामग्री की पहचान करने के लिए एक स्व-जुड़ने की आवश्यकता होती है। साथ ही, खाना पकाने वाले कॉलम और कीमत घटक पंक्तियों के लिए उपयोगी नहीं हैं।

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

संघटक तालिका के समान, यह आइटम सूची में उपलब्ध स्टॉक को ट्रैक करने के लिए कॉलम मात्रा और इकाई का उपयोग करता है। उपयुक्त बाधाओं के साथ मद तालिका नीचे दी गई है।

CREATE TABLE `restaurant`.`item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` BIGINT DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`cooking` TINYINT(1) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`recipe` TEXT NULL DEFAULT NULL,
`instructions` TEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_item_user` (`userId` ASC),
CONSTRAINT `fk_item_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`item`
ADD INDEX `idx_item_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`item`
ADD CONSTRAINT `fk_item_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

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

Id नुस्खा की पहचान करने के लिए अद्वितीय आईडी।
आइटम आईडी आइटम आईडी आइटम की पहचान करने के लिए।
संघटक आईडी घटक आईडी घटक की पहचान करने के लिए।
मात्रा एक बार परोसने के लिए आइटम को पकाने के लिए आवश्यक सामग्री की मात्रा।
इकाई माप की इकाइयाँ वस्तु के लिए आवश्यक घटक मात्रा की पहचान करने के लिए।
निर्देश वस्तु को पकाने के लिए आवश्यक सामग्री निर्देश।

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

CREATE TABLE `restaurant`.`recipe` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`itemId` BIGINT NOT NULL,
`ingredientId` BIGINT NOT NULL,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` SMALLINT(6) NOT NULL DEFAULT 0,
`instructions` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_recipe_item` (`itemId` ASC),
UNIQUE INDEX `uq_recipe_item_ingredient` (`itemId` ASC, `ingredientId` ASC),
CONSTRAINT `fk_recipe_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`recipe`
ADD INDEX `idx_recipe_ingredient` (`ingredientId` ASC);
ALTER TABLE `restaurant`.`recipe`
ADD CONSTRAINT `fk_recipe_ingredient`
FOREIGN KEY (`ingredientId`)
REFERENCES `restaurant`.`ingredient` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

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

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

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

CREATE TABLE `restaurant`.`menu` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_menu_user` (`userId` ASC),
CONSTRAINT `fk_menu_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

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

Id मेनू आइटम की पहचान करने के लिए अद्वितीय आईडी।
मेनू आईडी मेनू आईडी की पहचान करने के लिए मेनू आईडी।
आइटम आईडी आइटम आईडी आइटम की पहचान करने के लिए।
सक्रिय यह जाँचने के लिए फ़्लैग कि क्या आइटम उपलब्ध है।

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

CREATE TABLE `restaurant`.`menu_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`menuId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
INDEX `idx_menu_item_menu` (`menuId` ASC),
UNIQUE INDEX `uq_menu_item` (`menuId` ASC, `itemId` ASC),
CONSTRAINT `fk_menu_item_menu`
FOREIGN KEY (`menuId`)
REFERENCES `restaurant`.`menu` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`menu_item`
ADD INDEX `idx_menu_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`menu_item`
ADD CONSTRAINT `fk_menu_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

आइटम शेफ टेबल आइटम पकाने के लिए सौंपे गए शेफ की पहचान करने के लिए इस्तेमाल किया जा सकता है। आइटम शेफ टेबल के सभी कॉलम का विवरण नीचे दिया गया है।

Id मेनू आइटम की पहचान करने के लिए अद्वितीय आईडी।
आइटम आईडी आइटम आईडी आइटम की पहचान करने के लिए।
शेफ आईडी उपयोगकर्ता की पहचान करने के लिए शेफ आईडी।
सक्रिय यह जाँचने के लिए फ़्लैग कि क्या शेफ़ आइटम पकाने के लिए उपलब्ध है।

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

CREATE TABLE `restaurant`.`item_chef` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`itemId` BIGINT NOT NULL,
`chefId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
INDEX `idx_item_chef_item` (`itemId` ASC),
UNIQUE INDEX `uq_item_chef` (`itemId` ASC, `chefId` ASC),
CONSTRAINT `fk_item_chef_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `restaurant`.`item_chef`
ADD INDEX `idx_item_chef_chef` (`chefId` ASC);
ALTER TABLE `restaurant`.`item_chef`
ADD CONSTRAINT `fk_item_chef_chef`
FOREIGN KEY (`chefId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;

टेबलटॉप और बुकिंग टेबल

इस खंड में, हम टेबलटॉप और बुकिंग टेबल . डिजाइन करेंगे रेस्टोरेंट टेबल और उनके बुकिंग विवरण स्टोर करने के लिए।

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

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

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

CREATE TABLE `restaurant`.`table_top` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`code` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`capacity` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

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

नोट :बुकिंग टेबल में टेबल की बुकिंग में शामिल भुगतान शामिल नहीं हैं। टेबल बुकिंग में शामिल भुगतानों को संभालने के लिए अतिरिक्त कॉलम जोड़कर इसे और अपडेट किया जा सकता है।

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

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

CREATE TABLE `restaurant`.`booking` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tableId` BIGINT NOT NULL,
`userId` BIGINT NULL DEFAULT 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_booking_table` (`tableId` ASC),
CONSTRAINT `fk_booking_table`
FOREIGN KEY (`tableId`)
REFERENCES `restaurant`.`table_top` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`booking`
ADD INDEX `idx_booking_user` (`userId` ASC);
ALTER TABLE `restaurant`.`booking`
ADD CONSTRAINT `fk_booking_user`
FOREIGN KEY (`userId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;

बुकिंग आइटम तालिका अतिथि द्वारा आदेशित वस्तुओं को ट्रैक करने के लिए आवश्यक है। बुकिंग आइटम तालिका के सभी कॉलमों का विवरण नीचे दिया गया है।

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

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

CREATE TABLE `restaurant`.`booking_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`bookingId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` 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_booking_item_booking` (`bookingId` ASC),
CONSTRAINT `fk_booking_item_booking`
FOREIGN KEY (`bookingId`)
REFERENCES `restaurant`.`booking` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`booking_item`
ADD INDEX `idx_booking_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`booking_item`
ADD CONSTRAINT `fk_booking_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

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

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

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

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

CREATE TABLE `restaurant`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`vendorId` BIGINT NULL DEFAULT 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 `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`order`
ADD INDEX `idx_order_vendor` (`vendorId` ASC);
ALTER TABLE `restaurant`.`order`
ADD CONSTRAINT `fk_order_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION;

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

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

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

CREATE TABLE `restaurant`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`orderId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` FLOAT NOT NULL DEFAULT 0,
`unit` 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_order` (`orderId` ASC),
CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `restaurant`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`order_item`
ADD INDEX `idx_order_item_item` (`itemId` ASC);
ALTER TABLE `restaurant`.`order_item`
ADD CONSTRAINT `fk_order_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `restaurant`.`item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

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

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

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

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

CREATE TABLE `restaurant`.`transaction` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`vendorId` 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 `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `restaurant`.`transaction`
ADD INDEX `idx_transaction_vendor` (`vendorId` ASC),
ADD INDEX `idx_transaction_order` (`orderId` ASC);

ALTER TABLE `restaurant`.`transaction`
ADD CONSTRAINT `fk_transaction_vendor`
FOREIGN KEY (`vendorId`)
REFERENCES `restaurant`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_transaction_order`
FOREIGN KEY (`orderId`)
REFERENCES `restaurant`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

पता तालिका

An address table can be used to avoid the redundant columns in the Booking and Order table depending on the actual implementation. It can be directly mapped to the Booking Table and Order Table using the appropriate foreign keys.

सारांश

In this tutorial, we have discussed the database design of a Restaurant Ordering System or Food Ordering System to store the users, book tables, automate kitchen, and manage product inventory. The same database schema can be used to accept online table booking and pre-orders. The database schema provided in this tutorial can be considered as the starting point and further optimized or updated based on the actual needs. The On-Premises Restaurant Ordering System Flowchart can be referred to implement the restaurant order system.

आप चर्चा में शामिल होने के लिए अपनी टिप्पणियाँ प्रस्तुत कर सकते हैं। You may also be interested in designing the database of the Blog, Online Shopping Cart, and Poll &Survey applications. संपूर्ण डेटाबेस स्कीमा 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. किसी वेबपृष्ठ पर HTML तालिका के अंदर MySQL डेटाबेस तालिका से मान दिखाएं

  3. MySQL:MySQL रूट पासवर्ड को कैसे रीसेट या बदलें?

  4. MySQL में दी गई तिथि के लिए महीने का अंतिम दिन कैसे खोजें

  5. एकल MySQL क्वेरी में विभिन्न स्थितियों के साथ कई मायने रखता है