我在oracle上有表Tester,其中包含以下列:
TesterID是主键。 现在我希望只能有一个Default Tester,这意味着只有一个Tester可以在ApplicationID上拥有CalDe IsDefault = Y.
我尝试了约束:
alter table Tester add constraint Tester_ISDEFAULT UNIQUE(IsDefault,Application_ID);
是否可以在isdefault = Y?
的位置设置唯一键感谢您的帮助!
答案 0 :(得分:6)
没有UNIQUE
约束。但是,您可以改为使用UNIQUE INDEX
:
CREATE UNIQUE INDEX ApplicationId_Default_Y ON tester (
CASE WHEN IsDefault = 'Y'
THEN ApplicationId
ELSE NULL
END
);
这是 DEMO 。
答案 1 :(得分:1)
您可以使用基于函数的唯一索引来执行此操作,而不是这样的约束:
create unique index tester_isdefault on tester
(case when isdefault='Y' then application_id end);
由于Oracle没有为全部为空的键创建索引条目,因此只有isdefault ='Y'的行才会出现在索引中。
答案 2 :(得分:0)
该约束不起作用,因为它意味着每个Application_ID只能有两行 - 一个IsDefault = 0,另一个IsDefault = 1.
您可以使用触发器强制执行此逻辑。或者,为什么不在应用程序逻辑中强制执行它呢?
答案 3 :(得分:0)
在测试仪上创建唯一索引tester_ui_1(解码(is_default,'Y',0,tester_id),application_id)