设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 百科 > 正文

oracle – 根据列值创建多列约束

发布时间:2021-01-21 14:17 所属栏目:128 来源:网络整理
导读:我正在尝试在oracle数据库上创建一个约束,该约束说明如下: 如果column1 == someValue,则column2和column3的组合必须对于column1 == someValue的所有条目都是唯一的 我熟悉unique和check约束的概念,并且我尝试用这些结构表达约束.但是,我似乎找不到包含条件

我正在尝试在oracle数据库上创建一个约束,该约束说明如下:

如果column1 == someValue,则column2和column3的组合必须对于column1 == someValue的所有条目都是唯一的

我熟悉unique和check约束的概念,并且我尝试用这些结构表达约束.但是,我似乎找不到包含条件的方法.这就是为什么我想知道它是否可能.

我想要创建约束的表是由Hibernate映射以下类层次结构创建的(为简洁起见,省略了大多数属性):

class MyClass {
     String name;
     MyClass parent;
}

class MySubClass extends MyClass {
     String businessValue;
}

使用单个表策略映射类,并为每种类型使用不同的鉴别器值.客户要求对于MySubClass的所有实例,name和parent的组合必须是唯一的(column1将是鉴别器值).通过表约束在父类上强制执行这样的约束会很容易.但是,该约束必须仅适用于MySubClass.

在使用Hibernate Validator等框架将数据输入数据库之前,可以验证数据.但由于验证无论如何都需要数据库访问,因此数据库约束似乎是更节省性能的方法.

解决方法

你不能用约束来做到这一点,但你可以使用像这样的 “function-based index”(FBI)来做到这一点:

create unique index mytable_idx on mytable
   ( case when column1 = 'somevalue' then column2 end,case when column1 = 'somevalue' then column3 end
   );

这仅为column1 =’somevalue’的行创建唯一索引条目,因此其他行可以包含重复项,但这些不能.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读