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

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

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

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

चित्र 1

नोट :यह स्पैमिंग से बचने के लिए क्विज़ लेने के लिए केवल लॉग इन उपयोगकर्ताओं तक ही सीमित है। क्विज़ को परीक्षणों की तुलना में छोटा माना जाता है।

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

प्रश्नोत्तरी डेटाबेस

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

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

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

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

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

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

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

CREATE TABLE `quiz`.`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,
`host` 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 के लिए उपयोग किया जाने वाला मेटा शीर्षक।
स्लग यूआरएल बनाने के लिए स्लग।
सारांश मुख्य हाइलाइट्स का उल्लेख करने के लिए सारांश।
टाइप करें परीक्षा और प्रश्नोत्तरी के बीच अंतर करने का प्रकार।
स्कोर प्रश्नोत्तरी का कुल स्कोर।
प्रकाशित इसका उपयोग यह पहचानने के लिए किया जा सकता है कि परीक्षण/प्रश्नोत्तरी सार्वजनिक रूप से उपलब्ध है या नहीं।
पर बनाया गया यह उस तिथि और समय को संग्रहीत करता है जिस पर परीक्षण/प्रश्नोत्तरी तैयार की जाती है।
पर अपडेट किया गया यह उस तारीख और समय को संग्रहीत करता है जिस पर परीक्षण/प्रश्नोत्तरी अपडेट की जाती है।
यहां प्रकाशित यह परीक्षा/प्रश्नोत्तरी प्रकाशित होने की तिथि और समय को संग्रहीत करता है।
शुरू होता है यह उस तिथि और समय को संग्रहीत करता है जिस पर परीक्षा/प्रश्नोत्तरी शुरू होती है और लेता है।
इस पर समाप्त होता है यह उस तारीख और समय को संग्रहीत करता है जिस पर परीक्षा/प्रश्नोत्तरी समाप्त होती है।
सामग्री परीक्षा/प्रश्नोत्तरी डेटा संग्रहीत करने के लिए उपयोग किया जाने वाला कॉलम।

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

CREATE TABLE `quiz`.`quiz` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`hostId` 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,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` 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_quiz_host` (`hostId` ASC),
CONSTRAINT `fk_quiz_host`
FOREIGN KEY (`hostId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

प्रश्नोत्तरी मेटा

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

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

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

CREATE TABLE `quiz`.`quiz_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_quiz` (`quizId` ASC),
UNIQUE INDEX `uq_quiz_meta` (`quizId` ASC, `key` ASC),
CONSTRAINT `fk_meta_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

प्रश्नोत्तरी प्रश्न तालिका

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

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

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

CREATE TABLE `quiz`.`quiz_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`level` SMALLINT(6) NOT NULL DEFAULT 0,
`score` 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_question_quiz` (`quizId` ASC),
CONSTRAINT `fk_question_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

प्रश्नोत्तरी उत्तर तालिका

प्रश्नोत्तरी उत्तर तालिका एकल-विकल्प, बहु-विकल्प और चुनिंदा प्रकार के प्रश्नों के उत्तरों को संग्रहीत करने के लिए उपयोग किया जा सकता है। एकल-विकल्प वाले प्रश्न के मामले में, उत्तर हां और नहीं हो सकते हैं। प्रश्नोत्तरी उत्तर तालिका के सभी कॉलमों का विवरण नीचे दिया गया है।

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

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

CREATE TABLE `quiz`.`quiz_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`correct` 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_answer_quiz` (`quizId` ASC),
CONSTRAINT `fk_answer_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`quiz_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`quiz_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

टेबल लें

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

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

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

CREATE TABLE `quiz`.`take` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`quizId` BIGINT NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`startedAt` DATETIME NULL DEFAULT NULL,
`finishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_take_user` (`userId` ASC),
CONSTRAINT `fk_take_user`
FOREIGN KEY (`userId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `quiz`.`take`
ADD INDEX `idx_take_quiz` (`quizId` ASC);
ALTER TABLE `quiz`.`take`
ADD CONSTRAINT `fk_take_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

उत्तर तालिका लें

उत्तर तालिका लें प्रश्नोत्तरी देते समय उपयोगकर्ता द्वारा चुने गए उत्तरों को संग्रहीत करने के लिए उपयोग किया जा सकता है। बहुविकल्पीय प्रश्न के मामले में, कई उत्तर हो सकते हैं। नीचे दिए गए उत्तर तालिका के सभी स्तंभों का विवरण दिया गया है।

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

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

CREATE TABLE `quiz`.`take_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`takeId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT NOT NULL,
`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_answer_take` (`takeId` ASC),
CONSTRAINT `fk_answer_take`
FOREIGN KEY (`takeId`)
REFERENCES `quiz`.`take` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_answer` (`answerId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_answer`
FOREIGN KEY (`answerId`)
REFERENCES `quiz`.`quiz_answer` (`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. SQL DELETE सिंटैक्स - DBMS द्वारा सूचीबद्ध

  2. MySQL में IP एड्रेस स्टोर करने का सबसे कारगर तरीका

  3. गणना द्वारा SQL आदेश

  4. MySQL में पिवट टेबल प्रश्नों को स्वचालित कैसे करें

  5. MySQL में राइट () फंक्शन कैसे काम करता है