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