2011-07-12 77 views
6

給出以下示例表結構是否有一種方法可以添加到唯一約束以確保(GUID,'Y')組合的唯一性?定義值的唯一約束

應用程序邏輯 - 由​​更新生成一個新版本,其中​​相同但新的luid;和以前變爲無效( 'Y' - > 'N')

GUID - 外部ID
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 

回答

11

您可以創建一個獨特的基於函數的索引和利用的事實,甲骨文不索引b-tree索引中的NULL值。

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