网站消息表设计问题

2020-04-20 18:06:07 +08:00
 gxz

业务需要在消息中心处以不同消息模板展示给用户,比如有帖子被评论、评论被回复、被 @等等。

需要显示:

Ganxiaozhe 回复了你在 XXX 的评论 [查看]

问题:如何设计消息数据表比较优雅(最优数据读写以及查询的方案)

目前数据表设计如下

user_basic 用户数据表部分:
| 字段      | 类型         |
| :-------- | ------------ |
| id        | int(11)      |
| status    | tinyint(4)   |
| name      | varchar(16)  |
| email     | varchar(256) |
| password  | text         |
| avatar    | varchar(255) |
comment 评论数据表:
| 字段    | 类型         |
| :------ | :----------- |
| id      | int(11)      |
| sort    | varchar(32)  |
| attr    | varchar(255) |
| type    | tinyint(4)   |
| uid     | int(11)      |
| comment | text         |
| time    | datetime     |
| ppid    | int(11)      |
| pid     | int(11)      |
| puid    | int(11)      |
user_msg 消息数据表:
| 字段      | 类型       |
| :-------- | :--------- |
| ID        | int(11)    |
| TYPE      | tinyint(4) |
| STATUS    | tinyint(4) |
| UID       | int(11)    |
| CRT_ID    | int(11)    |
| CTR_DT    | int(11)    |
| SOURCE_ID | int(11)    |

目前实现为 PHP 后端取得 MySQL 数据后,以数组对象传给前端(一次取 20 条最新消息)。依靠 user_msg 中的 TYPE 判断使用哪个模板类型,若为评论(1),那么则通过 CRT_ID 向 user_basic 取得用户名和头像。再根据 SOURCE_ID 向 comment 取得具体页面及内容。

问题是这样需要递归多次请求,以及如果后面需追加模板也比较繁琐,比如问答的:

Ganxiaozhe 回答了你提出的问题 XXX [查看]

在之前的业务我是直接将信息写在了数据库里,但感觉有点占空间,所以这次准备采用模板的方法。不知道这样是否是实现的最佳方案,非常期待大家的回答,还请不吝赐教!

2566 次点击
所在节点    MySQL
1 条回复
gxz
2020-04-22 19:54:23 +08:00
在我一目十行之下看了一些 MySQL 性能的书籍之后,问题暂时解决惹。
现在消息显示根据不同模板( TYPE 值)方式如:
> XXX 回复了你的评论
> (评论前 90 字内容)
> [查看]

XXX 根据 `CRT_UID` 在 `user_basic` 中取得用户名和头像,
回复了你的评论 根据 `TYPE` 得到,
(评论前 90 字内容)为 `SRE_DETAIL` 字段
查看操作根据需要通过 `SRE_ID` 在指定表中取得数据。( TYPE )

msg 表如下:
```
| 名字 | 类型 | 注释 |
| :--------- | :----------- | :------- |
| ID | int(11) | |
| TYPE | tinyint(4) | |
| STATUS | tinyint(4) | |
| UID | int(11) | 接收者 |
| SRE_ID | int(11) | 来源 ID |
| SRE_DETAIL | varchar(255) | 来源标题 |
| CRT_UID | int(11) | 创建人 |
| CRT_DT | datetime | 创建时间 |
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX