【发布时间】:2016-10-01 11:51:33
【问题描述】:
假设有一个包含 startDatetime 和 endDatetime 的经理(或 HR)列表的约会预订表,那么如何仔细设计该表,以使其不接受与同一经理重叠的下一个条目,如果他/她有与其他人约会。
如果
经理:A
与2016-01-01 11:00 to 2016-01-01 14:00 和Employee-1 有约会
那么如果Employee-2(或其他员工)尝试从20-16-01-01 13:00 to 16:00预约,那么它不应该允许。
注意:这是关于设计表格的,因此不鼓励使用触发器/过程。
【问题讨论】:
-
要强制执行此约束,您需要触发器或用户定义的函数(至少在大多数数据库中)。
-
如果这真的是一个 SQL 面试问题,您可以简单地回答在设计时这是不可能的。
-
你可以在 SQL Server 中执行此操作,如果你还对空闲时间段进行建模,具有将每个时间段链接到其前任和后继的交叉引用外键,并编写一些真正可怕的 @987654325 @ 管理插入/删除的语句(通常情况下,您需要通过更新一个、插入一个新行并插入新约会来分割一个空闲期,所有这些都在一个语句中,以便外键保持满足)。这是可行的,但通常成本高于价值。
标签: sql create-table check-constraints