站内信数据库设计

核心表

站内信表 insite_messages:

字段含义
message_id消息 ID
user_id接收者
type通知类型
content内容
is_read已读状态
data关联业务 JSON
created_at创建时间

核心原则:保存业务事实,不把规则散落在应用逻辑里。

索引设计

idx_user_created:查询用户消息列表(WHERE user_id = ? ORDER BY created_at DESC)。

idx_user_unread:查询未读消息数量(WHERE user_id = ? AND is_read = 0)。

查询目标是快速定位状态、任务或资源——避免在关键路径上做大范围扫描,而不是堆更多字段。

附加数据 data 字段

data 字段存储 JSON,包含关联的业务数据:

{
  "target_id": "12345",
  "target_type": "post",
  "comment_id": "67890"
}

这样,用户点击消息时,可以直接跳转到对应的评论或动态。

data 表达的是「关联信息」,不是业务规则本身——规则应留在服务逻辑里。

创建消息的时机

什么时候创建站内信?几个场景:

  • 用户评论动态:创建一条评论通知。
  • 用户点赞动态:创建点赞通知(但要聚合,见 3.4)。
  • 系统公告:批量创建。

一句话

站内信设计要点:索引服务高频查询、data 存关联 JSON、保存事实而非规则。这是所有后续优化(未读、聚合)的数据基础。

发现内容有问题?

告诉我们哪里需要改进。