给定以下样本表结构是否有办法添加到唯一约束以确保(GUID,'Y')组合的唯一性?
应用程序逻辑 - guid
更新生成的新版本具有相同的guid
但新的luid
;并且之前变为无效('Y' - >'N')
GUID - 外部身份
LUID - 内部ID
create table id_active(
"GUID" RAW(16) NOT NULL,
"LUID" RAW(16) NOT NULL,
"IS_ACTIVE" char(1) NOT NULL CHECK ( "IS_ACTIVE" IN ('Y', 'N')),
PRIMARY KEY ("GUID", "LUID"),
--unique constraint goes here
答案 0 :(得分:11)
您可以创建一个独特的基于函数的索引,并利用Oracle不会在b树索引中索引NULL值这一事实。
CREATE UNIQUE INDEX one_active_guid
ON table_name( (CASE WHEN is_active = 'Y'
THEN guid
ELSE null
END) );