类似主表、子表 添加唯一性约束

zjwsh 2013-02-22 05:29:55
大家好,我有一个问题,需要请教大家。
问题是这样,我有两张表,一张主表mian(billid,Status),一张子表 child(billid,childObject),其中billid是关联主表用的,业务是这样的,子表中的列childObject是要根据main中Status的值进行唯一性判断的,主表中Status的状态值有1,2,3,4。当在子表中插入数据时,需要排除主表中状态为1的子表数据进行唯一性约束判断。
如下列数据
主表main中数据
billid Status
A 1
B 2
子表child中数据
billid childObject
A AAA
再插入 B AAA是允许的,因为A的状态为1
插入后
子表中为
A AAA
B AAA
如果此时在插入 C AAA是不允许的,因为此时,关联的主表中有一行B的状态为2
当前我是用阻塞的方法实现,这种方法如果放到长事务中,其他人就必须等待很长的时间,我想有没有可能让数据库再提交的时候做这个判断,还请高人指教。谢谢

下面我把业务场景描述一下
我把业务场景稍微描述一下,main相当于流程审批单,child表相当于流程审批单中需要审批的对象,主表中状态分别为1 审批通过 2 流程中 3 ...,业务上规定,一个审批对象只能允许在一张正在跑的单据中,对应于主表状态 2、3...(只要不为1 就行),也就是说只有通过以后才能再在另外一张单据上。
billid就相当于主表单据号,childObject相当于审批对象。
如果在并发环境下,多个用户有可能将同一对象添加到不同的单据中,即向子表添加不同单据号、但审批对象相同,这时就要符合前面的业务规则。并发环境,相互操作的数据是不可见的,也就没法判断。我现在的方法是阻塞,但在长事务中会引起别的用户的等待。如果能在提交时有数据库进行判断最好了。
还请高手帮助
...全文
227 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjwsh 2013-02-24
  • 打赏
  • 举报
回复
自己来顶一下

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧