具有定义值的唯一约束

Kon*_*tin 6 sql oracle check-constraints

给定以下样本表结构是否有办法添加到唯一约束以确保(GUID,'Y')组合的唯一性?

应用程序逻辑 - 通过guid生成具有相同guid但新的新版本来更新luid; 以前变为非活动状态('Y' - >'N')

GUID - 外部标识
LUID - 内部标识

 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
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 11

您可以创建基于函数的唯一索引,并利用Oracle不会在b树索引中索引NULL值的事实.

CREATE UNIQUE INDEX one_active_guid
    ON table_name( (CASE WHEN is_active = 'Y'
                         THEN guid
                         ELSE null
                      END) );
Run Code Online (Sandbox Code Playgroud)