Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle检查约束_Sql_Oracle_Jpa - Fatal编程技术网

Sql Oracle检查约束

Sql Oracle检查约束,sql,oracle,jpa,Sql,Oracle,Jpa,假设我有一个 表用户(userid,usernama)和 表所有者(ownerid,ownername)和已联接的 表UserOwnerMapping(userid、ownerid、IS\u MASTER) 这将在用户和所有者之间创建多对多 is_主设备的默认值为“N”。一个用户只能有一个主机 如何使用约束强制不超过一个主控形状 对于用户来说 我正在使用Oracle。使userid列唯一可以解决这个问题。为什么您需要is_master 您的意思是ownerid在UserOwnerMapping中

假设我有一个

表用户(userid,usernama)
表所有者(ownerid,ownername)
和已联接的
表UserOwnerMapping(userid、ownerid、IS\u MASTER)
这将在用户和所有者之间创建多对多

is_主设备的默认值为“N”。一个用户只能有一个主机

如何使用约束强制不超过一个主控形状 对于用户来说


我正在使用Oracle。

使
userid
列唯一可以解决这个问题。为什么您需要
is_master


您的意思是
ownerid
UserOwnerMapping
中可以
null

您需要在UserOwnerMapping表上创建一个预插入触发器。
这需要检查该userid/ownerid组合是否存在IS_MASTER=Y行。

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

create unique index idx on userownermapping 
    (case when is_master='Y' then userid end);
这只会在系统为_master='Y'时索引userid,因此在系统为_master='Y'时强制userid是唯一的,否则:

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

一个用户有多个所有者,只有一个是其主用户ID ownerid已被设置为PKin。换句话说,这将阻止同一用户将不同的所有者设置为其主用户?