读书人

站内短信:怎么记录这条信息哪位用户阅

发布时间: 2011-12-10 22:22:01 作者: rapoo

站内短信:如何记录这条信息哪位用户阅读过,因为有的短信是一次发给多位用户,如何记录才能更高效呢?
站内短信问题:


比如:表 messageinfo 存储的是短信信息 :
---------------------------------

ID title 发送对象

23 关于公司制度.... 45,1001,1002,4006,2990,3544,2877
20 请假的的续 45,2003,5778,4500,3411
18 查收 6007
12 电话费 2099
11 报表 2009,3466,3122

-------------------------------------


假如我是用户ID 为 45 的用户,我看过了此条信息,要采取什么办法记录我看过了此条信息呢?

我的想法有两个:

1,在表 messageinfo 后面加一个字段: whoreadMessage, 把所有读过此信息的人的ID号全记录在里面,形如这样:45,67,2334,983

这样当用户 ID 为 45 的这读过此信息后,就把他的ID 45 写在这个字段里。

2,单独建一个表 "whoReadtable " 专门存储谁读过哪条信息,形如:

ID 信息ID号 读过此信息的用户ID

67 23 45
66 27 45
65 10 45
64 87 98
63 28 67


对这两种方法只是我想出来的,不知道效率如何,不过,我想当信息多了,用户多了后,这两种方法都有效率问题:

方法一:如果当用户真的有上万个用户,则在表 messageinfo 中 whoreadMessage字段将会存储上万人的 ID 号,这样行得通吗?


方法二:同样道理,当用户和信息达到上万的时候,将会在一个非常庞大的表里搜索谁读过哪条信息


这样的问题到底要如何解决才是正道呢?有过这方面经验的高手给指点一下,非常感谢!!


[解决办法]
我建议:把未读信息和已读信息分别存放在两个表里,已读信息表慢点就慢点咯,用户也是可以接受的,未读信息的获取是需要高效率的

再进一步,再开一个存档信息表,数据库做定期维护把超过一定时限的信息移动到存档表内
[解决办法]
为什么不把每发送信息建立单独的列呢
id title 发送对象 读否

发送对象唯一 只能是一个用户名的id
title可以重复
读否默认否
------解决方案--------------------


[消息] - <消息用户关系> - [用户]

消息(id,标题,内容,时间)
消息用户关系(消息id,用户id,已读)
用户(id,...)

这样才是一个比较“正常”的关系数据库

然后针对“消息用户关系”做优化吧
[解决办法]
更正:

消息(id,发件人用户id,标题,内容,时间)
消息用户关系(消息id,收件人用户id,已读)

或者

消息(id,标题,内容,时间)
消息用户关系(消息id,发件人用户id,收件人用户id,已读)

不知道哪个方案更好一些

读书人网 >asp.net

热点推荐