如何实施'默认'只能在给定表中的单行上设置的标志?在数据库级别以及它可能是Oracle中的数据类型。
或者是否需要在应用程序中设置这样的条件,而不是在数据库级别?
答案 0 :(得分:4)
您可以使用基于函数的唯一索引,例如:
create unique index uniq_default on your_table
(case when default_flag = 'Y' then 'Y' else null end);
空值未被索引,因此case语句求值为单个值或null;因为它的唯一值只能出现一次。
SQL Fiddle demo在尝试插入标记设置为Y的第二行时显示错误。如果try to update为Y创建副本,则会发生同样的事情。
或者您可以使用具有相同逻辑和唯一约束的虚拟列,这是完全相同的。