标题:[求教]当通知发送给N个人时,数据库中如何存放?
只看楼主
sun30
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2005-12-16
 问题点数:0 回复次数:5 
[求教]当通知发送给N个人时,数据库中如何存放?
我遇到一个问题,假设我要把一个通知发送给一个部门的所有人(这个部门有N个人).当这条通知发送给这N个人时,这条通知在数据库中应该如何存放呢?

我想到的方案有两种,

1>每增加一个收到通知的人,就增加一条记录.
2>一个通知就存放一条记录.专设一个字段来记录收到记录的人,以一个比较特殊的分隔符分开收信者(比如:张三|李四|王五).

我比较想用第二种,但是如果用这种的话,我就不知道要如何实现"显示通知是否被这个人查看过"的功能(就是说,有新的通知来了,如果这个人看过了这条通知,这条后通知的后面就显示“已查看”)。

大家有没有人开发过这种东西啊!能告诉我一种好的解决方案吗?谢谢大家啦!
搜索更多相关主题的帖子: 数据库 通知 
2006-01-06 10:17
我晕
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-1-1
得分:0 
张三0|李四1|王五0
lz这样行不行?

一个民族的落后首先是其精英的落后。而其精英落后最显著的标志就是他们经常指责人民的落后。
2006-01-06 10:52
sun30
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2005-12-16
得分:0 

“我晕”,谢谢你!

我又想了一下!第二次方法也不太好。因为用特殊符号分隔的话,每次分析起来非常麻烦。

所以我又有的个方案:

3>建2个表:“通知表”和“信息查看表”,以外键“通知的ID号”相连。
“通知表”中就存放通知的内容,每条通知有一个唯一的ID号。
“信息查看表”中存放应该收到这条通知的人。有几个收件人,就有几条记录,这个收件人应该收到的是哪一条通知就对应“通知表”的ID号。(有这几个字段:通知ID号、收件人,是否查看)

假设有一个用户:SUN30。它登录后,就检查“信息查看表”,把收件人是它的记录全部显示出来(用JOIN,把它对应的ID号的通知提出来),它查看过的通知就改变“信息查看表”的“是否查看”字段。

这是我目前能想到的最好的方案了。大家还有什么更好的方案吗?


春天来啦!万物开始生长!
2006-01-06 11:16
我晕
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-1-1
得分:0 
多建个表查询会不会繁?这点得考虑,另外第二种方法,可以写个通用分割函数,我用到那种方法时也是写个函数,方便好多,起码可以不用多查询,感觉查询比起字符处理会慢吧(程序性能方面),实现功能以后要多想想效率,呵呵

一个民族的落后首先是其精英的落后。而其精英落后最显著的标志就是他们经常指责人民的落后。
2006-01-06 11:49
sun30
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2005-12-16
得分:0 

"通用的分割函数"!听起来有点意思!

是我想的太多了吗?
我在想第二种方案的时候,想到应该有(收件人、已看过的人,已删除通知的人)
假设现在有一条通知,应该有3个人(A|B|C)收到。当通知刚发出去时,在“收件人”字段中放的是“A|B|C”,“已看过的人”和“已删除通知的人”字段为空。每有一个人看过就加入到“已看过的人”字段中一个。每有一个收件人删除这条通知就在“已删除通知的人”里加入一个。
当A进入系统时,就需要判断它是否在“收件人”中,并且不在“已删除通知的人”中,还要判断它是否在”已看过的人“中。
这样数据库中的每一条记录都需要判断。
这样的效率高呢?还是查询数据库的效率高呢?但是这种方法占用的数据库空间到是最小。


春天来啦!万物开始生长!
2006-01-06 12:15
我晕
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-1-1
得分:0 

嗯,是个问题,分表存放是把问题抛给了数据库(好像数据库本来就是本着方便信息存储取出而设计的),呵呵,可能我也有点本末倒置了,只想解决问题,要用A|B|C方法,也得循环上不知道多少次才能把信息分出来,关键还是看多方面的平衡吧,如是能写出个简洁有效的查询语句,把合要求的结果一次性取出,而取出量不是很大的话,和两次查询相比,应该还是有优势的(尤其是数据总量大的时候),sun30认为呢?


一个民族的落后首先是其精英的落后。而其精英落后最显著的标志就是他们经常指责人民的落后。
2006-01-06 13:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-41817-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.059464 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved