视频加载失败

BBS表分析

1035 字
5 分钟
BBS表分析

【引入】BBS表设计#

  • 一个项目最最最重要的不是业务逻辑的书写
  • 而是前期的表设计,只要将表设计好,后续的功能就会相对顺利一些

【一】表分析概览#

【1】项目表设计思路#

  • 先确定表
  • 再确定字段
  • 最后确定表与表之间的关系

【2】表分析#

(1)用户表#

  • 继承AbstractUser
  • 手机号
  • 头像
  • 注册时间

一个用户只能对应一个个人站点:一对一关系

(2)个人站点表#

  • 站点名称
  • 站点标题
    • 例如自己的个人简介,座右铭等
  • 站点样式
    • 渲染的css文件地址

(3)文章表#

  • 文章标题
  • 文章简介(摘要)
  • 文章内容
  • 文章发布时间
  • 关联站点
    • 一对多关系
  • 关联文章标签
    • 多对多关系
  • 关联文章分类
    • 一对多关系

一个个人站点可以对应多个文章,但是一个文章不能对应多个站点:一对多关系

  • 字段设计优化:
    • 针对文章的评论数、点赞数、点踩数都可以跨表查询得到
    • 但是页面上有很多文章,如果每一篇文章都跨表查询,效率会极低
    • 针对上述三个字段,我们可以单独开设一张表用来存储相应的数据
      • 文章评论数:每次评论,该字段自增一
      • 文章点赞数:每次点赞,该字段自增一
      • 文章点踩数:每次点踩,该字段自增一

(4)文章分类表#

  • 分类名称

文章分类与个人站点之间是一对多外键关系

(5)文章标签表#

  • 标签名称

例如开朗、乐观、阳光 …

一个文章可以有多个标签,一个标签可以给多个文章:多对多关系

标签与个人站点之间一对多关系

(6)文章点赞点踩表#

  • 点赞/点踩
  • 关联文章
  • 关联用户

(7)文章评论表#

  • 评论内容
  • 评论时间
  • 关联文章
  • 关联用户

文章评论是可以分层次的,即一个评论可能会有子评论

【1】用户表(UserInfo)#

  • 继承 AbstractUser 表
    • 拓展字段
字段名类型注释
phoneBigIntegerField电话
avatarFileField头像链接
create_timeDateField创建时间
blogOneToOneField(to=“Blog”)外键字段,一对一,个人站点表

【2】个人站点表(Blog)#

字段名类型注释
site_nameCharField站点名称
site_titleCharField站点标题
site_themeCharField站点样式

【3】文章分类表(Category)#

字段名类型注释
nameCharField分类名
blogForeignKey(to=“Blog”)外键字段,一对多,个人站点

【4】文章标签表(CategoryTag)#

字段名类型注释
nameCharField标签名

【5】文章表(Article)#

字段名类型注释
titleCharField文章标题
descCharField文章摘要/文章简介
contentTextField文章内容
create_timeDateField发布时间
up_numBigIntegerField点赞数
down_numBigIntegerField点踩数
comment_numBigIntegerField评论数
blogForeignKey(to=“Blog”)外键字段,一对多,个人站点
categoryForeignKey(to=“Category”)外键字段,多对多,文章标签
tagsManyToManyField(to=“CategoryTag”)外键字段,一对多,文章分类
  • 虚拟出第三张表作为多对多字段(ArticleToTag)
字段名类型注释
articleForeignKey(to=“Article”)外键字段,一对多,文章
tagForeignKey(to=“CategoryTag”)外键字段,一对多,标签
  • 数据库字段设计优化
    • 虽然点赞数、点踩数和评论数都能从单独的表中查询得出
    • 但是频繁地跨表查询效率很低
  • 在上表内增加普通字段记录相关的数据
    • 在下述变动的时候同步更改

【6】点赞点踩表(UpAndDown)#

  • 用来记录哪个用户对哪篇文章点了赞还是点了踩
字段名类型注释
userForeignKey(to=“UserInfo”)用户主键值
articleForeignKey(to=“Article”)文章主键值
is_upBooleanField()是否点赞

【7】文章评论表(Comment)#

  • 用来记录哪个用户给哪篇文章写了哪些评论内容
字段名类型注释
userForeignKey(to=‘UserInfo’)用户主键值
articleForeignKey(to=“Article”)文章主键值
contentCharField()评论内容
comment_timeDateTimeField评论时间
parentForeignKey(to=“self”,null=True)自关联
  • 根评论
    • 直接评论当前文章内容
  • 子评论
    • 评论别人的评论
  • 跟评论可以有多个子评论(一对多关系)
# ORM 自带的自关联 写法
ForeignKey(to="self",null=True)

【8】表结构图解#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Profile Image of the Author
Dream
Hello, I'm Dream.
公告
欢迎来到我的博客!爱学习爱进步。
分类
标签
最新动态
站点统计
文章
300
分类
5
标签
26
总字数
640,882
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录