2016-02-09 57 views
0

我發現了幾個關於重複性事件的問題,但我還沒有涉及到接近我的需求的問題。我正在努力瞭解如何處理通知系統的週期性事件。重複發生的事件,如何存儲它們?

我知道的兩個選項至今:

  1. 商店,在它的模式和實時計算任何未來事件(像重複永遠等)的單個事件。使用cron模式或更好的RRULE的東西。

  2. 將所有未來事件存儲爲單個事件直到某個日期。

我與方案1的問題是,我需要我的活動舉辦一些其他數據,如確認,如果我有一個重複事件,我可能需要舉行多次確認每個重複事件。這會變成一種令人討厭的黑客行爲,我甚至不想考慮如何處理顯示與他們有關的其他數據的過去和未來事件。

選項2更好,因爲我可以存儲與每個相關聯的所有額外數據,即使在單個事件中也是如此。問題在於處理未來事件。首先,如果事件永遠重複,那麼我應該爲存儲事件做多少事情。如果用戶想要顯示尚未生成的未來事件,我是否只做塊並即時生成?這個選項也感覺像一個黑客。

到目前爲止,我已經讀了一些關於RRULE的信息,發現我可以使用rrule.js作爲前端和一些其他的後端包。

編輯1:爲了更好地闡明,我沒有完全設置爲使用完整的iCal格式標準,並且正在考慮僅使用RRules。但是,我可能會改變主意,因爲我仍在尋找選擇。

iCal Vevents和rrules應該如何存儲在數據庫中?

回答

2

目前還不清楚您是否只關注rrule作爲表達某些事情的方便方式,或者是否想要使用完整的iCalendar格式。

假設後面的選項1被RFC5545覆蓋:您將存儲包含基本信息的「主」VEVENT以及RRULE,對於基本事件是「例外」的每個實例,都會存儲一個VEVENT ,其中每個例外都由其RECURRENCE-ID標識。

RFC5545沒有這種事件的任何例子,但RFC5546有一些非常接近的東西https://tools.ietf.org/html/rfc5546#section-4.4.8(使用RDATE而不是RRULE,並且不需要METHOD屬性,但你明白了)。

+0

我會說你非常接近我需要的東西。目前我沒有設置使用完整的iCal格式,但可能稍後再決定。這些例子有點幫助,但還不夠。我正在努力瞭解如何改變一個事件的再發生。 VEvents應該如何存儲在數據庫中? – Cristian