Oracle强制实施唯一性

问题描述

我需要对表(约1000万行)中的特定数据实施唯一性。此示例数据说明了规则- 对于代码= X,部件号不能重复。对于任何其他代码,可以有重复的部件号。例如ID 8行不能在那儿,但ID 6行就可以了。表和部件号中有几种不同的代码,但是仅对于一个代码= X才需要唯一性。

ID      CODE        PART#
1       A           R0P98
2       X           R9P01
3       A           R0P98
4       A           R0P44
5       X           R0P44
6       A           R0P98
7       X           T0P66
8       X           T0P66

我看到的唯一方法是在插入或更新之前在表上创建触发器并检查代码= X的PART#。但是,我担心此解决方案可能会减慢对该表的插入和更新。

感谢您的帮助!

解决方法

在Oracle中,您可以为此在表达式上创建唯一索引:

create unique index myidx
    on mytable (case when code = 'X' then part# end);