【问题标题】:Database dilemma: actors数据库困境:演员
【发布时间】:2013-07-04 09:47:29
【问题描述】:

我有不同类型的演员:

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

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

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

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

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

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

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

【问题讨论】:

    标签: mysql database database-design relationship


    【解决方案1】:

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

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

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

    • 父级(ActorID,...)
    • 子公司(ActorID,...)
    • Insurer(ActorID, ...)
    • 经纪人(ActorID,...)

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

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

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

    如果子类之间的不相交不同,即不相交的子类,那么故事就不同了。

    【讨论】:

    • 感谢您的回复。这是我最终决定走的路,我认为这是一个很好的解决方案:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多