2010-06-13 30 views
10

我有一個有趣的問題,試圖在數據庫中表示覆雜的計劃數據。作爲指導原則,我需要能夠表示iCalendar - ics - 格式可以表示的全部內容,但需要表示在數據庫中。我沒有實際執行任何與ics有關的任何事情,但它提供了我需要能夠爲我的特定項目建模的規則類型的良好範圍。代表數據庫中的複雜計劃重現

我需要允許基於每天多次,一週中的幾天,一個月中的某一週,一個月中的某一週,或這些組合中的某個組合來允許表示單個事件或重複事件。例如,每年11月的第三個星期四或每年12月25日,或從11月2日開始的每兩個星期,直到第二年的9月8日。

我不在乎插入效率,但查詢效率是至關重要的。我最常做的操作是提供單個日期/時間或日期/時間範圍,並嘗試確定定義的時間表是否與日期/時間範圍的任何部分相匹配。其他操作可能會更慢。例如,從2010年1月15日上午10點到2010年1月15日上午11:00,找到至少部分時間匹配的所有時間表。 (即時間表涵蓋10:30 - 11:00仍然匹配。)

有什麼建議嗎?我查看了How would one represent scheduled events in an RDBMS?,但它並未涵蓋我想要建模的重複規則類型的範圍。

回答

1

我做了類似的事情的方式是有兩張桌子。如果事件沒有重複出現的模式,那麼只需存儲日期,開始時間和結束時間。您的查詢會檢查您搜索的時間是否大於任何條目的開始時間,並且是否小於或等於該同一事件的結束時間。

對於重複發生的事件,我不太熟悉iCalendar如何存儲重複次數,但是如果您在一週中的某一天存儲了每個事件(如果重複發生多個事件,您可能必須爲單個事件設置多行每週一天),然後以與上表幾乎相同的方式進行搜索。對於像本週第三個星期二那樣的陌生人重複發生,您可以有一個額外的專欄來描述特定的情況。如果你能更多地告訴我ics如何代表這種復發,我可能會給你一個更好的答案。

我希望有幫助。我現在沒有太多時間。如果你想討論這個,你可以稍後與我聯繫。我目前在密蘇里州,所以我下週的可用性會變得不穩定。

-1

這可能是一個微不足道的解決方案,但添加一個定義事件重現的列(即每個 x周,每年,每週等)並將其用作結果標準的缺點是什麼?