【发布时间】:2009-02-02 15:14:52
【问题描述】:
我正在为我的妻子编写一个日程安排应用程序,我遇到了以下问题。
我有一个可以用 ActiveRecord 术语描述的架构:
- 每个资源拥有并属于许多事件
- 每个事件拥有并属于许多资源,并且有许多时间跨度
- 每个timespan都属于一个event,并具有三个属性:day、start-time和结束时间。
我想对我的数据设置以下约束:
A. 对于每个 timespan,timespan.start-time ≤ timespan.end-time B. 对于每个event,对于每个t_a,t_b ∈ TIMESPANS(event), t_a = t_b 或 t_a.day ≠ t_b.day 或 t_a.end-time ≤ t_b.start-time 或 t_a.start-time ≥ t_b.end-time C. 对于每个resource,对于每个e_a,e_b ∈ EVENTS(resource), e_a = e_b 或者对于每个 t_a ∈ TIMESPANS(e_a) 和 t_b ∈ TIMESPANS(e_b), t_a.day ≠ t_b.day 或 t_a.end-time ≤ t_b.start-time 或 t_a.start-time ≥ t_b.end-time(A) 确保时间跨度的格式正确,(B) 确保事件不会自我冲突,(C) 确保资源不会过度调度。
目前我在应用层执行这些约束,但是,为了自学,我想知道是否可以将这些约束放在数据库层。
有什么方法可以在 SQL 中表达这些约束?
编辑:
所以我发现我想要的是 SQL 的CREATE ASSERTION 语句(至少,对于那些简单的CHECK 无法涵盖的语句),但它似乎不像任何支持它的 RDBMS(at least, as of 2005 )
【问题讨论】:
-
你在安排你的妻子? ;-)
标签: sql