2011-07-12 37 views
6

tanımlanmış değeri ile benzersiz sınırlama (GUID, 'Y') birleşimi için benzersizliği sağlamak için benzersiz bir kısıtlama eklemek için bir yol var mı?Aşağıdaki örnek tablo yapısına göre

Uygulama mantığı - guid ile güncelleştirme aynı guid ile yeni bir sürüm oluşturur, ancak yeni luid; ve önceki etkinlik olmazsa ('Y' -> 'n')

GUID - harici kimlik
LUID - iç kimliği Benzersiz bir fonksiyon tabanlı bir dizin oluşturmak ve gerçeği olduğunu yararlanabilirim

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 

cevap

11

Oracle B-ağacı dizinlerinde NULL değerlerini endekslemez.

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