我有与下列列的Oracle表测试仪:
- TesterID
- TesterName
- ISDEFAULT
- APPLICATION_ID
TesterID是主键。 现在,我想这只能有一个默认的测试,这意味着只有一个测试可以有calues ISDEFAULT = Y在的applicationID。
我有一个约束试了一下:
alter table Tester add constraint Tester_ISDEFAULT UNIQUE(IsDefault,Application_ID);
是否有可能使在哪里ISDEFAULT = Y的唯一关键?
感谢帮助!
不与UNIQUE
约束。 但是,你可以使用一个UNIQUE INDEX
,而不是:
CREATE UNIQUE INDEX ApplicationId_Default_Y ON tester (
CASE WHEN IsDefault = 'Y'
THEN ApplicationId
ELSE NULL
END
);
这里有一个DEMO 。
您可以使用基于函数的唯一索引,而不是约束这样做:
create unique index tester_isdefault on tester
(case when isdefault='Y' then application_id end);
由于Oracle不需要钥匙是所有空,只有在ISDEFAULT =“Y”将会出现在索引行创建索引条目。
该约束是行不通的,因为这将意味着你只能有两行对每个APPLICATION_ID - 一个与ISDEFAULT = 0和其他与ISDEFAULT = 1。
你可以执行这个逻辑与触发器。 或者说,为什么不直接执行它在你的应用程序逻辑?
测试仪上创建唯一索引tester_ui_1(解码(is_default, 'Y',0,tester_id)APPLICATION_ID)