我有不同类型的演员:
对于每个演员,将有用户具有个人帐户和用户角色。
我需要将地址和其他(特定于实体,包括外键)信息注册到表中,这可以通过定义一个“actor_tbl”并指定具有id的actor的类型来完成。
但是,这四种类型的行为者之间存在相互关系,这意味着一方父母可以拥有多个子公司,一家保险公司可以拥有多家子公司,一家经纪人可以拥有多家子公司等等。
从这个角度来看,为每个actor类型创建一个单独的表,并创建多对多关系以构建正确的组合对我来说更有意义。它认为它还可以提高一般可读性并减少错误的可能性(所有实体都会明显地彼此分离)。
但是,这样做会消除将具有相似特征的所有实体存储到单个表中的原则。
你会如何处理这个问题?实施此结构的最佳推荐方法是什么?
答案 0 :(得分:0)
你可以看到Actor和四种actor之间的超类/子类关系。这里的第一点是澄清对这种关系的限制。根据您的描述,我假设参与是强制性的(每个Actor也将是子类的成员)并且子类是不相交(例如,父母不能是经纪人,等等。)
在这种情况下,您需要四个关系,每个子类一个。
如果参与是可选(某些Actor可能不是任何子类的成员),那么您需要一个关系Actor(ActorID,...)来存储所有属性在子类之间共同(例如地址),然后是每个子类的一个关系,它们看起来像:
对于这四个关系,ActorID将是主键和外键引用Actor(ActorID)。点表示特定实体特有的属性(如前所述,公共属性将在Actor关系中)。
对于不是任何子类成员的Actors,只需将记录存储在Actor关系中。对于作为子类成员的Actors,您将把记录存储在Actor和特定的子类关系中。
在所有情况下,子类之间的关系将根据其基数进行建模。
如果子类之间的不相交性不同,即非不相交的子类,那么故事就不同了。