BBS表分析
1035 字
5 分钟
BBS表分析
【引入】BBS表设计
- 一个项目最最最重要的不是业务逻辑的书写
- 而是前期的表设计,只要将表设计好,后续的功能就会相对顺利一些
【一】表分析概览
【1】项目表设计思路
- 先确定表
- 再确定字段
- 最后确定表与表之间的关系
【2】表分析
(1)用户表
- 继承AbstractUser
- 手机号
- 头像
- 注册时间
一个用户只能对应一个个人站点:一对一关系
(2)个人站点表
- 站点名称
- 例如 https://www.cnblogs.com/dream-ze 中的 dream-ze
- 站点标题
- 例如自己的个人简介,座右铭等
- 站点样式
- 渲染的css文件地址
(3)文章表
- 文章标题
- 文章简介(摘要)
- 文章内容
- 文章发布时间
- 关联站点
- 一对多关系
- 关联文章标签
- 多对多关系
- 关联文章分类
- 一对多关系
一个个人站点可以对应多个文章,但是一个文章不能对应多个站点:一对多关系
- 字段设计优化:
- 针对文章的评论数、点赞数、点踩数都可以跨表查询得到
- 但是页面上有很多文章,如果每一篇文章都跨表查询,效率会极低
- 针对上述三个字段,我们可以单独开设一张表用来存储相应的数据
- 文章评论数:每次评论,该字段自增一
- 文章点赞数:每次点赞,该字段自增一
- 文章点踩数:每次点踩,该字段自增一
(4)文章分类表
- 分类名称
文章分类与个人站点之间是一对多外键关系
(5)文章标签表
- 标签名称
例如开朗、乐观、阳光 …
一个文章可以有多个标签,一个标签可以给多个文章:多对多关系
标签与个人站点之间一对多关系
(6)文章点赞点踩表
- 点赞/点踩
- 关联文章
- 关联用户
(7)文章评论表
- 评论内容
- 评论时间
- 关联文章
- 关联用户
文章评论是可以分层次的,即一个评论可能会有子评论
【1】用户表(UserInfo)
- 继承 AbstractUser 表
- 拓展字段
| 字段名 | 类型 | 注释 |
|---|---|---|
| phone | BigIntegerField | 电话 |
| avatar | FileField | 头像链接 |
| create_time | DateField | 创建时间 |
| blog | OneToOneField(to=“Blog”) | 外键字段,一对一,个人站点表 |
【2】个人站点表(Blog)
| 字段名 | 类型 | 注释 |
|---|---|---|
| site_name | CharField | 站点名称 |
| site_title | CharField | 站点标题 |
| site_theme | CharField | 站点样式 |
【3】文章分类表(Category)
| 字段名 | 类型 | 注释 |
|---|---|---|
| name | CharField | 分类名 |
| blog | ForeignKey(to=“Blog”) | 外键字段,一对多,个人站点 |
【4】文章标签表(CategoryTag)
| 字段名 | 类型 | 注释 |
|---|---|---|
| name | CharField | 标签名 |
【5】文章表(Article)
| 字段名 | 类型 | 注释 |
|---|---|---|
| title | CharField | 文章标题 |
| desc | CharField | 文章摘要/文章简介 |
| content | TextField | 文章内容 |
| create_time | DateField | 发布时间 |
| up_num | BigIntegerField | 点赞数 |
| down_num | BigIntegerField | 点踩数 |
| comment_num | BigIntegerField | 评论数 |
| blog | ForeignKey(to=“Blog”) | 外键字段,一对多,个人站点 |
| category | ForeignKey(to=“Category”) | 外键字段,多对多,文章标签 |
| tags | ManyToManyField(to=“CategoryTag”) | 外键字段,一对多,文章分类 |
- 虚拟出第三张表作为多对多字段(ArticleToTag)
| 字段名 | 类型 | 注释 |
|---|---|---|
| article | ForeignKey(to=“Article”) | 外键字段,一对多,文章 |
| tag | ForeignKey(to=“CategoryTag”) | 外键字段,一对多,标签 |
- 数据库字段设计优化
- 虽然点赞数、点踩数和评论数都能从单独的表中查询得出
- 但是频繁地跨表查询效率很低
- 在上表内增加普通字段记录相关的数据
- 在下述变动的时候同步更改
【6】点赞点踩表(UpAndDown)
- 用来记录哪个用户对哪篇文章点了赞还是点了踩
| 字段名 | 类型 | 注释 |
|---|---|---|
| user | ForeignKey(to=“UserInfo”) | 用户主键值 |
| article | ForeignKey(to=“Article”) | 文章主键值 |
| is_up | BooleanField() | 是否点赞 |
【7】文章评论表(Comment)
- 用来记录哪个用户给哪篇文章写了哪些评论内容
| 字段名 | 类型 | 注释 |
|---|---|---|
| user | ForeignKey(to=‘UserInfo’) | 用户主键值 |
| article | ForeignKey(to=“Article”) | 文章主键值 |
| content | CharField() | 评论内容 |
| comment_time | DateTimeField | 评论时间 |
| parent | ForeignKey(to=“self”,null=True) | 自关联 |
- 根评论
- 直接评论当前文章内容
- 子评论
- 评论别人的评论
- 跟评论可以有多个子评论(一对多关系)
# ORM 自带的自关联 写法ForeignKey(to="self",null=True)【8】表结构图解

支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














