站内邮件的设计思路

这个是做中国电信天天生活助理的时候做的,还是大四实习的时候弄得,当时设计的时候想了半天,后来觉得这个思路还是不错的,所以记录下来,

一般的话就是用户表,消息表和用户消息表了,用户消息表主要就是记录用户是否已读或者是否删除从而使得用户表和消息表独立了起来,查的时候只需要关联查询就好了

消息表:
消息编号(message_id)、
消息标题(message_title)、
消息内容(message_content)
消息创建时间(message_createDate)、
是否审核通过(flag:通过:1,不通过:0,未审核:-1)(message_status)、
消息发送时间(message_date)、
管理员编号(admin_id);

T_Life_Umessage建立了索引 CREATE UNIQUE INDEX dm ON T_Life_UMessage(message_id,account);
删除索引 drop unique index on t_lilfe_umessage;

查询所有:SELECT * from T_Life_Message z WHERE z.message_id not in(SELECT u.message_id FROM T_Life_UMessage u WHERE u.account=‘18929563569‘ and u.isdelete = 1) and z.message_status=1 order by z.message_date desc;
================================
20016=insert into T_Life_UMessage(message_id,account,isread,isdelete) values(?,?,1,0)
================================
把isread查出来了:SELECT * FROM (SELECT * FROM T_Life_Message z WHERE z.message_id NOT IN(SELECT u.message_id FROM T_Life_UMessage u WHERE u.account=‘18922234293‘ AND u.isdelete=1) AND message_status=1) AS M LEFT JOIN (SELECT * FROM T_Life_UMessage u WHERE u.account=‘18922234293‘) AS N ON M.message_id=N.message_id ORDER BY M.message_date DESC
====================================
加上时间限定:
SELECT * FROM (SELECT * FROM T_Life_Message z WHERE z.message_id NOT IN(SELECT u.message_id FROM T_Life_UMessage u WHERE u.account=‘18027278186‘
AND u.isdelete=1) AND message_date>(SELECT create_time FROM T_Life_Admin WHERE account=‘‘
) AND message_status=1) AS M LEFT JOIN (SELECT * FROM T_Life_UMessage u WHERE u.account=‘‘
) AS N ON M.message_id=N.message_id ORDER BY M.message_date DESC
====================================
查询未读消息:SELECT * FROM T_Life_Message z WHERE z.message_id NOT in(SELECT u.message_id FROM T_Life_UMessage u WHERE u.account=‘18929563569‘) AND z.message_status=1 ORDER BY z.message_date DESC
====================================

  

用户消息表:
消息编号(message_id)、
用户账号 (account)、
是否阅读(阅读:1,未阅读:0)(isread)、
是否删除(删除:1,未删除:0)(isdelete)

思路:WAP:管理员向message表中插入数据,用户登录之后遍历用户消息表和消息表,用户只遍历审核通过(flag=1)了的消息表。查出所有的消息,只显示未删除的消息,删除消息时设置消息为已阅,所以计算出所有消息之后减去用户已经阅读的消息则是用户的新消息数量
WEB:普通管理员可以编辑和保存消息,点击提交之后超级管理员才能审核否则不显示
超级管理员登陆之后会显示审核按钮,审核通过之后普通管理员编辑的消息flag设置为1;超级管理员没有编辑和删除普通管理员新增消息的权限。普通管理员只能看到自己新 增的所有消息。

时间: 2024-10-20 10:48:26

站内邮件的设计思路的相关文章

[转载] 站内消息DB设计思路

[转载]:点击打开链接  原文标题:两年后,再议“站内信”的实现  注:仅因为在工作中用到相似的东西,故借鉴作者的文章,如有不便请告知,即刻删除 两年前,万仓一黍在博客园发了两篇关于站内信的设计实现博文,<群发“站内信”的实现>.<群发“站内信”的实现(续)>,其中阐述了他关于站内信群发的设计思想,很具有借鉴意义.他在设计时考虑到用户量和存储空间的占用等问题.当然,在他的两篇博文中强调了站内信的设计要考虑具体情况,没有理想的设计方案,他的设计只是对于群发(点到面)的解决方案. 在此

Lucene站内搜索的设计思路

正好近期部门有一个小需求需要做商品的搜索,虽然最终由于工作量等原因先做数据库搜索,我依然用刚接触的Lucene弄了一套自嗨. 首先看需求:搜索:根据商品标题和内容搜索 没错,就这么简单! 我想了想,数据源大概有以下两种: 1.根据需要搜索的字段,从数据库读取信息加载,并创建Lucene索引 2.利用爬虫定时抓取数据,并创建Lucene索引 由于是非正式的,数据库不方便访问,因此我选择利用爬虫去抓取指定网页,并清理内容来建立索引 其中,针对链接,做商品详情页的过滤,这样能保证最快速.最精准的建立我

8_1_异步设计和站内邮件通知系统

一.需求描述 1. 利用Redis做消息队列,实现一个异步化服务框架:如图: 2. 利用搭建好的框架实现异步化发送点赞信息和登录异常信息 .   二.具体diamante实现 首先搭建应用Redis做消息队列的异步化框架 1.准备 JedisAdapter.java 类中加上lpush 和 bpop的代码用来实现消息队列:加上setObject 和 getObject实现序列化与反序列的过程(将事件存入消息队列的时候要序列化,从队列中取出事件的时候需要反序列化): public long lpu

“站内信”的实现

站内信分为"点到点"和"点到面","点到点"属于私信,用户之间传递的信息,一对一传递."点到面",属于系统消息或者公共信息,属于一对多发送. 站内信的设计既要考虑到投递的准确性(也就是该收到的人能收到信息),也要考虑信息持久化存储空间占用问题,在他的第一篇博文中详细进行了介绍. 我们在此仅把第三种情况拿出来说明,也就是用户量为百万级,活跃用户只占其中的一部分. 数据库的设计: 表名:Message ID:编号:SendID:发

ASP.NET 实现站内信功能(点对点发送,管理员群发)

正好这段时间在研究这个功能,还是得感谢这位大神,没有他的引路,我就不可能把站内信做出来. http://www.cnblogs.com/grenet/archive/2010/03/08/1680655.html 哈哈,再次感谢. 我们先来说说单点传送站内信,所谓的单点传送,就是用户与用户之间的短信发送,这里的用户可以是一个人,也可以是多个人, 上面的文章大家如果看了的话,想必有一个疑问,就是用户的阅读状态怎么定义? 我这里给大家一种解决方案,再建立一张表,也就是说,建立一张用户阅读状态表,因为

【设计用例】站内信

[站内信]也被称作[站内消息],如果验证它呢?需要考虑的无非是2个方面: 功能验证 - 是否覆盖了所有的场景(开发人员会在代码里注释出来 会触发站内消息的场景 把这些沟通并记录下来 以免设计用例有所遗漏) 样式验证 - 站内消息里面包含的文字描述是否得到了正常的展示

Modern OpenGL用Shader拾取VBO内单一图元的思路和实现(3)

Modern OpenGL用Shader拾取VBO内单一图元的思路和实现(3) 到上一篇为止,拾取一个VBO里的单个图元的问题已经彻底解决了.那么来看下一个问题:一个场景里可能会有多个VBO,此时每个VBO的gl_VertexID都是从0开始的,那么如何区分不同VBO里的图元呢? 指定起始编号 其实办法很简单.举个例子,士兵站成一排进行报数,那么每个士兵所报的数值都不同:这时又来了一排士兵,需要两排都进行报数,且每个士兵所报的数值都不同,怎么办?让第二排士兵从第一排所报的最后一个数值后面接着报就

站内信

http://daihaixiang.blog.163.com/blog/static/3830134201111155381735/ 如果一个网站到了百万级的用户量了,那我不得不膜拜该网站和网站经营者了,因为经营这样的网站一直是笔者的梦想:)好了,回归正题,如果这样的系统 放你面前,让你设计一个站内信群发数据库,你该何去何从,总之,上面两种常规的办法肯定是行不通了的,因为庞大的数据量会让消息表撑爆,即使你分区也无济 于事.这时候作为一个系统架构师的你,可能不仅仅要从技术的角度去考虑这个问题,更

Modern OpenGL用Shader拾取VBO内单一图元的思路和实现

Modern OpenGL用Shader拾取VBO内单一图元的思路和实现 什么意思? 拾取 最简单的理解拾取的方式大概是到(http://www.yakergong.net/nehe/course/tutorial_32.html)玩一下NEHE的拾取游戏.用鼠标点击飞过屏幕的物体就会击中它,这就是拾取的意义. Legacy OpenGL VS Modern OpenGL Legacy OpenGL就是使用glTranslate.glRotate.glScale.gluLookAt.glPers