我正在尝试使用 oracle 对这样的事情进行建模:
一个账号可以有1~5个成员
所以我将有一个帐户表和一个带有帐户 FK 的成员表。但是可以检查帐户的成员是否少于 5 人吗?
我已经尝试过约束和触发器,但 oracle 不允许在约束或触发器条件中进行子查询,例如
CHECK( SELECT ...)
或者 IF count(*) >= 5
这让事情变得困难。
一种方法是添加一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 个较高的数字,或者是否会出现复杂性)将在以后的插入中处理。)