• 中文
    • English
  • 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    • 查看作者
    • 个人博客数据库设计

      一.  前言

      临近期末,为了完成数据库的课程设计,花了几天的时间独自设计并实现了《个人博客数据库管理系统》这个小项目。

      下面是整个课程设计的完整文件,可能一开始的步骤有些繁琐,但每一步都是严格遵循数据库的课程设计规范,希望能帮助到有同样需求的你。

      注:本网站并非采用下面的数据库

      二.  项目概述

      1.  编写目的

      本文档是充分建立在对个人博客基本功能充分调研上,通过在博客使用过程中的各种问题进行分析得出的用户需求分析。

      本文档为充分明确需求分析、安排项目规划与进度、组织软件开发与测试,特撰写此文档。本文档提供开发人员、测试人员进行参考。

      2.  项目背景

      随着互联网的发展,越来越多的人拥有了自己的个人博客。但是大多数采用的是网上别人做好的博客模板,众所周知,网上的模板并不是单独为个人而定制,而是面向大多数人的,所以只能满足我们的一部分需求,于是便想自己独立设计一个博客,来满足自己的所有需要。

      三.  需求分析

      1.  系统概述

      系统主要完成以下几方面的功能:

      • 网站管理:网站的基础设置和主题以及插件相关信息。
      • 用户管理:用户的注册和登录,发表博文和评论,添加好友。
      • 博文管理:用户可以在网站中发表和设置博文。
      • 评论管理:用户可以评论博文和回复其他用户的评论。
      • 分类管理:添加和删除分类,给文章设置分类。
      • 标签管理:添加和删除标签,给文章设置标签。
      • 论坛管理:发布和设置论坛信息,管理帖子。
      • 友情链接:设置和发布友情链接。

      2.  系统功能结构图

      根据需求概述,得到系统功能结构图1如下所示:

      个人博客数据库设计个人博客数据库设计

      系统功能结构图

      2.1  网站管理

      • 网站拥有以下信息:网站标题、网站副标题、网站描述、网站ico图标、网站Logo、网站关键词、网站网址。
      • 网站主要有以下设置:站点语言、日期格式、时间格式、是否允许用户注册等等。
      • 只有管理员可以添加、删除、修改网站信息。

      2.2  用户管理

      • 用户的相关信息如下:用户ID、用户IP、用户名、用户昵称、用户密码、用户邮箱、用户头像、用户等级、用户权限、注册时间、用户生日、用户年龄、用户手机号。
      • 用户注册时需提供用户名、用户密码、用户邮箱或用户手机号。
      • 用户登录时可以采用用户名或邮箱或手机号进行登录。
      • 用户可以发布博文、发表评论、发布帖子、回复帖子,还可以添加其他用户为好友。
      • 用户级别分为管理员和普通用户,管理员普通用户都可以担当论坛版主。
      • 管理员可以添加、删除、修改普通用户的任何信息,还添加、删除、修改任何论坛的信息。

      2.3  博文管理

      • 博文的相关信息如下:博文ID、发布日期、发表用户、博文标题、博文内容、点赞数、回复数、游览量。
      • 博文可以被普通用户发布、修改、删除和评论,但修改和删除仅限于自己发表的动态。
      • 博文发布时需要设置分类、标签。

      2.4  评论管理

      • 评论的相关信息如下:评论ID、评论日期、点赞数、发表用户、评论文章ID、评论内容、父评论ID。
      • 评论可以被用户发表和删除以及被其他用户回复。

      2.5  分类管理

      • 分类的相关信息如下:分类ID、分类名称、分类别名、分类描述、父分类ID。
      • 只有管理员可以添加、删除、修改分类。
      • 分类的作用不仅可以将文章分类,还可以作为博客的菜单。

      2.6  标签管理

      • 标签的相关信息如下:标签ID、标签名称、标签别名、标签描述。
      • 用户发表文章时可以设置标签,标签不仅可以将文章分类,还可以作为博客的菜单。

      2.7  论坛管理

      • 论坛相关信息如下:论坛ID、论坛名称、论坛描述、论坛Logo、论坛背景、论坛帖子个数、父论坛ID。
      • 帖子相关信息如下:帖子ID、帖子标题、帖子内容、发帖时间、回帖个数、发表用户、帖子浏览量、帖子状态。
      • 帖子回复相关信息如下。回贴ID、回帖用户、回帖内容、回帖时间、所属主贴ID、父回贴ID。
      • 管理员可以设置论坛版主,版主可以设置该论坛下的子论坛版主,版主可以加精、置顶帖子、设置论坛信息。

      2.8  菜单管理

      • 总菜单的相关信息如下:菜单ID、菜单名称。
      • 总菜单由子菜单组成,子菜单有以下信息: 链接ID、链接名称、链接目标、打开方式、父链ID。
      • 只有管理员可以添加、删除、修改总菜单和子菜单。

      2.9  友链管理

      • 友链的相关信息如下:友链ID、友链链接、友链名称、友链描述、友链Logo。
      • 只有管理员可以添加、删除、修改友链。

      四.  数据库概念模型设计

      1.  网站管理

      个人博客数据库设计

      网站管理E-R图

      2.  用户管理

      个人博客数据库设计

      用户管理E-R图

      3.  博文管理

      个人博客数据库设计

      博文管理E-R图

      4.  评论管理

      个人博客数据库设计

      评论管理E-R图

      5.  分类管理

      个人博客数据库设计

      分类管理E-R图

      6.  标签管理

      个人博客数据库设计

      标签管理E-R图

      7.  论坛管理

      个人博客数据库设计

      论坛管理E-R图

      8.  菜单管理

      个人博客数据库设计

      菜单管理E-R图

      9.  友链管理

      个人博客数据库设计

      友链管理E-R图

      10.  基本E-R图

      个人博客数据库设计

      基本E-R图

      五.  数据库逻辑模型设计

      1.  关系模式集合

      • 网站管理(选项ID,选项名称,选项值)
      • 用户(用户ID,用户IP,用户名,用户密码,用户邮箱,用户昵称,用户头像,用户等级,用户权限,注册时间,用户生日,用户年龄,用户手机号)
      • 用户好友(标识ID,用户ID,好友ID,好友备注,好友状态)
      • 博文(博文ID,发表用户ID,博文标题,博文内容,浏览量,评论总数,发表日期,点赞数)
      • 评论(评论ID,发表用户ID,评论文章ID,点赞数,评论日期,评论内容,父评论ID)
      • 分类(分类ID,分类名称,分类别名,分类描述,父分类ID)
      • 博文设置分类(博文ID,分类ID)
      • 标签(标签ID,标签名称,标签别名,标签描述)
      • 博文设置标签(博文ID,标签ID)
      • 总菜单(总菜单ID,总菜单名称)
      • 子菜单(子菜单ID,菜单ID,子菜单名称,子菜单链接,子菜单打开方式,父菜单ID)
      • 论坛(论坛ID,论坛名称,论坛描述,论坛Logo,论坛帖子个数,父论坛ID)
      • 主贴(主题ID,论坛ID,发帖用户ID,帖子标题,帖子浏览量,帖子内容,发帖时间,帖子状态,回帖个数)
      • 回复帖子(回帖ID,回帖用户ID,所属主贴ID,回帖内容,回帖时间,父回帖ID)
      • 版主(版主ID,论坛ID,版主级别)
      • 友情链接(友链ID,友链链接,友链名称,友链描述,友链Logo)

      2.  数据库表结构设计

      2.1  网站管理

      个人博客数据库设计

      2.2  用户管理

      个人博客数据库设计

      个人博客数据库设计

      2.3  博文管理

      个人博客数据库设计

      2.4  评论管理

      个人博客数据库设计

      2.5  分类管理

      个人博客数据库设计

      2.6  标签管理

      个人博客数据库设计

      2.7  论坛管理

      个人博客数据库设计

      个人博客数据库设计

      2.8  菜单管理

      个人博客数据库设计

      2.9  友链管理

       

      个人博客数据库设计

      六.  数据库实现

      1.  创建数据库

      CREATE DATABASE BLOG;

      2.  创建表

      2.1网站管理表

      CREATE TABLE zj_options (
         option_id int(11) NOT NULL AUTO_INCREMENT,
         option_name varchar(255) NOT NULL,
         option_values longtext NOT NULL,
         PRIMARY KEY ( option_id ),
         KEY option_name ( option_name )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.2用户表

      CREATE TABLE zj_users (
         user_id bigint(20) NOT NULL AUTO_INCREMENT,
         user_ip varchar(20) NOT NULL,
         user_name varchar(20) NOT NULL,
         user_password varchar(15) NOT NULL,
         user_email varchar(30) NOT NULL,
         user_profile_photo varchar(255) NOT NULL,
         user_level varchar(20) NOT NULL,
         user_rights varchar(20) NOT NULL,
         user_registration_time datetime NOT NULL,
         user_birthday date DEFAULT NULL,
         user_age tinyint(4) DEFAULT NULL,
         user_telephone_number int(11) NOT NULL,
         user_nickname varchar(20) NOT NULL,
         PRIMARY KEY ( user_id ),
         KEY user_name ( user_name ),
         KEY user_nickname ( user_nickname ),
         KEY user_email ( user_email ),
         KEY user_telephone_number ( user_telephone_number )
      ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

      2.3 用户好友表

      CREATE TABLE zj_user_friends (
        Id bigint(20) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        user_friends_id bigint(20) NOT NULL,
        user_note varchar(20) NOT NULL,
        user_status varchar(20) NOT NULL,
        PRIMARY KEY ( id ),
        KEY user_id ( user_id )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.4 博文表

      CREATE TABLE zj_articles (
        article_id bigint(255) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        article_title text NOT NULL,
        article_content longtext NOT NULL,
        article_views bigint(20) NOT NULL,
        article_comment_count bigint(20) NOT NULL,
        article_date datetime NOT NULL,
        article_like_count bigint(20) NOT NULL,
        PRIMARY KEY ( article_id ),
        KEY user_id ( user_id )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.5文章评论表

      CREATE TABLE zj_comments (
        comment_id bigint(20) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        article_id bigint(20) NOT NULL,
        comment_like_count bigint(20) NOT NULL,
        comment_date datetime NOT NULL,
        comment_content text NOT NULL,
        parent_comment_id bigint(20) NOT NULL,
        PRIMARY KEY ( comment_id ),
        KEY article_id ( article_id ),
        KEY comment_date ( comment_date ),
        KEY parent_comment_id ( parent_comment_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.6 分类表

      CREATE TABLE zj_sorts (
        sort_id bigint(20) NOT NULL,
        sort_name varchar(50) NOT NULL,
        sort_alias varchar(15) NOT NULL,
        sort_description text NOT NULL,
        parent_sort_id bigint(20) NOT NULL,
        PRIMARY KEY ( sort_id ),
        KEY sort_name ( sort_name ),
        KEY sort_alias ( sort_alias )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.7 文章设置分类表

      CREATE TABLE zj_set_artitle_sort (
        article_id bigint(20) NOT NULL,
        sort_id bigint(20) NOT NULL,
        PRIMARY KEY ( article_id , sort_id ),
        KEY sort_id ( sort_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.8 标签表

      CREATE TABLE zj_labels (
        label_id bigint(20) NOT NULL AUTO_INCREMENT,
        label_name varchar(20) NOT NULL,
        label_alias varchar(15) NOT NULL,
        label_description text NOT NULL,
       PRIMARY KEY ( label_id ),
        KEY label_name ( label_name ),
        KEY label_alias ( label_alias )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.9 文章设置标签表

      CREATE TABLE zj_set_artitle_label (
        article_id bigint(20) NOT NULL AUTO_INCREMENT,
        label_id bigint(20) NOT NULL,
        PRIMARY KEY ( article_id ),
        KEY label_id ( label_id )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.10论坛表

      CREATE TABLE zj_forums (
        forum_id bigint(20) NOT NULL AUTO_INCREMENT,
        forum_name varchar(20) NOT NULL,
        forum_description text NOT NULL,
        forum_logo varchar(255) NOT NULL,
        forum_post_count bigint(20) NOT NULL,
        parent_forum_id bigint(20) NOT NULL,
        PRIMARY KEY ( forum_id ),
        KEY forum_name ( forum_name ),
        KEY parent_forum_id ( parent_forum_id )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.11主贴表

      CREATE TABLE zj_posts (
        post_id bigint(20) NOT NULL AUTO_INCREMENT,
        forum_id bigint(20) NOT NULL,
        user_id bigint(20) NOT NULL,
        post_title text NOT NULL,
        post_views bigint(20) NOT NULL,
        post_content longtext NOT NULL,
        post_date datetime NOT NULL,
        post_status varchar(20) NOT NULL,
        post_comment_count bigint(20) NOT NULL,
        PRIMARY KEY ( post_id )
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

      2.12 回贴表

      CREATE TABLE zj_floors (
        floor_id bigint(20) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        post_id bigint(20) NOT NULL,
        floor_content longtext NOT NULL,
        floor_date datetime NOT NULL,
        parent_floor_id bigint(20) NOT NULL,
       PRIMARY KEY ( floor_id ),
        KEY parent_floor_id ( parent_floor_id ),
        KEY user_id ( user_id , post_id ),
        KEY floor_date ( floor_date )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.13 版主表

      CREATE TABLE zj_moderator (
        moderator_id bigint(20) NOT NULL AUTO_INCREMENT,
        forum_id bigint(20) NOT NULL,
        moderator_level varchar(20) NOT NULL,
        PRIMARY KEY ( moderator_id , forum_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.14 总菜单表

      CREATE TABLE zj_menus (
        menu_id bigint(20) NOT NULL AUTO_INCREMENT,
        menu_name varchar(20) NOT NULL,
        PRIMARY KEY ( menu_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.15 子菜单表

      CREATE TABLE zj_submenus (
        link_id bigint(20) NOT NULL AUTO_INCREMENT,
        menu_id bigint(20) NOT NULL,
        link_name varchar(255) NOT NULL,
        link_target varchar(255) NOT NULL,
        link_open_way varchar(20) NOT NULL,
        parent_link_id bigint(20) NOT NULL,
        PRIMARY KEY ( link_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      2.16 友链表

      CREATE TABLE zj_friend_links (
        friend_link_id bigint(20) NOT NULL AUTO_INCREMENT,
        friend_links varchar(255) NOT NULL,
        friend_link_name varchar(20) NOT NULL,
        friend_link_description text NOT NULL,
        friend_link_logo varchar(255) NOT NULL,
        PRIMARY KEY ( friend_link_id )
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

       

      3.  创建视图

      3.1 某用户发表过的所有博文视图

      CREATE VIEW Articles
      AS
      SELECT
      zj_articles.user_id AS user_id,
      zj_users.user_name AS user_name,
      zj_articles.article_id AS article_id,
      zj_articles.article_title AS article_title,
      zj_articles.article_content AS article_content
      FROM
      (
      zj_articles
      JOIN zj_users
      )
      WHERE
      (
      zj_articles.user_id = zj_users.user_id
      ) ;

      3.2 某用户发表过的所有帖子视图

      CREATE VIEW Posts
      AS
      SELECT
      zj_posts.user_id AS user_id,
      zj_users.user_name AS user_name,
      zj_posts.post_id AS post_id,
      zj_posts.post_title AS post_title,
      zj_posts.post_content AS post_content,
      zj_posts.forum_id AS forum_id,
      zj_forums.forum_name AS forum_name
      FROM
      (
      (zj_posts JOIN zj_users)
      JOIN zj_forums
      )
      WHERE
      (
      (
      zj_posts.user_id = zj_users.user_id
      )
      AND (
      zj_posts.forum_id = zj_forums.forum_id
      )
      ) ;

      3.3 某用户的所有好友视图

      CREATE VIEW Friends
      AS
      SELECT
      zj_user_friends.user_id AS user_id,
      zj_users.user_name AS user_name,
      zj_user_friends.user_friends_id AS user_friends_id,
      zj_user_friends.user_note AS user_note
      FROM
      (
      zj_users
      JOIN zj_user_friends
      )
      WHERE
      (
      zj_users.user_id = zj_user_friends.user_id
      ) ;

      3.4 某标签下的所有博文视图

      CREATE VIEW Label
      AS
      SELECT
      zj_set_artitle_label.label_id AS label_id,
      zj_labels.label_name AS label_name,
      zj_set_artitle_label.article_id AS article_id,
      zj_articles.article_title AS article_title
      FROM
      (
      (
      zj_labels
      JOIN zj_articles
      )
      JOIN zj_set_artitle_label
      )
      WHERE
      (
      (
      zj_set_artitle_label.article_id = zj_articles.article_id
      )
      AND (
      zj_set_artitle_label.label_id = zj_labels.label_id
      )
      ) ;

      3.5 某分类下的所有博文视图

      CREATE VIEW Sort
      AS
      SELECT
      zj_set_artitle_sort.sort_id AS sort_id,
      zj_sorts.sort_name AS sort_name,
      zj_set_artitle_sort.article_id AS article_id,
      zj_articles.article_title AS article_title
      FROM
      (
      (
      zj_articles
      JOIN zj_set_artitle_sort
      )
      JOIN zj_sorts
      )
      WHERE
      (
      (
      zj_articles.article_id = zj_set_artitle_sort.article_id
      )
      AND (
      zj_sorts.sort_id = zj_set_artitle_sort.sort_id
      )
      ) ;

      3.6 某论坛下的所有帖子视图

      CREATE VIEW Forums
      AS
      SELECT
      zj_forums.forum_id AS forum_id,
      zj_forums.forum_name AS forum_name,
      zj_posts.post_id AS post_id,
      zj_posts.post_title AS post_title
      FROM
      (zj_forums JOIN zj_posts)
      WHERE
      (
      zj_forums.forum_id = zj_posts.forum_id
      ) ;

      七.  sql文件

      blog.sql
      暂无介绍

      八.  结束语

      从我第一次接触数据库起,就对这门课程产生了浓厚的兴趣,毕竟现在网络这么发达,而每个网络产品和应用都离不开数据库,可见数据库的重要性。

      从第一节课的懵懵懂懂,到今天可以自己一个人独立完成数据库的课程设计,在这期间我学到了非常多的知识,也遇到了很多的困难。在这次数据库设计中,光是博客系统的需求就耗费了我将近1/3的时间。在画ER图的时候,有时候会把实体和属性搞混,也有时候因为决定使用二元联系还是三元联系考虑好久……

      虽然遇到了很多困难,但是在老师和网络的帮助下这些问题都得到了解决。在这里再次感谢老师和那些帮助过我的人。

      这次课程设计我最大的收获就是,人无论做什么事,一定要不怕困难,努力坚持。很多时候我们离成功就差最后的那一点点,如果此时放弃了那么前功尽弃,而坚持下去,结果一定不会让我们失望!希望在以后的学习中,自己能够再接再厉,更加深入的学习数据库的其他知识,早日实现自己的梦想,加油吧!

       

    • 7
    • 17
    • 1
    • 3.72w
    • Tobehappyoh可乐加点冰编程混子pearPLUS浮生若梦宁待柚子

      请登录之后再进行评论

      登录
    • 1
      打赏了5贝利。
    • 0
      [s-31]
    • 0
      张甲47站长
      @mid1 你好,你应该想问的是论坛版主和论坛是多对多的关系吧?按照规范,确实需要一个新表进行n:m的约束,但是因为版主的这个表字段太少了,只有两个字段,所以直接在这个表中添加了论坛的ID来管理了,谢谢你的建议
    • 1
      mid11
      论坛版主和版主是多对多关系,不需要一张新的表对两个表关系进行约束吗
    • 0
      可以 赞一个
    • 0
      LFM1
      @15553052335 同学不会是科大的吧 这篇我也在做数据库设计 这下凉了
    • 1
      6666
    • 0
      张甲47站长
      @Mr_yang 你好,网站管理表,是用于存放设置选项的,比如网站的名称,网站的设置,网站的简介,还有网站的主页域名之类的设置
    • 0
      你好 博主 我看了你写的关于建网站数据库设计的文章好几遍 没有看懂你的网站管理表是什么意思有什么用
    • 0
      有一个问题 根据博主你的这篇文章我建立了数据库,现有一个问题 如果现我需要建立一个概览页面,页面由文章列表组成。每一个文章都会显示她所拥有的所有标签。那么我该如何对数据库进行查询。ps:数据库设计与这篇文章中所描述的一致。希望能得到你的解答
    • 0
      @柚子 打扰了,柚子。我不小心@你了
    • 0
      你的评论表跟博文表 @?江流天地外?? 一看就是mysql
    • 1
      小可爱,你的用户为什么没有性别这个字段。
      还有 @柚子 @柚子 @柚子 @柚子
    • 1
      张甲47站长
      @youzi 那是联合主键,如果不单独添加ID作为主键,必须这样。
    • 0
      一张表你设置两个主键可行么???
    • 1
      张甲47站长
      @王者荣耀 肯定不是啦~
    • 1
      你的这个博客网站系统用的是不是这个数据库?
    • 做任务
    • 实时动态
    • 偏好设置
    • 返回顶部
    • 单栏布局 侧栏位置: