我想实现这么一个功能:用户希望在每周固定时间段内安排会议室的使用。例如:会议室A 每周一、三、五,15:00-16:00 使用。如果这样子添加的话可能存在两种情况的冲突:
1.周几不冲突,可以添加。
2.周几冲突,时间段不冲突,可以添加。
3.周几冲突,并且时间段冲突,不可以添加。例如增加一条 会议室A 每周二、三、四,14:30-15:30使用。
这就和上面一条起冲突了,所以不能入库。表格我是这么设计的   
会议安排表(会议室id,起始时间,结束时间,例会时间)
create table t_rule_time 
(
   romid             number,
   starttime         date,
   endtime           date,
   week              varchar2(10)
);
添加记录:
insert into t_meeting(meetid,starttime,endtime,week)
values(1, to_date('1111-1-1 15:00','yyyy-MM-dd hh24:mi',to_date('1111-1-1 16:00','yyyy-MM-dd hh24:mi','1,3,5')
对于时间的段的比较我自己写了个
select count(*) from t_rule_time where meetid = '1' and 
(
(输入开始时间 between starttime and endtime) or (输入结束时间 between startime and endtime)
)因为我想在插入数据写成一个存储过程,所以要用sql语句来判断,不要在程序中判断。我想问的是:
1. 像周几的这个比较上面: 1,3,5  和  2,3,4 这种比较要怎么做?
2. 时间段有没有比我这样子比较效率更高的语句?
3. 我数据库这样子设计利不利于实现这样子的功能比较?

解决方案 »

  1.   

    --多个值放入同一个字段违反关系数据库范式,一般不要这样做
    --建表
    create table t_rule_time (romid number, starttime varchar2(8), endtime varchar2(8), week varchar2(2));--插入记录
    insert into t_rule_time values(1,'16:00:00','17:00:00','1');
    insert into t_rule_time values(1,'16:00:00','17:00:00','3');
    insert into t_rule_time values(1,'16:00:00','17:00:00','5');--查询验证如果有记录,则冲突,如验证周3,16:00:00~16:50:00
    select * from t_rule_time t where t.week='3' and not ('16:50:00'<=t.starttime or '16:00:00'=>t.endtime);
      

  2.   

    select * from t_rule_time t where t.week='3' and not ('16:50:00'<=t.starttime or '16:00:00'=>t.endtime);
    更正一下,应该是“>=”