关于多用户日历提醒功能的数据库设计

时间:2022-08-29 11:27:26

网友的一个问题:http://topic.csdn.net/u/20081224/11/65d0f78d-f8d9-4229-9a5b-038f676d2ce8.html

在日历中有个功能就是可以设置重复的事件,比如我在日历中加入一个
事件,然后可以设置这个事件按天,或者按星期,或者按月,或者按年重复提醒。
如果每个事件都是一条记录的话,肯定不可行,会导致过多的记录。但如果
是所有重复事件加个标志位使它成为一条记录的话也有个问题。就是需求中在
这一系列重复事件中我可以单独改一个事件而不影响其他事件。举个例子,我建一个事件,然后指定
这个事件在2008年12月份中的每天的12点,那我在日历中12月的每一天都可以看到这个
事件,然后我可以单独修改12月22日的事件而不影响其他的事件。这样肯定不能用一条记录。
想请教下数据库该如何设计,可以参考google日历的事件重复功能,功能差不多


我的个人看法如下:

我们出发事件的间隔是多少呢?

     欢迎访问老紫竹的网站( http://www.java2000.net )和我在CSDN的博客( http://blog.csdn.net/java2000_net ); 如果是一小时,那么我们每隔1小时进行一次检测就行了。
如果是1分钟.. 一秒钟。。。 那么如果用户量大,那是一个灾难。
需求不同,设计不同。我认为一个小时已经很不错了。

如果是每天,那就太简单了,每年才触发365次,这类功能用
Timer
或者
Quartz都可以轻松实现。

忘了说了,每个人设置的事件,当然要单独保存一条记录。
目前一般的数据库,单个表能保存几十亿的数据,你可以算算,那些能支持多少人同时使用?太恐怖了吧!
就算每个小时设置一个,一个用户一年才 365×24,
实际上,每个人平均有100个就不少了。呵呵!而且,我们可以将那些过期的数据移动到历史表里面去



最后,数据库保存方式,可以将日期分别保存为年,月,日,星期,小时
那些不需要指定某些数据的,就保存为-1.这样查询时,就可以用

你的触发应该分成年度,月度,每日,定时等分别进行查询处理。也就是不同的定时器。他们同时运行。
比如每年的12月25日,可以写成
select * fomr TaskList where month=12 and day=25 and hour=-1

这样就行了。

类似的,其它的触发也可以类似的书写。


     欢迎访问老紫竹的网站( http://www.java2000.net )和我在CSDN的博客( http://blog.csdn.net/java2000_net );