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

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

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

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

चित्र 1

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

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

ब्लॉग डेटाबेस

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

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

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

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

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

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

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

CREATE TABLE `blog`.`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,
`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 `blog`.`post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`authorId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_post_user` (`authorId` ASC),
CONSTRAINT `fk_post_user`
FOREIGN KEY (`authorId`)
REFERENCES `blog`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post`
ADD INDEX `idx_post_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post`
ADD CONSTRAINT `fk_post_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

पोस्ट मेटा

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

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

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

CREATE TABLE `blog`.`post_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_post` (`postId` ASC),
UNIQUE INDEX `uq_post_meta` (`postId` ASC, `key` ASC),
CONSTRAINT `fk_meta_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

टिप्पणी तालिका पोस्ट करें

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

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

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

CREATE TABLE `blog`.`post_comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`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_comment_post` (`postId` ASC),
CONSTRAINT `fk_comment_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post_comment`
ADD INDEX `idx_comment_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post_comment`
ADD CONSTRAINT `fk_comment_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post_comment` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

श्रेणी तालिका और पोस्ट श्रेणी तालिका

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

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

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

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

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

पोस्ट आईडी पोस्ट की पहचान के लिए पोस्ट आईडी।
श्रेणी आईडी श्रेणी की पहचान करने के लिए श्रेणी आईडी।

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

 
CREATE TABLE `blog`.`post_category` (
`postId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`postId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_post` (`postId` ASC),
CONSTRAINT `fk_pc_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `blog`.`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:अल्पविराम से अलग की गई एकल पंक्ति के रूप में एकाधिक पंक्ति

  2. त्रुटि:'सॉकेट के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता'/var/run/mysqld/mysqld.sock' (2)' - गुम /var/run/mysqld/mysqld.sock

  3. SQL कर्सर के साथ कार्य करना

  4. UTF-8 वर्ण एन्कोडिंग लड़ाई json_encode ()

  5. phpMyAdmin एक #2002 फेंक रहा है mysql सर्वर में लॉग इन नहीं कर सकता phpmyadmin