簡體   English   中英

如何最好地處理重復日歷事件的異常

[英]How to best handle exception to repeating calendar events

我正在開展一個需要我實施日歷的項目。 我正在嘗試提出一個非常靈活的系統:可以處理重復事件,重復事件的異常等。我已經查看了iCal,Lotus Notes和Mozilla等應用程序的模式,以了解如何開始實施這樣一個系統。 目前我無法確定處理重復事件異常的最佳方法是什么。 我已經使用了相當多的數據庫,但沒有真正優化所有內容的經驗,所以我不確定我考慮的兩種方法在整體性能和查詢/搜索能力方面是最優的:

  1. 打破重復事件。 因此,在重復事件的當前行上更改結束日期,插入帶有異常的新行,並添加繼續舊序列的另一行。
  2. 只需添加例外。 因此添加一個新行,其中一些字段指示它為覆蓋。

所以這就是我無法決定的原因。 方法一將導致更多的行,因為每次編輯需要2個額外的行,而第二個方法僅對一行進行處理。 另一方面,我認為查找事件的查詢會更簡單,因此使用第一種方法可能更快(?)。 第二種方法似乎需要在應用程序服務器上進行更多計算,因為一旦獲得數據,就必須刪除兩行的交集。 我知道數據庫通常是網站的瓶頸,雖然我相信很多人都認為這很好,因為你的項目可能永遠不會變得足夠大,效率差異真的很重要,我仍然想實現最佳方案。 那么你們選擇什么方法,或者你會做一些完全不同的事情?

另外,作為旁注,我將使用MySQL和PHP。 如果您認為其他技術更適合這種技術,特別是在數據庫領域,請提及。

謝謝你的建議。

事件不是永久性的,可能會發生變化或終止。

您應該為事件中的每個日期插入一行,並在編輯重復事件時,提供編輯事件的所有實例或僅編輯一個事件的選項。

執行此操作時,您實際上只需要一個額外的字段來指示事件是否處於活動狀態。

正確編制索引后,這不會對您的查詢產生很大影響。

一個例子是:

SELECT * FROM events WHERE event_id = 123 AND active = 1;

在這種情況下,您需要索引event_id和活動列。

我決定只輸入一行異常並使用代碼將它們從重復集中刪除。 在我完成它之前還需要一段時間,但我會盡量在這里發布一些性能結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM