Consider the following table structure:
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'
Where you have a jointable between UserGroup and Permission, with both UserGroup and Permission having foreign keys to Application.
Is there any way to enforce integrity, to avoid the situation above, where the ApplicationFKs don't match? I cannot simply remove one of the Foreign Keys, as it is possible to have a Permission without any UserGroups, and possible to have a UserGroup without any permissions.