工作日的多个时间间隔 - 存储在数据库和流程中的最佳方法

时间:2016-08-03 12:31:38

标签: c# sql sql-server database-design calendar

我正在开展一个项目,我需要在工作日结合多个时段来产生有效的时段。

参见下面的示例

时间段1 = 太阳,星期一,星期二,星期三星期四,星期五,星期五09:00至17:00 时间段2 =太阳,星期一,星期二,星期三,星期四,星期五,坐在18:00到23:00

时间间隔不适用于粗体中的天数标记。

有效时间段=

Sun 18:00 to 23:00  
Mon 09:00 to 17:00  
Tue 09:00 to 17:00 and 18:00 to 23:00  
Wed No access  
Thu 18:00 to 23:00  
Fri 09:00 to 17:00  
Sat 09:00 to 17:00 and 18:00 to 23:00

如何以一种易于理解和处理的方式将其存储在数据库中?

1 个答案:

答案 0 :(得分:0)

MS SQL 2008 +的表结构

CREATE TABLE TimeSlots(
    id INT identity(1, 1) PRIMARY KEY
    ,groupId int
    );

CREATE TABLE TimeSlotItems(
    id INT identity(1, 1) PRIMARY KEY
    ,slotid INT FOREIGN KEY REFERENCES TimeSlots(id)
    ,weekday VARCHAR(3)
    ,startTime TIME(0)
    ,endTime TIME(0)
    );

-- 2 slots of group 10
INSERT INTO TimeSlots(groupId)
  VALUES (10), (10); 

INSERT INTO TimeSlotItems(slotid,weekday,startTime,endTime)
  VALUES 
   (1, 'Sun', '09:00' ,'17:00')
  ,(1, 'Mon', '09:00' ,'17:00')
  --...
  ,(2, 'Sun', '18:00' ,'23:00')
  ,(2, 'Mon', '18:00' ,'23:00')
;

 SELECT s.groupId, i.* 
 FROM TimeSlotItems i
 JOIN TimeSlots s ON s.Id=i.slotid;