oracle中的约束

cry*_*ill 5 oracle constraint

我正在尝试使用 oracle 对这样的事情进行建模:

一个账号可以有1~5个成员

所以我将有一个帐户表和一个带有帐户 FK 的成员表。但是可以检查帐户的成员是否少于 5 人吗?

我已经尝试过约束和触发器,但 oracle 不允许在约束或触发器条件中进行子查询,例如

CHECK( SELECT ...) 或者 IF count(*) >= 5

这让事情变得困难。

ype*_*eᵀᴹ 4

一种方法是添加一memberNo列并将每个帐户限制为 5 个可能的值:

CREATE TABLE members
( -- ...
  accountID NUMBER REFERENCES accounts (accountID),
  memberNo NUMBER NOT NULL,
  -- ...,
  UNIQUE (accountID, memberNo),
  CHECK (memberNo IN (1,2,3,4,5))
) ;
Run Code Online (Sandbox Code Playgroud)

当然,这会在插入表时增加提供和保留该列值的额外负担(删除会带来额外的复杂性。例如,如果您删除memberNo=2某个帐户的成员,是否应该减少 3 个较高的数字,或者是否会出现复杂性)将在以后的插入中处理。)