我想到的方案有两种,
1>每增加一个收到通知的人,就增加一条记录.
2>一个通知就存放一条记录.专设一个字段来记录收到记录的人,以一个比较特殊的分隔符分开收信者(比如:张三|李四|王五).
我比较想用第二种,但是如果用这种的话,我就不知道要如何实现"显示通知是否被这个人查看过"的功能(就是说,有新的通知来了,如果这个人看过了这条通知,这条后通知的后面就显示“已查看”)。
大家有没有人开发过这种东西啊!能告诉我一种好的解决方案吗?谢谢大家啦!
“我晕”,谢谢你!
我又想了一下!第二次方法也不太好。因为用特殊符号分隔的话,每次分析起来非常麻烦。
所以我又有的个方案:
3>建2个表:“通知表”和“信息查看表”,以外键“通知的ID号”相连。
“通知表”中就存放通知的内容,每条通知有一个唯一的ID号。
“信息查看表”中存放应该收到这条通知的人。有几个收件人,就有几条记录,这个收件人应该收到的是哪一条通知就对应“通知表”的ID号。(有这几个字段:通知ID号、收件人,是否查看)
假设有一个用户:SUN30。它登录后,就检查“信息查看表”,把收件人是它的记录全部显示出来(用JOIN,把它对应的ID号的通知提出来),它查看过的通知就改变“信息查看表”的“是否查看”字段。
这是我目前能想到的最好的方案了。大家还有什么更好的方案吗?
"通用的分割函数"!听起来有点意思!
是我想的太多了吗?
我在想第二种方案的时候,想到应该有(收件人、已看过的人,已删除通知的人)
假设现在有一条通知,应该有3个人(A|B|C)收到。当通知刚发出去时,在“收件人”字段中放的是“A|B|C”,“已看过的人”和“已删除通知的人”字段为空。每有一个人看过就加入到“已看过的人”字段中一个。每有一个收件人删除这条通知就在“已删除通知的人”里加入一个。
当A进入系统时,就需要判断它是否在“收件人”中,并且不在“已删除通知的人”中,还要判断它是否在”已看过的人“中。
这样数据库中的每一条记录都需要判断。
这样的效率高呢?还是查询数据库的效率高呢?但是这种方法占用的数据库空间到是最小。
嗯,是个问题,分表存放是把问题抛给了数据库(好像数据库本来就是本着方便信息存储取出而设计的),呵呵,可能我也有点本末倒置了,只想解决问题,要用A|B|C方法,也得循环上不知道多少次才能把信息分出来,关键还是看多方面的平衡吧,如是能写出个简洁有效的查询语句,把合要求的结果一次性取出,而取出量不是很大的话,和两次查询相比,应该还是有优势的(尤其是数据总量大的时候),sun30认为呢?