Considere a seguinte estrutura de tabela:
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'
Onde você tem um conjunto entre UserGroup e Permission, com UserGroup e Permission tendo chaves estrangeiras para Application.
Existe alguma maneira de impor integridade, para evitar a situação acima, onde os ApplicationFKs não correspondem? Não posso simplesmente remover uma das chaves estrangeiras, pois é possível ter uma permissão sem nenhum grupo de usuários e possível ter um grupo de usuários sem permissões.
Certificando-me de que entendi/elaborei corretamente o comentário/resposta vinculada de @ypercubeᵀᴹ:
A estrutura correta deve ser:
A questão será resolvida depois que você definir as chaves primárias corretamente.
Lembre-se de que FK deve apontar para a chave primária de outra tabela (ou chave exclusiva).
É legal (pelo menos em SQL) usar FKs de vários campos.