web 站内私信该如何设计数据库表 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzkde
V2EX    数据库

web 站内私信该如何设计数据库表

  •  
  •   zzkde 2020-04-10 17:44:24 +08:00 1714 次点击
    这是一个创建于 2081 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的想法是 两张表 一张会话表,一张消息表。发送消息时查看是否有对应的会话,没有就创建一个会话。

    dialog id user1_id // 保证用户 user1_id > user2_id,这样方便查找两个用户的会话 user2_id last_time // 上一个消息发送时间 last_message // 消息内容 last_username // 消息发送者 message id dialog_id from_uer to_user content created_date has_read 

    查看一个用户的所有会话的最近消息

    select last_time, last_message, last_username from dialog where user1_id = userId or uesr2_id = userId order by last_time desc; 

    查看单独一个用户和另外一个用户的消息

    select * from message where dialog_id = id; 

    但是这样做不知道如何设计用户删除会话或者会话中的某一条消息,如果直接删除了之后,另外一个用户的消息记录也没有了

    第 1 条附言    2020-04-10 23:50:00 +08:00

    感谢 @lhx2008、@zczy 的建议,现在大致解决方案如下

    # message id content from_user to_user created_date # inbox id user_id message_id dialog_id # dialog id last_time last_message last_username user1_id user2_id 

    添加了一张收件表 inbox,发送的时候往 inbox 表插两条记录,一条发送者,一条接受者。这样删除就不会影响了。

    查看用户的所有会话的最近消息

    select last_username, last_message from inbox where inbox.user_id = userId and inbox.dialog_id = dialog_id.id order by last_time; 

    查看单个用户和另外一个用户的详细消息

    select content, from_user, to_user from inbox, dialog, message where dialog.user1_id = user1Id and dialog.user2Id and dialog.id = inbox.dialog_id and inbox.message_id = message.id order by created_date; 

    删除一个用户的一条消息

    delete from inbox where user_id = userId and message_id = messageId; 

    删除用户的一个会话

    delete from inbox where user_id = userId and dialog_id = dialogId; 
    4 条回复    2020-04-10 22:22:49 +08:00
    justseemore
        1
    justseemore  
       2020-04-10 18:00:54 +08:00
    weibo 的推拉机制
    lhx2008
        2
    lhx2008  
       2020-04-10 18:03:43 +08:00 via Android   1
    消息是消息,不包含用户。用户再关联上消息,然后设置几个标志位。
    jinsongzhao
        3
    jinsongzhao  
       2020-04-10 18:04:35 +08:00 via Android
    标记为删除状态,不做实际删除
    zczy
        4
    zczy  
       2020-04-10 22:22:49 +08:00   1
    消息存一份在消息表,再存一份在收件箱,发件箱可以不,这样收件人发件人删除就互不干扰了
    两个都删除是消息撤回
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     830 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:57 PVG 03:57 LAX 11:57 JFK 14:57
    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