我正在从事一个需要我实现日历的项目。我正试图提出一个非常灵活的系统:可以处理重复事件、重复异常等。我查看了 iCal、Lotus Notes 和 Mozilla 等应用程序的架构,以了解如何着手实现这样一个系统。目前我无法决定什么是处理重复事件异常的最佳方法。我已经使用了很多数据库,但是在真正优化所有内容方面没有太多经验,所以我不确定我正在考虑的两种方法中的哪种方法在整体性能和查询/搜索能力方面是最佳的:
- 打破重复事件。因此,为重复事件更改当前行的结束日期,插入一个有异常(exception)的新行,并添加另一行继续旧序列。
- 只是添加一个异常(exception)。因此,添加一个新行,其中包含一些字段,将其指示为覆盖。
这就是我无法决定的原因。方法一将产生更多的行,因为每次编辑都需要 2 行额外的行,而第二种方法只需要一行。另一方面,我认为查找事件的查询会简单得多,因此使用第一种方法可能更快(?)。第二种方法似乎需要在应用程序服务器上进行更多计算,因为一旦获得数据,就必须删除两行的交集。我知道数据库通常是网站的瓶颈,虽然我相信你们中的很多人都认为两者都可以,因为您的项目可能永远不会变得足够大以至于效率差异真的很重要,但我仍然想实现最佳解决方案。那么你们会选择什么方法,或者你们会做一些完全不同的事情?
此外,作为旁注,我将使用 MySQL 和 PHP。如果您认为有另一种技术更适合于此,尤其是在数据库领域,请提及。
感谢您的建议。
最佳答案
事件不是永久性的,可能会发生变化或终止。
您应该为事件中的每个日期插入一行,并且在编辑重复事件时,提供编辑事件的所有实例或仅编辑一个的选项。
执行此操作时,您实际上只需要一个额外的字段来指示事件是否处于事件状态。
如果索引正确,这不会对您的查询产生重大影响。
一个例子是:
SELECT * FROM events WHERE event_id = 123 AND active = 1;
在这种情况下,您需要为 event_id 和 active 列编制索引。
关于php - 如何最好地处理重复日历事件的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481937/