【问题标题】:Oracle - Intervals timestamp [closed]Oracle - 间隔时间戳[关闭]
【发布时间】:2014-02-24 08:01:56
【问题描述】:

在 Oracle 中管理时间间隔的最佳做法是什么?例如:我有一个房间将在 8:15 到 9:00 之间出租。所以我至少有 2 个字段:dt_start 和 dt_end,我想。我不能允许在 8:45 到 9:20 之间输入租金。那么最好的表结构是怎样的呢?谢谢

【问题讨论】:

    标签: oracle datetime intervals


    【解决方案1】:

    对于实现这一点的最佳方式没有明确的共识。答案当然在很大程度上取决于您的具体情况。选项有:

    1. 对 ROOM_ID 和时间块具有唯一约束的表。这仅在应用程序使用相当大的块分配相当少的时间时才是现实的。例如,如果一个房间最多只能分配一个星期,那么一次只能分配 5 分钟。但是,如果预留到第二个,并且可以跨越一年,那么一次预留需要 3100 万行。
    2. 触发器。尽可能避免使用此解决方案。在一致且并发的触发器中实现此逻辑的机会非常低。
    3. 物化视图。这是我的首选方法。比如看我的回答here
    4. 由应用程序强制执行。这仅在应用程序可以序列化访问并且不允许临时 SQL 时才有效。
    5. 商业工具。例如,RuleGen

    【讨论】:

    【解决方案2】:

    BEFORE INSERT TRIGGER 是满足您需求的最佳方式。

    在触发器中,确定新时间与您特定房间的当前时间不冲突,如果是,您可以Rais Error,否则让更新发生。

    【讨论】:

    • 当您有两个会话尝试预订同一个房间时,它将无法工作。
    猜你喜欢
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多