想要使用视图但不能拥有外键

时间:2012-08-13 13:45:32

标签: database database-design

假设我有以下实体:客户,账户,协议,子协议,子协议账户。

客户拥有零个或多个帐户,客户拥有零个或多个协议。每个协议都包含客户可以访问的特定类型的所有帐户。客户可以访问更多他自己的帐户,因此我有一个视图可以检索客户有权访问的所有帐户(包括帐户类型)。

由于协议有某种类型的帐户,我想要一个新的视图来帮助我轻松查询,这将给我所有帐户的某个协议(基本上使用第一个视图,但加入协议的帐户类型)。

然后,客户可以使用协议作为基础创建子协议。因此,客户可以选择与基础协议(子协议帐户)上的某些帐户子集创建子协议。在这里,我想要基础协议帐户的外键,以防止将帐户插入不在基本协议中的子协议。但既然这只是一种观点,那是不可能的!

我是否应该跳过外键并使用应用程序逻辑(也可能是帐户和子协议帐户之间的外键)以确保无法在非协议上插入帐户基地协议?或者我应该引入一个表“协议帐户”,实现帮助我获得协议帐户并让我的应用程序维护该表的视图?

1 个答案:

答案 0 :(得分:0)

我绝不会创建任何额外的表来强制(偶尔)关系约束 通过各种方式创建帐户和协议之间的自然关系/约束,但不要为了偶尔使用而引入任何额外的数据复杂性。
在创建子协议时向用户显示对基本协议有效的帐户子集,并在保存时仔细检查所选列表。