1. 项目分析
个人博客项目数据库设计要考虑到项目现在所需的功能和今后可能扩展的功能。个人博客项目可以拓展为多人博客项目或者论坛项目。
1.1 当前所需功能分析
- 博文功能:可以在网站中发表和设置博文。
- 评论功能:可以评论博文和回复其他用户的评论。
- 分类功能:添加和删除分类,给文章设置分类。
- 标签功能:添加和删除标签,给文章设置标签。
- 友链功能:展示朋友的网站链接
1.2 未来可能的功能分析
- 用户功能:用户的注册和登录,发表博文和评论。
- 交友功能:用户之间交友
2. 功能详情
2.1 博文功能
- 博文发布
- 博文发布时需要设置分类、标签。
- 博文修改
- 博文删除
- 博文评论
- 博文状态控制(是否展示)
- 博文游览点赞记录
- 博文发布、修改时间
- 博文列表中博文的简介与配图
需要如下信息
- 博文ID
- 发表用户ID
- 发表时间
- 最近更新时间
- 博文标题
- 博文简介
- 博文内容
- 博文评论的状态(0是等待审批,1是已审批,2是垃圾文章)’]
- 封面图片
- 浏览量
- 评论总数
- 点赞数
2.2 评论功能
- 评论博文
- 删除评论
- 回复评论
需要如下信息
- 评论ID
- 评论博文ID
- 发表用户ID
- 评论人名字
- 点赞数
- 评论日期
- 发表评论人所在ip
- 评论内容
- 评论的状态(0是等待审批,1是已审批,2是垃圾评论)
- 父评论ID
2.3 分类功能
- 对文章进行分类
- 添加,删除,修改分类
- 分类作为菜单
需要如下信息
- 分类ID
- 分类名称
- 类别图片
- 分类描述
- 父分类ID
2.4 标签功能
- 文章打上标签用于提示文章内容
- 文章搜索(后期可实现)
需要如下信息
- 标签ID
- 标签名称
- 标签描述
2.5 友链功能
- 展示朋友的网站
需要如下信息
- 友链ID
- 友链地址
- 友链名称
- 友链图片
- 链接是否可见
- 链接等级
- 链接描述
- 友链拥有者,在我们博客注册过的
- 友链创建时间
- 友链更新时间
- 友链与我们的关系
2.6 用户功能
- 发布博文
- 发表评论,回复评论
- 注册
- 登录
- 添加好友
需要如下信息
- 用户ID
- 用户IP
- 用户名
- 用户密码加盐
- 用户邮箱
- 用户手机号
- 用户qq
- 注册时间
- 最近一次登录时间
- 用户头像
- 用户生日
- 用户年龄
- 用户性别0是女,1是男
- 用户权限1是管理员,0是普通
2.7 交友功能
- 添加好友
需要如下信息
- 标识ID
- 用户ID
- 好友ID
- 好友备注
- 好友状态
3. 数据库图
3.1 文章表
3.2 评论表
3.3 友链表
3.4 用户表
3.5 交友表
3.6 分类表
3.7 文章分类对应表
3.8 标签表
3.9 文章标签对应表
4. mysql建表语句
CREATE TABLE `users` (
`user_id` bigint(20) PRIMARY KEY 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_telephone_number` int(11) NOT NULL COMMENT '用户手机号',
`user_qq` varchar(20) DEFAULT NULL COMMENT '用户qq',
`user_registration_time` datetime DEFAULT NULL COMMENT '注册时间',
`user_last_login_time` datetime DEFAULT NULL COMMENT '最近一次登录时间',
`user_profile_photo` varchar(255) DEFAULT NULL COMMENT '用户头像',
`user_birthday` date DEFAULT NULL COMMENT '用户生日',
`user_age` tinyint(4) DEFAULT NULL COMMENT '用户年龄',
`user_sex` int(2) DEFAULT 1 COMMENT '用户性别0是女,1是男',
`user_role` int(3) DEFAULT 0 COMMENT '用户权限1是管理员,0是普通'
);
CREATE TABLE `articles` (
`article_id` bigint(255) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '博文ID',
`author_id` bigint(20) NOT NULL COMMENT '发表用户ID',
`article_publish_date` datetime DEFAULT NULL COMMENT '发表时间',
`article_update_date` datetime DEFAULT NULL COMMENT '最近更新时间',
`article_title` text NOT NULL COMMENT '博文标题',
`article_introduce` text DEFAULT NULL COMMENT '博文简介',
`article_content` longtext NOT NULL COMMENT '博文内容',
`article_status` int(2) COMMENT '评论的状态(0是等待审批,1是已审批,2是垃圾文章)',
`article_head_img` varchar(255) DEFAULT NULL COMMENT '封面图片',
`article_views` bigint(20) NOT NULL COMMENT '浏览量',
`article_comment_count` bigint(20) NOT NULL COMMENT '评论总数',
`article_like_count` bigint(20) NOT NULL COMMENT '点赞数'
);
CREATE TABLE `comments` (
`comment_id` bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '评论ID',
`article_id` bigint(20) NOT NULL COMMENT '评论博文ID',
`user_id` bigint(20) NOT NULL COMMENT '发表用户ID',
`user_name` varchar(20) NOT NULL COMMENT '评论人名字',
`comment_like_count` bigint(20) NOT NULL COMMENT '点赞数',
`comment_date` datetime DEFAULT NULL COMMENT '评论日期',
`comment_ip` varchar(20) COMMENT '发表评论人所在ip',
`comment_content` text NOT NULL COMMENT '评论内容',
`comment_status` int(2) COMMENT '评论的状态(0是等待审批,1是已审批,2是垃圾评论)',
`parent_comment_id` bigint(20) COMMENT '父评论ID'
);
CREATE TABLE `labels` (
`label_id` bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '标签ID',
`label_name` varchar(20) NOT NULL COMMENT '标签名称',
`label_description` text NOT NULL COMMENT '标签描述'
);
CREATE TABLE `set_article_label` (
`article_id` bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '文章ID',
`label_id` bigint(20) NOT NULL
);
CREATE TABLE `set_article_sort` (
`article_id` bigint(20) NOT NULL COMMENT '文章ID',
`sort_id` bigint(20) NOT NULL COMMENT '分类ID',
PRIMARY KEY (`article_id`, `sort_id`)
);
CREATE TABLE `sorts` (
`sort_id` bigint(20) PRIMARY KEY NOT NULL COMMENT '分类ID',
`sort_name` varchar(50) NOT NULL COMMENT '分类名称',
`sort_img` varchar(255) DEFAULT NULL COMMENT '类别图片',
`sort_description` text NOT NULL COMMENT '分类描述',
`parent_sort_id` bigint(20) NOT NULL COMMENT '父分类ID'
);
CREATE TABLE `user_friends` (
`user_friends_mark_id` bigint(20) PRIMARY KEY 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 '好友状态'
);
CREATE TABLE `links` (
`link_id` bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '友链ID',
`link_url` varchar(255) NOT NULL COMMENT '友链地址',
`link_name` varchar(255) NOT NULL COMMENT '友链名称',
`link_image` varchar(255) DEFAULT NULL COMMENT '友链图片',
`link_visible` boolean NOT NULL COMMENT '链接是否可见',
`link_rating` int(11) NOT NULL COMMENT '链接等级',
`link_description` text NOT NULL COMMENT '链接描述',
`link_owner` bigint(20) DEFAULT NULL COMMENT '友链拥有者,在我们博客注册过的',
`link_data` datetime NOT NULL COMMENT '友链创建时间',
`link_updated` datetime NOT NULL COMMENT '友链更新时间',
`link_rel` varchar(255) NOT NULL COMMENT '友链与我们的关系'
);
ALTER TABLE `user_friends` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`);
ALTER TABLE `articles` ADD FOREIGN KEY (`author_id`) REFERENCES `users` (`user_id`);
ALTER TABLE `comments` ADD FOREIGN KEY (`article_id`) REFERENCES `articles` (`article_id`);
ALTER TABLE `set_article_sort` ADD FOREIGN KEY (`sort_id`) REFERENCES `sorts` (`sort_id`);
ALTER TABLE `set_article_label` ADD FOREIGN KEY (`label_id`) REFERENCES `labels` (`label_id`);
ALTER TABLE `set_article_label` ADD FOREIGN KEY (`article_id`) REFERENCES `articles` (`article_id`);
ALTER TABLE `set_article_sort` ADD FOREIGN KEY (`article_id`) REFERENCES `articles` (`article_id`);
CREATE INDEX `user_name` ON `users` (`user_name`);
CREATE INDEX `user_email` ON `users` (`user_email`);
CREATE INDEX `user_telephone_number` ON `users` (`user_telephone_number`);
CREATE INDEX `idx_author_status` ON `articles` (`article_status`);
CREATE INDEX `idx_article_publish_date` ON `articles` (`article_publish_date`);
CREATE INDEX `idx_article_id_comment_status` ON `comments` (`article_id`, `comment_status`);
CREATE INDEX `idx_parent_comment_id` ON `comments` (`parent_comment_id`);
CREATE INDEX `idx_label_name` ON `labels` (`label_name`);
CREATE INDEX `idx_label_id` ON `set_article_label` (`label_id`);
CREATE INDEX `idx_sort_id` ON `set_article_sort` (`sort_id`);
CREATE INDEX `user_id` ON `user_friends` (`user_id`);
CREATE INDEX `idx_link_visible` ON `links` (`link_visible`);
参考:
- https://www.cnblogs.com/meetrice/archive/2013/02/16/2913144.html
- https://blog.csdn.net/chachapaofan/article/details/86571657
- https://www.zhihu.com/question/268124125