sql - Oracle 检查约束

标签 sql oracle jpa

假设我有一个

table User(userid, usernama) 和一个 table Owner(ownerid, ownername) 和一个连接 表 UserOwnerMapping(userid, ownerid, IS_MASTER) 这在用户和所有者之间创建了多对多

is_master 默认为“N”。一个用户只能有一个主人。

我如何使用约束来强制不超过一个主控 对于用户?

我正在使用 Oracle。

最佳答案

您可以使用基于函数的唯一索引来实现约束:

create unique index idx on userownermapping 
    (case when is_master='Y' then userid end);

这只会在 is_master = 'Y' 时索引用户 ID,因此当 is_master = 'Y' 时强制用户 ID 是唯一的,否则不是:

SQL> create table UserOwnerMapping (userid integer, ownerid integer, IS_MASTER varchar2(1));

Table created.

SQL> 
SQL> create unique index idx on userownermapping 
  2      (case when is_master='Y' then userid end);

Index created.

SQL>     
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 2, 'Y');

1 row created.

SQL> 
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 3, 'N');

1 row created.

SQL>     
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 4, 'N');

1 row created.

SQL> 
SQL> insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 5, 'Y');
insert into UserOwnerMapping (userid, ownerid, IS_MASTER) values (1, 5, 'Y')
*
ERROR at line 1:
ORA-00001: unique constraint (MYSCHEMA.IDX) violated

关于sql - Oracle 检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538869/

相关文章:

sql - 通过将 id 分配给物化 View 来配对长字符串

java - 如何在oracle中通过java保存unicodes

sql - 两列性能问题的左外连接

sql - ORACLE - 解释计划中的 STORAGE 意味着什么?

java - Hibernate/JPA 映射同名的复合主键和外键

mysql - 简单sql建表语法错误

java - 使用准备好的语句进行 SQL 注入(inject)而不使用绑定(bind)变量?

java - 使用 JPA 和 JTA 的单元测试代码

java - Hibernate JPA、Spring MVC 和 LazyInitializationException

mysql - 和盟Mysql