Echo 这个项目数据库设计并不复杂,需要我们手动设计的只有四张表:
用户表
解释一下各个字段的含义:
- 1 - 超级管理员:具有删除帖子、访问数据统计界面的权限
- 0 - 未激活(默认):用户点击注册后未点击邮箱中的激活链接进行验证,就会处于这个状态。未激活的用户同样无法正常使用某些功能比如发表帖子等
- 1 - 已激活:用户点击邮箱中的激活链接进行验证成功,就会将状态从未激活改成已激活
- activation_code:激活码。用户点击注册后,随机生成一串激活码,则在本地环境下:
http://localhost:8080/greatecommunity/activation/用户id/激活码 成为该用户的激活链接;在服务器上:http://1.15.127.74/activation/用户id/激活码 成为该用户的激活链接。点击该激活链接则激活用户。激活的逻辑也很简单,就是检查一下这个链接中的用户 id 和激活码是否和数据库中存储的一样。
帖子表
解释一下各个字段的含义:
- 1 - 精华:为帖子加精可以使其在热度计算中得到一定的加分
- 2 - 拉黑:管理员删除帖子后,就将这个帖子的状态设置为拉黑
- comment_count:帖子的评论数量(因为会频繁的显示帖子的信息,比如创建时间、创建人、评论数量、点赞数量等,创建时间和创建人信息这张表中已经有了,所以此处再将评论数量存进来就好。可能会有同学会问啥不把点赞数量也缓存到帖子表中,因为点赞数量是存在 Redis 中的,获取点赞数量咱连数据库都不用进的,还费劲在这存一份干啥)
- score:热度 / 分数(用于按照热度排行帖子)
评论表
这个表应该是相对来说最复杂的一张了。因为不仅有评论(对帖子的评论),还有对评论的回复,都放在这一张表里面了。
- 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。)
私信表
这张表不仅存储用户之间的私信,也存储系统通知,不同的是,系统通知的 from_id 特定为 1。用于发送系统通知的角色(用户) SYSTEM 已内置。
下面来看私信表的结构:
- conversation_id:标识两个用户之间的对话。比如用户 id 112 给 113 发消息,或者 113 给 112 发消息,这两个会话的
conservation_id 都是 112_113。这样,通过这个字段我们就能查出来 112 和 113 之间的私信往来了。当然,这个字段是冗余的,我们可以通过 from_id 和 to_id 推演出来,但是有了这个字段方便后面的查询等操作
原文作者:飞天小牛肉;如有侵权,请联系管理员删除。