网站消息功能的设计

2014-03-29 18:45:20 +08:00
 vvniu
网站的用户消息分若干种,结构不太相同,与是分了几个模型,存在数据库各自的表里,结果:

1、给用户展示的时候,怎把这多张表都按照时间排序了放到一块啊(每张表里都有time字段)

2、如果作为管理员在admin里删除一条文章或回复的,相关的消息通知也会被删除,但是用户自身有个“x条未读提醒”,这个数字并不会发生变化,因为这只是一个计数用的玩意,而我一开始的设计是你点击了消息,未读数才会发生变化。。。。

上述问题能解决么,不能的话,怎么重新设计比较好?
4129 次点击
所在节点    Django
7 条回复
faceair
2014-03-29 19:17:51 +08:00
消息通知没必要一并清除吧,倒是可以再在末尾加一个删除消息
vvniu
2014-03-29 19:28:22 +08:00
@faceair 通知的model里有指向文章和回复的foreignkey,删除时会自动删除关联的项目
davansy
2014-03-29 20:13:05 +08:00
消息提醒都放一个表里面,拿一个字段来区分不同的消息类型就可以了。这样的好处是易扩展,查询一个用户的未读消息不用查询多张表,查一张就可以了。如果用户量比较大,像消息系统这样读写比较频繁的还是放redis 里面。
vvniu
2014-03-29 21:29:18 +08:00
@davansy 基于我做的消息各不相同,最后还是决定用model类继承来做,基类就一个time字段,但是现在又有了在模版里读不到数据的问题。。。
picasso250
2014-03-30 06:08:07 +08:00
mysql union 可以合并表查询。
but I could not see any necessary to put messages in different tables.
siteshen
2014-03-31 09:45:19 +08:00
1. 用一张表,notification(from_user_id, to_user_id, type, object_type, object_id, sent_at, read_at, params),其中type标识类别(follow, comment, reply etc.),object_type和object_id唯一标识了和这条消息相关联的对象,params-JSON字段暂保留吧,指不定某些奇葩的通知模板中要用这个;

2. 删除文章(article_id)之后,执行:
delete * from notification where content_type = 'article' and object_id = {article_id};

3. 至于消息数,select count(*) form notification where read_at is null(折叠我吧)。
vvniu
2014-03-31 12:48:59 +08:00
@siteshen 最后我也是用了1,其实开始就该这样弄的,但是我担心消息都存在一张表里实在太多(一个用户10000的消息都正常,因为有关注的更新在里头)

至于3,我看不太懂。。。其实我不太会sql。。都是用django间接处理的

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

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

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

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

© 2021 V2EX