考虑以下表结构:
UserGroup(ie. 'Admin')
ID = 'Admin'
ApplicationFK = 'App1'
JoinTable
UserGroupFK = 'Admin'
PermissionFK = 'Approve'
PermissionValue = 'READ'
Permission(ie. 'Approve')
ID = 'Approve'
ApplicationFK = 'App2'
UserPermission
UserFK = 'John'
PermissionFK = 'Approve'
PermissionValue = 'WRITE'
User
ID = 'John'
在 UserGroup 和 Permission 之间有一个可连接的地方,UserGroup 和 Permission 都有应用程序的外键。
有什么方法可以强制完整性,以避免出现上述 ApplicationFK 不匹配的情况?我不能简单地删除其中一个外键,因为可能有一个没有任何用户组的权限,也可能有一个没有任何权限的用户组。
确保我理解/正确阐述了@ypercubeᵀᴹ 的评论/链接答案:
正确的结构应该是:
正确定义主键后,问题将得到解决。
请记住,FK 必须指向其他表的主键(或唯一键)。
使用多字段 FK 是合法的(至少在 SQL 中)。