2011-07-12 41 views
6

cho cấu trúc bảng mẫu sau đây có cách thêm vào một ràng buộc duy nhất để đảm bảo tính duy nhất cho kết hợp (GUID, 'Y') không?Ràng buộc duy nhất với giá trị được xác định

Logic ứng dụng - cập nhật bằng guid tạo phiên bản mới với cùng một guid nhưng mới luid; và trước đó nên không hoạt động ('Y' -> 'N')

GUID - id bên ngoài
LUID - id nội

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 

Trả lời

11

Bạn có thể tạo một chỉ số dựa trên chức năng độc đáo và tận dụng thực tế là Oracle không chỉ mục giá trị NULL trong chỉ mục b-tree.

CREATE UNIQUE INDEX one_active_guid 
    ON table_name((CASE WHEN is_active = 'Y' 
         THEN guid 
         ELSE null 
         END)); 
Các vấn đề liên quan