我有一个包含10列的Oracle表 - col1,col2,col3 .... col10 。我的要求是 - 对于一组唯一的值 col1,col2,col3,即(col1,col2,col3),只允许col4的唯一值,即使它是多次。例如:如果有10行 col1 = 3,则col2 =' A005'并且col3 = 10 ,然后对于所有10行,col4的值应该相同。
我如何在Oracle中加入此限制?
答案 0 :(得分:1)
您可以对三列(co1,col2,col3)进行唯一约束,然后将其作为外键用于单独的表(即将col4移动到另一个表)。这将消除您目前在col4中获得的重复值(这是不好的做法 - 阅读数据库的'规范化'以了解原因)。
所以 - 对于每个独特的组合(col1,col2,col3),它将映射到col4的一行 - 但是在一个单独的表中。
E.g。在sqlfiddle: http://sqlfiddle.com/#!4/ad317
编辑:修改不希望的表格列/架构
您可以向主表添加触发器,将值/更改写入单独的“链接”表: http://sqlfiddle.com/#!4/d78f6
第二个'link'表为col4(col1,col2,col3)的每个唯一值强制执行col4的唯一性。这允许您保持table1的列/值与以前相同 - 基本上将信息复制到您做控制的表中以对其进行规范化。