本人只是直接参考别人的项目来实现,并没有直接做出什么需求上设计。在视频中,李老师说:我们在做原型界面时,就是在某种程度上把需求转化为具体实现了,这样就更能更方便抽象需求为实体类。
一、功能需求
博客网站,当然要有博客类,把它抽象为一个类,它的title,conten......就可以作为它的属性;分类虽然可以作为博客的属性,但把分类抽出来作为一个类,更方便管理,可以对分类进行维护、查询、管理,让分类和博客建立一个关系。博客的一条条的评论也要抽出来作为一个类,让评论和博客也建立关系。
作为个人博客网站,虽然可以不用用户,但是有用户在后台可以进行管理,做登录的时候就会有权限限制了其他人随便操作,作为安全性保证。所以需要把用户抽出作为一个类,有了用户类也,博客就可以关联上用户的一些信息。
其余在前端设计的时候,做出的友链、相册的需求就也要独立抽出来作为类。留言需求其实跟评论类似,只是缺少了博客的关联,也独立抽出来作为类。
引用oneStar博客的内容 ↓
总的下来,功能需求如下:
1.普通用户
-
查看文章信息:文章列表、推荐文章、文章标题、文章内容、发布时间、访问量以及评论等信息
-
查看分类文章:分类列表、分类文章信息
-
查看时间轴:按照文章时间发布顺序查看文章
-
搜索文章:导航栏右边搜索框根据关键字搜索
-
听音乐:网易云外链
-
留言:留言并回复
-
查看友链:查看并访问博主在友链页面添加的友链连接
-
查看相册信息:相册列表、照片名称、照片拍摄地点、时间、照片描述
2.管理员用户(栈主)
-
拥有普通用户所有功能权限
-
登录:在主页路径下加“/admin”,可进入登录页面,根据数据库的用户名和密码进行登录
-
文章管理:查询文章列表、新增文章、编辑文章、删除文章、搜索文章
-
分类管理:查询分类列表、新增分类、编辑分类、删除分类
-
友链管理:查询友链列表、新增友链、编辑友链、删除友链
-
相册管理:查询相册列表、新增照片、编辑照片、删除照片
-
消息管理:登录后恢复评论留言会显示栈主的头像信息,并能显示删除消息按键,可以对消息进行删除
二、数据库设计
整个数据库沿用oneStar的设计
1.数据表
-
博客数据表:t_blog
-
分类数据表:t_type
-
用户数据表:t_user
-
评论数据表:t_comment
-
留言数据表:t_message
-
友链数据表:t_friend
-
相册数据表:t_picture
2.实体关系
至于为什么不合原型视频一样,不把评论和博客进行物理外键关联?
可能为了防止博客被删时,导致评论的关系约束的错误吧,这样也可以保留住评论的存储。
(具体可以询问oneStar老哥)
-
数据库建立成功后的模型图
这里就不画ER图来表明了,在此就用UML类图展示各个字段的含义即可。
-
博客和 分类、用户的关系。
一个博客对应一个用户,一个用户对应多个博客。(用户可以发多篇博客)
一个博客对应一个分类,一个分类下可以有多篇博客。
-
评论类自关联关系:
实现回复需要在父评论下,评论和回复间是有着 一对多的关系。
-
留言类自关联关系
留言同理。
友链、图片数据表都是独立的。
本项目对于用户管理业务也较少,虽然有些User的一些字段在项目实现中尚未使用,但也可以先留着。
3.建表语句
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 50735
Source Host : localhost:3306
Source Schema : myblog
Target Server Type : MySQL
Target Server Version : 50735
File Encoding : 65001
Date: 29/05/2022 13:11:51
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_blog
-- ----------------------------
DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`appreciation` bit(1) NOT NULL COMMENT '是否开启赞赏',
`commentabled` bit(1) NOT NULL COMMENT '是否开启评论',
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '博客内容',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '博客描述',
`first_picture` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首图地址',
`flag` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否为原创',
`published` bit(1) NOT NULL COMMENT '是否发布',
`recommend` bit(1) NOT NULL COMMENT '是否推荐',
`share_statement` bit(1) NOT NULL COMMENT '是否开启版权',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '博客标题',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`views` int(11) NULL DEFAULT NULL COMMENT '浏览次数',
`type_id` bigint(20) NULL DEFAULT NULL COMMENT '博客的分类id',
`user_id` bigint(20) NULL DEFAULT NULL COMMENT '博客的用户id',
`comment_count` int(255) NULL DEFAULT NULL COMMENT '评论次数',
PRIMARY KEY (`id`) USING BTREE,
INDEX `FK292449gwg5yf7ocdlmswv9w4j`(`type_id`) USING BTREE,
INDEX `FK8ky5rrsxh01nkhctmo7d48p82`(`user_id`) USING BTREE,
CONSTRAINT `FK292449gwg5yf7ocdlmswv9w4j` FOREIGN KEY (`type_id`) REFERENCES `t_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK8ky5rrsxh01nkhctmo7d48p82` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_comment
-- ----------------------------
DROP TABLE IF EXISTS `t_comment`;
CREATE TABLE `t_comment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '评论主键id',
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评论者昵称',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评论者邮箱',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评论内容',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评论者头像',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`blog_id` bigint(20) NULL DEFAULT NULL COMMENT '博客id',
`parent_comment_id` bigint(20) NULL DEFAULT NULL COMMENT '父评论id',
`admin_comment` bit(1) NOT NULL COMMENT '是否是管理员',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_friend
-- ----------------------------
DROP TABLE IF EXISTS `t_friend`;
CREATE TABLE `t_friend` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '友链主键id',
`blogaddress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '友链地址',
`blogname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '友链名称',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`pictureaddress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '友链图片地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_message
-- ----------------------------
DROP TABLE IF EXISTS `t_message`;
CREATE TABLE `t_message` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '留言id',
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '留言内容',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`parent_message_id` bigint(20) NULL DEFAULT NULL COMMENT '父留言id',
`admin_message` bit(1) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_picture
-- ----------------------------
DROP TABLE IF EXISTS `t_picture`;
CREATE TABLE `t_picture` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '图片主键id',
`pictureaddress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片地址',
`picturedescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片描述',
`picturename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片名称',
`picturetime` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '拍摄地点和时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_type
-- ----------------------------
DROP TABLE IF EXISTS `t_type`;
CREATE TABLE `t_type` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户主键id',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像地址',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`type` int(11) NULL DEFAULT NULL COMMENT '用户类型',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
在Navicat构建完成后的表结构如下:
-
博客表
-
评论表
-
友链表
-
留言表
-
图片表
-
分类表
-
用户表