{"id":448,"date":"2021-03-20T22:26:00","date_gmt":"2021-03-20T22:26:00","guid":{"rendered":"https:\/\/rishikantsri.in\/blog\/?p=448"},"modified":"2023-10-17T06:38:24","modified_gmt":"2023-10-17T06:38:24","slug":"designing-a-database-schema-for-a-blog","status":"publish","type":"post","link":"https:\/\/rishikantsri.in\/blog\/designing-a-database-schema-for-a-blog\/","title":{"rendered":"Designing a database schema for a blog"},"content":{"rendered":"\n<p>Designing a database schema for a blog involves defining the structure of the tables and their relationships. Here&#8217;s a sample database schema for a blog system with tables for users, posts, post metadata, post comments, categories, and additional tables to handle related data.<\/p>\n\n\n\n<p><strong>1. User Table:<\/strong><br>This table stores information about blog users.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE users (\n    user_id INT PRIMARY KEY,\n    username VARCHAR(50) NOT NULL,\n    email VARCHAR(100) NOT NULL,\n    password_hash VARCHAR(100) NOT NULL,\n    full_name VARCHAR(100),\n    bio TEXT,\n    avatar_url VARCHAR(255),\n    registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    last_login TIMESTAMP,\n    role ENUM('user', 'editor', 'admin') DEFAULT 'user'\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE users <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    user_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    username VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">50<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    email VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">100<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    password_hash VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">100<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    full_name VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">100<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    bio TEXT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    avatar_url VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    last_login TIMESTAMP<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    role ENUM<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;user&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;editor&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;admin&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> DEFAULT <\/span><span style=\"color: #FFAB70\">&#39;user&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>2. Post Table:<\/strong><br>This table stores blog posts.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE posts (\n    post_id INT PRIMARY KEY,\n    title VARCHAR(255) NOT NULL,\n    content TEXT NOT NULL,\n    user_id INT,\n    category_id INT,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    modified_at TIMESTAMP,\n    status ENUM('draft', 'published', 'archived') DEFAULT 'draft',\n    feature_image_url VARCHAR(255),\n    FOREIGN KEY (user_id) REFERENCES users(user_id),\n    FOREIGN KEY (category_id) REFERENCES categories(category_id)\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE posts <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    post_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    title VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    content TEXT NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    user_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    category_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    modified_at TIMESTAMP<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    status ENUM<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;draft&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;published&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&#39;archived&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> DEFAULT <\/span><span style=\"color: #FFAB70\">&#39;draft&#39;<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    feature_image_url VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">user_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES users<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">user_id<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">category_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES categories<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">category_id<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>3. Post Meta Table:<\/strong><br>This table stores additional metadata related to blog posts.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE post_meta (\n    meta_id INT PRIMARY KEY,\n    post_id INT,\n    key_name VARCHAR(50) NOT NULL,\n    value TEXT,\n    FOREIGN KEY (post_id) REFERENCES posts(post_id)\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE post_meta <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    meta_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    post_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    key_name VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">50<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    value TEXT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES posts<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>4. Post Comment Table:<\/strong><br>This table stores comments made on blog posts.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE post_comments (\n    comment_id INT PRIMARY KEY,\n    post_id INT,\n    user_id INT,\n    parent_comment_id INT,\n    content TEXT NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    likes INT DEFAULT 0,\n    dislikes INT DEFAULT 0,\n    FOREIGN KEY (post_id) REFERENCES posts(post_id),\n    FOREIGN KEY (user_id) REFERENCES users(user_id),\n    FOREIGN KEY (parent_comment_id) REFERENCES post_comments(comment_id)\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE post_comments <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    comment_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    post_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    user_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    parent_comment_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    content TEXT NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    likes <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> DEFAULT <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    dislikes <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> DEFAULT <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES posts<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">user_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES users<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">user_id<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">parent_comment_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES post_comments<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">comment_id<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>5. Category Table:<\/strong><br>This table stores categories for organizing blog posts.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE categories (\n    category_id INT PRIMARY KEY,\n    name VARCHAR(50) NOT NULL,\n    description TEXT\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE categories <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    category_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    name VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">50<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    description TEXT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Additional Tables (Optional):<\/strong><\/p>\n\n\n\n<p>Additional tables can be added as needed for features such as tags, post likes, user profiles, and more. Below are examples of a few optional tables:<\/p>\n\n\n\n<p><strong>6. Tag Table:<\/strong><br>This table stores tags associated with blog posts.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE tags (\n    tag_id INT PRIMARY KEY,\n    name VARCHAR(50) NOT NULL\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE tags <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    tag_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    name VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">50<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> NOT <\/span><span style=\"color: #79B8FF\">NULL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>7. PostTag Table:<\/strong><br>This table establishes a many-to-many relationship between posts and tags.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE post_tags (\n    post_id INT,\n    tag_id INT,\n    PRIMARY KEY (post_id, tag_id),\n    FOREIGN KEY (post_id) REFERENCES posts(post_id),\n    FOREIGN KEY (tag_id) REFERENCES tags(tag_id)\n);\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE post_tags <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    post_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    tag_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    PRIMARY KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> tag_id<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES posts<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">post_id<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FOREIGN KEY <\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">tag_id<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\"> REFERENCES tags<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">tag_id<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>8. User Profile Table:<\/strong><br>This table can store additional information about user profiles.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"CREATE TABLE user_profiles (\n    user_id INT PRIMARY KEY,\n    website_url VARCHAR(255),\n    twitter_handle VARCHAR(50),\n    facebook_url VARCHAR(255),\n    linkedin_profile VARCHAR(255)\n);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">CREATE TABLE user_profiles <\/span><span style=\"color: #BBBBBB\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    user_id <\/span><span style=\"color: #F97583\">INT<\/span><span style=\"color: #B392F0\"> PRIMARY KEY<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    website_url VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    twitter_handle VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">50<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    facebook_url VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    linkedin_profile VARCHAR<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #F8F8F8\">255<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>These tables form the foundation of a blog database schema, allowing you to store and manage user data, posts, comments, categories, and additional data. Depending on your specific requirements, you can further customize and extend the schema with features such as post likes, post views, or user roles.<\/p>\n\n\n\n<p>Please note that as the schema becomes more complex, planning for data integrity, performance, and efficient queries is crucial. Consider using appropriate indexes, constraints, and optimization techniques based on the database system you are using.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Designing a database schema for a blog involves defining the structure of the tables and their relationships. Here&#8217;s a sample database schema for a blog system with tables for users, posts, post metadata, post comments, categories, and additional tables to handle related data. 1. User Table:This table stores information about blog users. 2. Post Table:This [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[55],"_links":{"self":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/448"}],"collection":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/comments?post=448"}],"version-history":[{"count":1,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"predecessor-version":[{"id":449,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions\/449"}],"wp:attachment":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}