2011-07-12 11 views
6

dado la siguiente estructura de la tabla de muestra hay una manera de añadir a una restricción única para asegurar la unicidad para (GUID, 'Y') combinación?restricción único con valor definido

Lógica de aplicación - actualización por guid genera una nueva versión con el mismo guid pero el nuevo luid; y el anterior va inactiva ('Y' -> 'N')

GUID - Identificación externa
LUID - ID interno

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 

Respuesta

11

Se puede crear un índice basado en la función única y aprovechar el hecho de que Oracle no indexa valores NULL en índices b-tree.

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