假设我有一个
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/