• 注册
  • 赞助本站

    • 微信
    • 支付宝
    • Q Q

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

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

      一.  前言

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

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

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

      二.  项目概述

      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图的时候,有时候会把实体和属性搞混,也有时候因为决定使用二元联系还是三元联系考虑好久……

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

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

       

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