gpt4 book ai didi

mysql - 数据库困境: actors

转载 作者:行者123 更新时间:2023-11-30 01:30:59 25 4
gpt4 key购买 nike

我有不同类型的转换:

  • parent ;
  • 子公司;
  • 保险公司;
  • 经纪人;

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

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

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

从这个角度来看,为每种 Actor 类型创建一个单独的表并创建多对多关系以进行正确的组合对我来说更有意义。它认为它还可以提高总体可读性并减少错误的可能性(所有实体将彼此明确分开)。

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

你会如何解决这个问题?实现此结构的最推荐方法是什么?

最佳答案

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

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

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

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

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

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

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

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

关于mysql - 数据库困境: actors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com