我有几个定义组织、用户和组的表:
-组织(id,name)
-用户(id、名称、组织)
-组(id、名称、组织)
尝试添加一个在用户和组之间具有约束的GroupMembership表时,我被难住了:
-GroupMembership(id、用户、组)
我希望数据库强制GroupMembership表中的所有记录都具有User.Organization==Group.Organization。从概念上讲,用户可以是其关联组织定义的任何/所有组的成员
这个有设计模式吗?
如果不想用过程逻辑强制执行此规则,则可以将organization
添加到Group
和User
的主键中。这将把Organization
向下传播到您的成员交叉表。这允许您使用声明性引用完整性来施加此限制。
就我个人而言,对于这个特定的规则,我会再三考虑使用DRI。这是可以做到的,但解决方案的副作用可能比最初的问题更严重。