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

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

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

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

चित्र 1

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

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

मतदान डेटाबेस

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

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

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

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

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

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

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

CREATE TABLE `poll`.`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 `poll`.`poll` (
`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,
`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_poll_host` (`hostId` ASC),
CONSTRAINT `fk_poll_host`
FOREIGN KEY (`hostId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

पोल मेटा

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

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

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

CREATE TABLE `poll`.`poll_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_poll` (`pollId` ASC),
UNIQUE INDEX `uq_poll_meta` (`pollId` ASC, `key` ASC),
CONSTRAINT `fk_meta_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

मतदान प्रश्न तालिका

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

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

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

CREATE TABLE `poll`.`poll_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`type` VARCHAR(50) 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_question_poll` (`pollId` ASC),
CONSTRAINT `fk_question_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

मतदान उत्तर तालिका

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

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

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

CREATE TABLE `poll`.`poll_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` 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_poll` (`pollId` ASC),
CONSTRAINT `fk_answer_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

मतदान तालिका

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

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

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

CREATE TABLE `poll`.`poll_vote` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT DEFAULT NULL,
`userId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_vote_poll` (`pollId` ASC),
CONSTRAINT `fk_vote_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_answer` (`answerId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_answer`
FOREIGN KEY (`answerId`)
REFERENCES `poll`.`poll_answer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_user` (`userId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_user`
FOREIGN KEY (`userId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

श्रेणी तालिका और मतदान श्रेणी तालिका

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

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

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

CREATE TABLE `poll`.`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 `poll`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `poll`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

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

मतदान आईडी मतदान या सर्वेक्षण की पहचान करने के लिए मतदान आईडी।
श्रेणी आईडी श्रेणी की पहचान करने के लिए श्रेणी आईडी।

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

CREATE TABLE `poll`.`poll_category` (
`pollId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`pollId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_poll` (`pollId` ASC),
CONSTRAINT `fk_pc_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

टैग टेबल और पोल टैग टेबल

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

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

सारांश

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

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

संपूर्ण डेटाबेस स्कीमा 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 5.7 से MySQL 8.0 पर जाना - आपको क्या पता होना चाहिए

  2. DATE_SUB () उदाहरण – MySQL

  3. Laravel-5 'LIKE' समकक्ष (वाक्पटु)

  4. असफल प्रविष्टियों पर MySQL ऑटोइनक्रिकमेंट क्यों बढ़ता है?

  5. पायथन के साथ SQL डेटाबेस कैसे बनाएं और हेरफेर करें