gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:18:11 25 4
gpt4 key购买 nike

我正在尝试对 Oracle 数据库创建一个约束,内容如下:

如果column1 == someValue,则column2column3的组合对于所有具有column1 ==的条目必须是唯一的一些值

我熟悉唯一约束和检查约束的概念,并且我尝试用这些构造来表达约束。但是,我似乎找不到包含该条件的方法。这就是为什么我想知道这是否可能。

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

class MyClass {
String name;
MyClass parent;
}

class MySubClass extends MyClass {
String businessValue;
}

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

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

最佳答案

您不能通过约束来做到这一点,但您可以使用 "function-based index" 来做到这一点(联邦调查局)这样的:

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

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

关于oracle - 根据列值创建多列约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com