SQL

营业时间数据库设计

发布于 2021-04-20 23:12:20

我们目前正在开发一个应用程序,其中多个实体具有关联的营业时间。营业时间可能会持续数天,也可能会在一天内。

前任。星期一在6:00开放,星期五在18:00关闭。

或者

星期一在06:00开放,星期一在15:00关闭。

同样,一个实体每天可能有多组开放时间。到目前为止,我发现最好的设计是定义一个开放时间,其中包括以下内容:

StartDay,StartTime,EndDay和EndTime。

这种设计提供了所有所需的灵活性。但是,数据完整性成为一个问题。我似乎找不到解决方案来禁止跨度重叠(在数据库中)。

请分享您的想法。

编辑:数据库是Microsoft SQL Server 2008 R2

关注者
0
被浏览
65
1 个回答
  • 面试哥
    面试哥 2021-04-20
    为面试而生,有面试问题,就找面试哥。

    假设一个健壮的触发框架

    在插入/更新时,您将检查新的开始或结束日期是否在任何现有范围内。如果是这样,那么您将回滚更改。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看