我有一些表定义组织,用户和组的表:
- 组织(身份证,姓名)
- 用户(id,name,Organization)
- 组(id,name,Organization)
在尝试添加具有用户和组之间约束的GroupMembership表时,我感到难过:
- GroupMembership(id,User,Group)
我希望数据库强制GroupMembership表中的所有记录都具有User.Organization == Group.Organziation。从概念上讲,用户可以是其关联组织定义的任何/所有组的成员。
这有设计模式吗?
答案 0 :(得分:2)
如果您不想使用过程逻辑强制执行此规则,则可以将organization
添加到Group
和User
的主键。这会将Organization
传播到您的会员交叉表。这允许您使用声明性参照完整性来强制实施此限制。
就个人而言,我会考虑将DRI用于此特定规则。可以这样做,但解决方案的副作用可能比原来的问题更糟糕。