业务需要在消息中心处以不同消息模板展示给用户,比如有帖子被评论、评论被回复、被 @等等。
需要显示:
Ganxiaozhe 回复了你在 XXX 的评论 [查看]
问题:如何设计消息数据表比较优雅(最优数据读写以及查询的方案)
目前数据表设计如下
| 字段 | 类型 |
| :-------- | ------------ |
| id | int(11) |
| status | tinyint(4) |
| name | varchar(16) |
| email | varchar(256) |
| password | text |
| avatar | varchar(255) |
| 字段 | 类型 |
| :------ | :----------- |
| 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) |
| 字段 | 类型 |
| :-------- | :--------- |
| 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 [查看]
在之前的业务我是直接将信息写在了数据库里,但感觉有点占空间,所以这次准备采用模板的方法。不知道这样是否是实现的最佳方案,非常期待大家的回答,还请不吝赐教!
1
gxz OP 在我一目十行之下看了一些 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 | 创建时间 | ``` |