本文介绍了具有重复事件的数据库的优化设计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个php日历应用程序.如果要创建正常,每周,每月和每年的事件,此软件的最佳数据库设计是什么?

I want to create a php calender application. What is the optimal database design for this software if I want to create normal, weekly, monthly and yearly events.

推荐答案

我只是为事件的每次重复创建一个条目,直到某个范围.但是,这意味着您将需要另一个表,如果它们扫描的日期超出了您的预期日期,则可以使用该表来计划日期.即,您将需要一个事件表,该表包含一个重复发生的事件(1月1日,1月8日,1月15日...到12月)的记录,以及一个可用于记录未来年份的记录(开始)日期:1月1日;重复:7;至:2011),以便在2012年初(或一旦用户请求查看2012+月份的视图)就可以生成将来的事件.

I would just create an entry for each recurrence of the event, out to some horizon. However, it means that you'll need another table that you can use to project out the dates if they scan past your horizon date. I.e., you'll need an events table that contains one record for each occurrence of a repeated event (Jan 1, Jan 8, Jan 15, ... through December), and a table with each record available to seed future years (start date: Jan 1; repeat: 7; through: 2011) so that at the start of 2012 (or as soon as the user requests a view of a 2012+ month) you can generate the future events.

这有两个很大的缺点:

  1. 您的数据库具有全年数据.但是,如果增加一整年的数据量会破坏您的性能,则您的系统可能功能不足. (似乎要求日历应用程序能够处理很多年的日期)
  2. 在事件范围结束时,您需要为重复发生的事件生成将来的日期.

大于缺点的优点(IMO):

The advantages (IMO) that outweigh the disadvantages:

  1. 显示日历时更轻松的数学运算.使用上面的Tim方法,如果用户加载了2011年12月18日的内容,那么您将如何计算当天应该放置哪些重复发生的事件?每次显示日期时,您都将不得不循环遍历每个重复事件.折衷方案是缺点#1,我认为这是必须重新执行这些计算的更好的解决方案.
  2. 您可以编辑事件的特定实例.使用蒂姆的方法,如果在假日开会,并且用户将其更改为前一天,您甚至会怎么做?使用此处介绍的每事件一个条目"方法,您可以修改该事件的记录,从而轻松地在日历中移动单个事件.

这篇关于具有重复事件的数据库的优化设计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-03 23:00
查看更多