2014-02-24 195 views
1

在Oracle中管理時間間隔的最佳做法是什麼?例如:我有一間會在8點15分至9點之間租用的房間。所以我有至少2個字段:dt_start和dt_end,我想。我不能在8:45到9:20之間輸入租金。那麼最好的桌子結構如何呢?謝謝Oracle - 間隔時間戳

回答

0

BEFORE INSERT TRIGGER是完成您的需求的最佳方式。

觸發時,要弄清楚新時間與您的特定房間的當前時間沒有衝突,如果是這樣,您可以Rais Error,否則讓更新發生。

+0

只要你有兩個會議試圖預訂同一個房間,就不會工作。 –

1

關於最佳實施方式尚無明確共識。答案當然取決於你的確切情況。選項如下:

  1. 對ROOM_ID和時間塊具有唯一約束的表。這隻有在應用程序使用相當大的塊分配合理的少量時間時纔是現實的。例如,一個房間最多隻能分配一個星期,一次只能分配5分鐘。但是,如果預訂是第二次,並且可以跨越一年,那麼一次預訂就需要3100萬行。
  2. 觸發器。如果可能,請避免使用此解決方案。在一致且併發的觸發器中實現此邏輯的機會非常低。
  3. 物化視圖。這是我的首選方法。例如,請參閱我的回答here
  4. 由應用程序強制執行。這隻適用於應用程序可以序列化訪問並且不允許臨時SQL的情況。
  5. 商業工具。例如,RuleGen
+1

+1除外#4 - 除非應用程序實現某種序列化。 C.F. http://jeffkemponoracle.com/2012/08/30/non-overlapping-dates-constraint/ –

+0

@JeffreyKemp感謝您的鏈接,我更新了我的答案。 –