来自 首页 2019-09-26 03:14 的文章
当前位置: 澳门太阳娱乐手机登录 > 首页 > 正文

有关站内信的数据库设计

站内信:网址运转职员能够向单个(单发)或八个(群发)客商推送新闻,站内信其实正是向数据库中插入一条条记录。

  前天,发布了博客“群发“站内信”的实现”,获得相近网上朋友呼应,在此表示谢谢。

数据库设计:

message【站内信发件箱表】{每一回运行职员发送一条站内信(无论是单发或是群发)就能够在发件箱表中加多一条记下}

 图片 1

 表字段:ID、SendID、RecID、MessageID、Statue、DateTime

messagetext【站内信发件内容表】{每一次运维职员发送站内信的剧情就能够保留到站内信发件内容表中}

图片 2

表字段:ID、Title、Message、PData

messageuserinfo【站内信接收箱表】{顾客站内信收件箱}

图片 3

表字段:ID、SendID、RecID、MessageID、Statue、DateTime

 

  看了网络朋友的留言。发掘大家对文中的前三种景况未有啥样争议,对第三种方案争论颇多。作者在此再把自身的第二种情景详细的论述一下,和豪门调换。别的,本文的主脑首要位于“群发”(也正是点到面),至于“单发”(点到点),不在本文的斟酌之列。

工作逻辑:在营业人士发送了一条站内信后,当客商再度登入时就能够刷新历史站内信,而那个不活跃的客商就不会更新站内信。

场景:运维人士向有个别(单发)或七个(群发)客户发送站内信

加多发件内容:向messagetext站内信发件内容表中加多一条内容记录 {这里先增多messagetext站内信发件内容表发生一条记下,前面message站内信发件箱表中才有MessageID能够提到}

增添发件人发件记录:向message站内信发件箱表中增多一条发送记录 {备注:要是是单发RecID则是钦点客商的UserID,假若是群发RecID则是0。(0表示具备客户)}

客商登陆时刷新与和谐有关的站内信,并将数据拉长到messageuserinfo站内信接收箱表

  1. 询问条件:【发件人不是团结】並且【收件人是本身只怕收件人是全部人】况兼【本人收件表中不设有的记录】

    select m.id from Message as m where (m.recid='所有人' or m.recid='自己的ID') and m.sendid!='自己的ID' and m.MessageID not in (select u.messageid from MessageUserInfo as u  where u.recid='自己的ID')
    

      

  2. 将相关的站内信新闻增多到本人的收件表中,并标识未读。

    1.   将上边【查询条件】中询问出来的id信息用做查询message站内信发件箱表的条件

      select * from message  where id=上面的m.id
      

        

    2. 将赢获得message站内信发件箱表数码拉长到messageuserinfo站内信接收箱表

  3. 查询出本人的站内信记录

    select u.ID,u.RecID,m.Title,m.Message,u.Statue,m.PDate from messageuserinfo as u join messagetext as m on u.MessageID = m.ID where u.RecID='自己的ID'
    

      

     

  先看看,第两种境况。站内的客户是大批量级的(上百万)。

  经过思量,表设计修正如下

 

  表名:Message

  ID:编号;RecID:接受者编号;MessageID:站内信编号;Statue:站内信的查看情形;

  表名:MessageText 

  ID:编号;SendID:发送者编号;Message:站内信的剧情;PDate:站内信发送时间;

 

  那样,助理馆员(借使ID=1)给具备的客商发一封站内信。就在MessageText表中插入一条记下。例如:

  ID:4;SendID=1;Message=Good;PDate:2010-4-9

 

  某些客户(若是ID=7),登录系统后,发掘在MessageText的表中,有ID=4的记录,况且在Message中从不RecID=7且MessageID=4的笔录,表明那条记下那一个客户未有读过,给个提醒消息给顾客,提醒顾客看站内信。注意,此时依然未有在Message中插入记录。一旦该客商点击查看该站内信的时候,在Message中插入一条记下,如:

  ID:55;RecID=7;MessageID=4;Statue=已读

  假诺该客户删除这条站内信,则实在是修改上面那条记下:

  ID:55;RecID=7;MessageID=4;Statue=删除

  那样一来,那一个客户后一次登录的时候,由于Message表中有对应的笔录,也不会唤醒顾客看站内信。

 

  有网上朋友质疑,为何删除的时候,只是标志“删除”,那样,经过了异常的短的时间,不是浪费大量的空间吗?这一个网民说的也是有道理。可是,大家照旧要剖析现实的气象。

  当网址的客商高达百万级的时候,个中的“活跃客户”(参看上文的介绍)恐怕只占在那之中的一小部分。

  要是,网站客户200万,在那之中活跃客户40万。

  一封站内信,在MessageText中有一条记下,40万活蹦乱跳客商都看了站内信(其实,那也非常的小可能,有众多的人是不看站内信的)。在Message中插入了40万条记下。未来,不管是读书只怕是删除,在Message中保留了那40万条记下。

 

  好,假设不使用这种办法,在群发的时候,往Message中安顿200万笔录,40万生动活泼用户都看了信,况且都努力的删减了站内信(那是比相当的小或然的),Message中依然保留了160万条记下。因为,那个不活跃的顾客或许永世都不会登入了。那40万条记下(最坏的情况,因为一旦有人不看站内信,就不会变动记录)和160万条记下(最佳的事态,因为不是种种客商都会删除站内信。)相比较,那多少个尤其节省空间吧?

 

  站内信的宏图,要依附你的受众群的具体情状而定,借使您的受众群活跃度接近百分百,并且每人都很劳顿,作者的希图当然非凡。可其实中那几个绝妙状态大约是不只怕出现的。

  

  有网上好友建议,假若站内信的靶子不是一体而是一部分吧?抱歉,这几个也不在本文研商之列,你能够对自身的表进行扩充,以高达你的渴求。

 

  多谢各位网络朋友的沟通。小编在此想说的是,大家统一计划三个种类,必得得结合实情,根据实况来拟订,比能达到二个相比较杰出的现象。

本文由澳门太阳娱乐手机登录发布于首页,转载请注明出处:有关站内信的数据库设计

关键词: