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。换句话说,这将阻止同一用户将不同的所有者设置为其主用户?