zoukankan      html  css  js  c++  java
  • 个人博客数据库设计

    个人博客数据库设计

    2019-01-21 11:41:23 米奇罗 阅读数 4868更多

    分类专栏: MySQL

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/chachapaofan/article/details/86571657

    前言

    最近要做数据库大作业,在思考了很久之后,还是设计一个简单的个人博客数据库,数据库采用的时MySQL5.7。

    数据库下载(提取码: s2f9)

    一、 概述及分析

    1.1 项目背景

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

    1.2 分析

    • 系统主要完成以下几方面的功能:
    • 用户管理:用户的注册和登录,发表博文和评论。
    • 博文管理:用户可以在网站中发表和设置博文。
    • 评论管理:用户可以评论博文和回复其他用户的评论。
    • 分类管理:添加和删除分类,给文章设置分类。
    • 标签管理:添加和删除标签,给文章设置标签。

    1.3 系统功能

    1.3.1 用户管理

    用户的相关信息如下:用户ID、用户IP、用户名、用户昵称、用户密码、用户邮箱、用户头像、注册时间、用户生日、用户年龄、用户手机号。

    用户注册时需提供用户名、用户密码、用户邮箱或用户手机号。

    用户登录时可以采用用户名或邮箱或手机号进行登录。

    用户可以发布博文、发表评论、回复,还可以添加其他用户为好友。

    1.3.2 博文管理

    博文的相关信息如下:博文ID、发布日期、发表用户、博文标题、博文内容、点赞数、回复数、游览量。

    博文可以被普通用户发布、修改、删除和评论,但修改和删除仅限于自己发表的动态。

    博文发布时需要设置分类、标签。

    1.3.3 评论管理

    评论的相关信息如下:评论ID、评论日期、点赞数、发表用户、评论文章ID、评论内容、父评论ID。

    评论可以被用户发表和删除以及被其他用户回复。

    1.3.4 分类管理

    分类的相关信息如下:分类ID、分类名称、分类别名、分类描述、父分类ID。

    只有管理员可以添加、删除、修改分类。

    分类的作用不仅可以将文章分类,还可以作为博客的菜单。

    1.3.5 标签管理

    标签的相关信息如下:标签ID、标签名称、标签别名、标签描述。

    用户发表文章时可以设置标签,标签不仅可以将文章分类,还可以作为博客的菜单。

    二、数据库概念模型设计—基本ER图

    三、数据库逻辑模型设计


    四、数据库语句

    4.1 建立数据表语句(部分)

    CREATE TABLE `zj_users` (
    
     `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    
     `user_ip` varchar(20) NOT NULL COMMENT '用户IP',
    
     `user_name` varchar(20) NOT NULL COMMENT '用户名',
    
     `user_password` varchar(15) NOT NULL COMMENT '用户密码',
    
     `user_email` varchar(30) NOT NULL COMMENT '用户邮箱',
    
     `user_profile_photo` varchar(255) NOT NULL COMMENT '用户头像',
    
     `user_registration_time` datetime DEFAULT NULL COMMENT '注册时间',
    
     `user_birthday` date DEFAULT NULL COMMENT '用户生日',
    
     `user_age` tinyint(4) DEFAULT NULL COMMENT '用户年龄',
    
     `user_telephone_number` int(11) NOT NULL COMMENT '用户手机号',
    
     `user_nickname` varchar(20) NOT NULL COMMENT '用户昵称',
    
     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=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_articles` (
    
     `article_id` bigint(255) NOT NULL AUTO_INCREMENT COMMENT '博文ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '发表用户ID',
    
     `article_title` text NOT NULL COMMENT '博文标题',
    
     `article_content` longtext NOT NULL COMMENT '博文内容',
    
     `article_views` bigint(20) NOT NULL COMMENT '浏览量',
    
     `article_comment_count` bigint(20) NOT NULL COMMENT '评论总数',
    
     `article_date` datetime DEFAULT NULL COMMENT '发表时间',
    
     `article_like_count` bigint(20) NOT NULL,
    
     PRIMARY KEY (`article_id`),
    
     KEY `user_id` (`user_id`),
    
     CONSTRAINT `zj_articles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `zj_users` (`user_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_comments` (
    
     `comment_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '评论ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '发表用户ID',
    
     `article_id` bigint(20) NOT NULL COMMENT '评论博文ID',
    
     `comment_like_count` bigint(20) NOT NULL COMMENT '点赞数',
    
     `comment_date` datetime DEFAULT NULL COMMENT '评论日期',
    
     `comment_content` text NOT NULL COMMENT '评论内容',
    
     `parent_comment_id` bigint(20) NOT NULL COMMENT '父评论ID',
    
     PRIMARY KEY (`comment_id`),
    
     KEY `article_id` (`article_id`),
    
     KEY `comment_date` (`comment_date`),
    
     KEY `parent_comment_id` (`parent_comment_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_labels` (
    
     `label_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标签ID',
    
     `label_name` varchar(20) NOT NULL COMMENT '标签名称',
    
     `label_alias` varchar(15) NOT NULL COMMENT '标签别名',
    
     `label_description` text NOT NULL COMMENT '标签描述',
    
     PRIMARY KEY (`label_id`),
    
     KEY `label_name` (`label_name`),
    
     KEY `label_alias` (`label_alias`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_set_artitle_label` (
    
     `article_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文章ID',
    
     `label_id` bigint(20) NOT NULL,
    
     PRIMARY KEY (`article_id`),
    
     KEY `label_id` (`label_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_set_artitle_sort` (
    
     `article_id` bigint(20) NOT NULL COMMENT '文章ID',
    
     `sort_id` bigint(20) NOT NULL COMMENT '分类ID',
    
     PRIMARY KEY (`article_id`,`sort_id`),
    
     KEY `sort_id` (`sort_id`)
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_sorts` (
    
     `sort_id` bigint(20) NOT NULL COMMENT '分类ID',
    
     `sort_name` varchar(50) NOT NULL COMMENT '分类名称',
    
     `sort_alias` varchar(15) NOT NULL COMMENT '分类别名',
    
     `sort_description` text NOT NULL COMMENT '分类描述',
    
     `parent_sort_id` bigint(20) NOT NULL COMMENT '父分类ID',
    
     PRIMARY KEY (`sort_id`),
    
     KEY `sort_name` (`sort_name`),
    
     KEY `sort_alias` (`sort_alias`)
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_user_friends` (
    
     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标识ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '用户ID',
    
     `user_friends_id` bigint(20) NOT NULL COMMENT '好友ID',
    
     `user_note` varchar(20) NOT NULL COMMENT '好友备注',
    
     `user_status` varchar(20) NOT NULL COMMENT '好友状态',
    
     PRIMARY KEY (`id`),
    
     KEY `user_id` (`user_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    

    4.2 建立视图(部分)

    某用户的所有好友视图:

    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
    ) ;
    

    五、 小结&参考资料

    小结

    数据库的设计不是很简单,一个产品除了满足用户需求,数据库的架构是非常重要的,之前做的一个志愿网站,虽然功能不是很好,基本需求能满足,但是数据库完全没有设计,没有处理,导致数据处理很糟糕。

    现在这个数据爆炸的网络时代,数据的处理及数据库的设计显得尤其重要,数据库设计师工作量也不亚于前后端工程师。

    参考资料

  • 相关阅读:
    jvm09
    jvm08
    jvm07
    求解最长公共子序列问题
    归并排序
    求解N皇后问题
    快速排序算法
    求解0/1背包问题
    求解全排列问题
    求解最大连续子序列和问题
  • 原文地址:https://www.cnblogs.com/grj001/p/12223375.html
Copyright © 2011-2022 走看看