营业时间数据库设计
我们目前正在开发一个应用程序,其中多个实体具有关联的营业时间。营业时间可能会持续数天,也可能会在一天内。
前任。星期一在6:00开放,星期五在18:00关闭。
或者
星期一在06:00开放,星期一在15:00关闭。
同样,一个实体每天可能有多组开放时间。到目前为止,我发现最好的设计是定义一个开放时间,其中包括以下内容:
StartDay,StartTime,EndDay和EndTime。
这种设计提供了所有所需的灵活性。但是,数据完整性成为一个问题。我似乎找不到解决方案来禁止跨度重叠(在数据库中)。
请分享您的想法。
编辑:数据库是Microsoft SQL Server 2008 R2
-
假设一个健壮的触发框架
在插入/更新时,您将检查新的开始或结束日期是否在任何现有范围内。如果是这样,那么您将回滚更改。
CREATE TRIGGER [dbo].[mytable_iutrig] on [mytable] FOR INSERT, UPDATE AS IF (SELECT COUNT(*) FROM inserted, mytable WHERE (inserted.startdate < mytable.enddate AND inserted.startdate > mytable.startdate) OR (inserted.enddate < mytable.enddate AND inserted.enddate > mytable.startdate)) > 0 BEGIN RAISERROR --error number ROLLBACK TRANSACTION END