V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vvniu
V2EX  ›  Django

网站消息功能的设计

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

    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   ·   实用小工具   ·   3352 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:46 · PVG 12:46 · LAX 20:46 · JFK 23:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.