0

我有不同类型的演员:

  • 父母;
  • 子公司;
  • 保险公司;
  • 经纪人;

对于每个参与者,都会有具有个人帐户和用户角色的用户。

我需要将地址和其他(实体特定,包括外键)信息注册到一个表中,这可以通过定义一个“actor_tbl”并指定具有 id 的参与者类型来完成。

但是,这四种类型的参与者是相互关联的,这意味着一个母公司可以有多个子公司,一个保险公司可以有多个子公司,一个经纪人可以有多个母公司,等等......

从这个角度来看,对我来说,为每种参与者类型创建一个单独的表并创建多对多关系以进行正确的组合会更有意义。它认为它还可以提高一般可读性并减少出错的可能性(所有实体将清楚地相互分离)。

但是,这样做会取消将具有相似特征的所有实体存储到单个表中的原则。

你会如何处理这个问题?最推荐的实现这种结构的方法是什么?

4

1 回答 1

0

可以看到 Actor 和四种 Actor 之间的超类/子类关系。这里的第一点是澄清对这种关系的约束。根据您的描述,我假设参与是强制性的(每个 Actor 也是子类的成员)并且子类是不相交的(例如,父类不能是代理,等等)。

在这种情况下,您需要四个关系,每个子类一个。

相反,如果参与是可选的(某些 Actor 可能不是任何子类的成员),您将需要一个关系 Actor(ActorID, ...) 来存储子类之间的所有共同属性(例如地址),然后一个每个子类的关系,如下所示:

  • 父母(演员 ID,...)
  • 子公司(ActorID, ...)
  • 保险公司(ActorID,...)
  • 经纪人(演员 ID,...)

对于这四个关系,ActorID 将是主键和外键引用 Actor(ActorID)。点表示特定实体特有的属性(如前所述,公共属性将在 Actor 关系中)。

对于不属于任何子类的 Actor,您只需将记录存储在 Actor 关系中。对于作为子类成员的 Actor,您将在 Actor 和特定子类关系中存储记录。

在所有情况下,子类之间的关系将根据它们的基数进行建模。

如果子类之间的不相交性不同,即不相交的子类,那么情况就不同了。

于 2013-07-04T11:52:40.390 回答