网站消息功能的设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vvniu
V2EX    Django

网站消息功能的设计

  •  
  •   vvniu 2014-03-29 18:45:20 +08:00 4538 次点击
    这是一个创建于 4227 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网站的用户消息分若干种,结构不太相同,与是分了几个模型,存在数据库各自的表里,结果:

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

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

    上述问题能解决么,不能的话,怎么重新设计比较好?
    7 条回复    1970-01-01 08:00:00 +08:00
    faceair
        1
    faceair  
       2014-03-29 19:17:51 +08:00
    消息通知没必要一并清除吧,倒是可以再在末尾加一个删除消息
    vvniu
        2
    vvniu  
    OP
       2014-03-29 19:28:22 +08:00
    @faceair 通知的model里有指向文章和回复的foreignkey,删除时会自动删除关联的项目
    davansy
        3
    davansy  
       2014-03-29 20:13:05 +08:00   1
    消息提醒都放一个表里面,拿一个字段来区分不同的消息类型就可以了。这样的好处是易扩展,查询一个用户的未读消息不用查询多张表,查一张就可以了。如果用户量比较大,像消息系统这样读写比较频繁的还是放redis 里面。
    vvniu
        4
    vvniu  
    OP
       2014-03-29 21:29:18 +08:00
    @davansy 基于我做的消息各不相同,最后还是决定用model类继承来做,基类就一个time字段,但是现在又有了在模版里读不到数据的问题。。。
    picasso250
        5
    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
        6
    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
        7
    vvniu  
    OP
       2014-03-31 12:48:59 +08:00
    @siteshen 最后我也是用了1,其实开始就该这样弄的,但是我担心消息都存在一张表里实在太多(一个用户10000的消息都正常,因为有关注的更新在里头)

    至于3,我看不太懂。。。其实我不太会sql。。都是用django间接处理的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2775 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 06:45 PVG 14:45 LAX 23:45 JFK 02:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86