比方說,我維護着一個事件數據庫,這個數據庫可以是企業每週工作時間(星期一至星期五:上午10點至下午7點,星期六:下午12點至下午6點,星期日:休息)每月事件(藝術公平,每月第一個星期六,上午10點 - 下午5點),以每年一度的盛事(聖誕夜慈善晚宴,7 PM-9PM)在數據庫中,如何存儲快速/優雅查詢的事件發生日期和時間範圍?
在理想情況下,我願與任何一天來查詢數據庫,說: 週四,2012年1月12日,中午12時
...,發現都在發生的所有事件:
- 經常中午週四(如業務是開放的)
- 每月第二個星期四(藝術博覽會)
- 1月12日,具體爲(呃......土庫曼斯坦紀念日)
我猜想沒有先考慮如何將這樣的日期/時間存儲在數據庫中,談論查詢構造就毫無意義。
我無法想象每週正常運行時間的概念(即使忽略邊緣情況)可以用一個單一記錄的單個字段進行建模,該字段還將建立一年一度的事件模型。最起碼,好像我至少需要五個領域:
- 啓動時間
- 時間
- 日的一週內(如星期一星期二等)
- 可選絕對每年的日期(例如5月8日)
- 可選每月發生(第四星期三)
而且我猜有沒有辦法在單排封裝,對嗎?例如,每個工作日開放的業務將有五個記錄。
而最終目標是能夠做一個相對優雅的查詢,可以查找包含其時間範圍內給定時刻的所有事件記錄。
是否需要將所有事件存儲到一個表中? – Rogach 2012-01-14 18:00:40
不一定。我現在在想,把常規工作如常規工作時間放在一個單獨的表格中,並使用單獨的字段更有意義。我抱着希望,有一個按位解決所有這些問題 – Zando 2012-01-14 20:02:14
@Zando:按位解決方案是可能的,例如['cron.c'](http://opensource.apple.com/source/cron/cron-2 /cron/cron.c),但你不需要它:範圍查詢可以是有效的(對於索引邊界或R *樹索引,O(log(N)) – jfs 2012-01-15 01:56:02