我正在使用PHP/MySQL设计类似于Facebook的新闻动态系统。
我以前问过一个类似的问题,但现在我已经改变了设计,希望得到反馈。
新闻示例:
User_A评论了User_B的新相册。
"Hey man nice pictures!"
User_B 添加了一张新的照片到[他/她]的个人资料。
[show photo thumbnail]
起初,我使用过多的列实现了Obj1:Type1 | Obj2:Type2 |等等。
现在,这个设计采用了一些特殊的关键词和演员/接收者关系。我的数据库使用了一个消息表和一个包含userid、actionid、receiverid、receiverObjectTypeID的表进行连接。
以下是连接后的简化版本:
News_ID | User_ID | Message | Timestamp
2643 A %a commented on %o's new %r. SomeTimestamp
2644 B %a added a new %r to [his/her] profile. SomeTimestamp
%a = 执行操作的用户ID
%r = 接收对象
%o = 接收对象的所有者(例如相册的所有者)(如果%r是用户,则为NULL)
问题:
这是一种明智的(高效/可扩展)方式吗?
如何存储“事件预览”?例如,如果我想显示User_A对User_B的评论(就像上面和Facebook新闻动态中一样)。我考虑只编码相关数据的副本。例如,使用JSON编码评论文本或照片HTML。但这似乎很脆弱(用户可能在其他用户的动态中仍在查看照片时删除照片)
如何显示类似于:“User_B添加了4张新照片到他的个人资料。”并带有缩略图的消息?