Echo的数据库表是如何设计的

共 2059字,需浏览 5分钟

 ·

2021-02-28 19:11

Echo 这个项目数据库设计并不复杂,需要我们手动设计的只有四张表:

  • 帖子表:discuss_post
  • 评论表:comment
  • 用户表:user
  • 私信表:message

用户表

解释一下各个字段的含义:

  • id:用户的唯一标识
  • username:用户名
  • password:存储加盐加密后的密码
  • salt:随机生成的盐,用于密码的加盐加密
  • email:邮箱
  • type:用户类型
    • 0 - 普通用户(用户注册默认是普通用户)
    • 1 - 超级管理员:具有删除帖子、访问数据统计界面的权限
    • 2 - 版主:具有置顶、加精帖子权限
  • status:用户状态
    • 0 - 未激活(默认):用户点击注册后未点击邮箱中的激活链接进行验证,就会处于这个状态。未激活的用户同样无法正常使用某些功能比如发表帖子等
    • 1 - 已激活:用户点击邮箱中的激活链接进行验证成功,就会将状态从未激活改成已激活
  • activation_code:激活码。用户点击注册后,随机生成一串激活码,则在本地环境下:http://localhost:8080/greatecommunity/activation/用户id/激活码 成为该用户的激活链接;在服务器上:http://1.15.127.74/activation/用户id/激活码 成为该用户的激活链接。点击该激活链接则激活用户。激活的逻辑也很简单,就是检查一下这个链接中的用户 id 和激活码是否和数据库中存储的一样。

帖子表

解释一下各个字段的含义:

  • id:帖子的唯一标识
  • user_id:发表该帖子的用户的 id
  • title:帖子标题
  • content:帖子内容
  • type:帖子类型
    • 0 - 普通帖子(默认)
    • 1 - 置顶帖子
  • status:帖子状态
    • 0 - 正常(默认)
    • 1 - 精华:为帖子加精可以使其在热度计算中得到一定的加分
    • 2 - 拉黑:管理员删除帖子后,就将这个帖子的状态设置为拉黑
  • create_time:帖子发表时间
  • comment_count:帖子的评论数量(因为会频繁的显示帖子的信息,比如创建时间、创建人、评论数量、点赞数量等,创建时间和创建人信息这张表中已经有了,所以此处再将评论数量存进来就好。可能会有同学会问啥不把点赞数量也缓存到帖子表中,因为点赞数量是存在 Redis 中的,获取点赞数量咱连数据库都不用进的,还费劲在这存一份干啥)
  • score:热度 / 分数(用于按照热度排行帖子)

评论表

这个表应该是相对来说最复杂的一张了。因为不仅有评论(对帖子的评论),还有对评论的回复,都放在这一张表里面了。

  • id:评论/回复的唯一标识
  • user_id:用户 id(哪个用户发布了这个评论/回复)
  • entity_type:实体类型(表示这条 comment 是针对哪个类型的,如果是针对帖子的,那么这个 comment 就是评论;如果是针对评论的,那么这条 comment 就是回复)
  • entity_id:实体的 id(如果是对帖子的评论,就存储帖子的 id;如果是对评论的回复,就存储评论的 id;还有对回复的回复,存储的仍然是所属评论的 id。也就是说,「某个帖子下的所有评论,它们的 entity_id 都是这个帖子的 id。某条评论下的所有回复,它们的 entity_id 都是这条评论的 id」。)
  • target_id:目标用户 id(表示这条评论/回复是针对哪个用户的。比如用户 admin 发了一个帖子,用户 master 评论了这个帖子,那么这里的 target_id 存储的就是用户 admin 的 id。)
  • content:评论/回复的内容
  • status:评论/回复状态
    • 0 - 正常(默认)
    • 1 - 禁用(暂未使用)
  • create_time:评论/回复发布时间

私信表

这张表不仅存储用户之间的私信,也存储系统通知,不同的是,系统通知的 from_id 特定为 1。用于发送系统通知的角色(用户) SYSTEM 已内置。

下面来看私信表的结构:

  • id:私信/系统通知的唯一标识
  • from_id:私信/系统通知的发送方 id
  • to_id:私信/系统通知的接收方 id
  • conversation_id:标识两个用户之间的对话。比如用户 id 112 给 113 发消息,或者 113 给 112 发消息,这两个会话的 conservation_id 都是 112_113。这样,通过这个字段我们就能查出来 112 和 113 之间的私信往来了。当然,这个字段是冗余的,我们可以通过 from_id 和 to_id 推演出来,但是有了这个字段方便后面的查询等操作
  • content:私信/系统通知的内容
  • status:私信/系统通知的状态
    • 0 - 未读(默认)
    • 1 - 已读
    • 2 - 删除(暂未使用)
  • create_time:私信/系统通知的发送时间
浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报