6

次のサンプルテーブル構造を前提として、(GUID、'Y')の組み合わせの一意性を保証するために一意性制約に追加する方法はありますか?

アプリケーションロジック-更新により、同じであるが新しいguid新しいバージョンが生成されます。前は非アクティブになります('Y'->'N')guidluid

GUID-外部
IDLUID-内部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
4

1 に答える 1

11

独自の関数ベースのインデックスを作成し、OracleがbツリーインデックスのNULL値にインデックスを付けないという事実を活用できます。

CREATE UNIQUE INDEX one_active_guid
    ON table_name( (CASE WHEN is_active = 'Y'
                         THEN guid
                         ELSE null
                      END) );
于 2011-07-12T17:00:16.163 に答える