我有以下实体
**Account**
Id
Name
**User**
Id
Name
用户可以属于多个帐户。
**AccountUser**
Id
Account_Id FK
User_Id Fk
帐户可以有多个用户组。
**AccountUserGroup**
Id
Account_Id FK
Name
用户可以是帐户用户组的成员。
**AccountUserGroupMembership**
Id
User_Id FK
AccountUserGroup FK
如何强制只将属于 AccountUserGroup 的用户添加到那些没有业务逻辑的帐户的 AccountUserGroupMembership 中。这在 SQL Server 中可能吗?
例如
用户 1 属于账户 100。 帐户 200 有一个 AccountUserGroup,ID 1000。 用户 ID 1 AccountUserGroupId 200 的 AccountUserGroupMembership 将无效。
谢谢你
到目前为止我所有的表都有 FK 约束
AccountUser - AccId 和 UserId 帐户用户组 - AccId AccountUserGroupMembership - AccUserGroupId 和 AccountUserId
首先,多对多连接表通常不需要单独的 ID 列。主键应该只是两个外键的组合。
回答你的问题:你需要使
AccountUserGroupMembership
有一个针对AccountUserGroup
的外键,而不是针对User
或Account
。而AccountUserGroup
本身需要有一个包含AccountId
的密钥(可以是辅助唯一密钥),这样它才能通过。
AccountUser (
User_Id int NOT NULL REFERENCES [User] (Id),
Account_Id int NOT NULL REFERENCES Account (Id),
PRIMARY KEY (User_Id, Account_Id)
)
AccountUserGroup (
Id int NOT NULL IDENTITY PRIMARY KEY,
Account_Id int NOT NULL REFERENCES Account (Id),
Name varchar(50) NOT NULL UNIQUE,
UNIQUE (Account_Id, Id)
)
AccountUserGroupMembership (
AccountUserGroup_Id int NOT NULL,
Account_Id int NOT NULL,
User_Id int NOT NULL REFERENCES [User] (Id),
PRIMARY KEY (Account_Id, AccountUserGroup_Id, User_Id),
FOREIGN KEY (AccountUserGroup_Id, Account_Id) REFERENCES AccountUserGroup (Account_Id, Id)
)
这意味着您只能在
AccountUserGroupMembership
表中存在一对 AccountUserGroup_Id, Account_Id
的位置插入 AccountUserGroup
行。