最近老是遇到这样的问题
表结构zk
id(自增) sp_id(商品ID) zkl(折扣率) beg(起始日期) end(结束日期)
1 1 1 20060705 20060710
2 1 1 20060715 20060720
要求是插入一条记录时日期重叠的话要做一下分段处理
假如插一条
. 1 1 20060701 20060725
这条数据应该分成下面几条记录
. 1 1 20060701 20060704
. 1 1 20060711 20060714
. 1 1 20060721 20060725
插入后表zk内容如下
id(自增) sp_id(商品ID) zkl(折扣率) beg(起始日期) end(结束日期)
1 1 1 20060705 20060710
2 1 1 20060715 20060720
. 1 1 20060701 20060704
. 1 1 20060711 20060714
. 1 1 20060721 20060725
总结:也就是说某个商品在某一天只能有一个折扣率
感觉这样设计有点不合理,不知道各位老大们有没有好的设计方案,请赐教
表结构zk
id(自增) sp_id(商品ID) zkl(折扣率) beg(起始日期) end(结束日期)
1 1 1 20060705 20060710
2 1 1 20060715 20060720
要求是插入一条记录时日期重叠的话要做一下分段处理
假如插一条
. 1 1 20060701 20060725
这条数据应该分成下面几条记录
. 1 1 20060701 20060704
. 1 1 20060711 20060714
. 1 1 20060721 20060725
插入后表zk内容如下
id(自增) sp_id(商品ID) zkl(折扣率) beg(起始日期) end(结束日期)
1 1 1 20060705 20060710
2 1 1 20060715 20060720
. 1 1 20060701 20060704
. 1 1 20060711 20060714
. 1 1 20060721 20060725
总结:也就是说某个商品在某一天只能有一个折扣率
感觉这样设计有点不合理,不知道各位老大们有没有好的设计方案,请赐教
应该是某一商品在某一时段只能有一个折扣率,即折扣时段不能交叉.楼主是插入时判断时段不交叉不就可以了吗?
-----------------------------------------------
是的
如果发生了交叉,沿用旧数据还是更新成新数据?可以考虑用触发器来更新
------------------------------------
怎么用触发器更新,给个思路,谢谢
------------------------------------
怎么用触发器更新,给个思路,谢谢___________________________________________他的思路可能是将你原来的插入数据的一系列复杂过程写到trigger中,以后你insert时不用考虑是否分段, 算法如你原来的插入算法.
如
基础表
折扣率 开始时间 结束时间 失效时间
0.1 2006-7-1 2006-7-5 2006-7-3
0.2 2006-7-3 2006-7-20 NULL
业务表
业务发生时间
2006-7-2
2006-7-4
通过以上几个信息就搞定啦。具体设计与实现是你的事啦,给个思路。
-------------------------------------------
交叉的话,取并集
-------------------------------------------
取并集,如何取并集?一个时间段不是只能有一个折扣率吗?
我个人觉得,可以拿今天日期进行比较,如今天是7.19,要进行调整折扣率了,就把相应产品check一下,结束日期大于今天的,均改为今天,再插入一条新记录,起始日期是7.20,实际上是7.20生效。对于已经过去的时间,再进行设置也没有意义。
然后A供应商的苹果又在2006-07-06至2006-07-10期间打一折,一共卖了100,则应给供应商付款10元.
则商场应在2006-07-01至2006-07-10应总共付A供应商的苹果钱是100元.如果苹果折扣只有一条记录的话,那就(100+100)*0.1,只付20了!所以是要记录下商品某一段时间内的折扣率