【问题标题】:Database Relationship between tables that depends on same table依赖同一张表的表之间的数据库关系
【发布时间】:2023-04-08 15:32:01
【问题描述】:

我有一个非常具体的数据库。该数据库包含 4 个表。

我有一个组件表。此组件表将始终有一个系统。 系统可能有多个子系统。 每个子系统可以有多个部分。

这意味着为了拥有一个零件,我必须有一个子系统,而要拥有那个子系统,我必须有一个系统。

一个部分始终与一个子系统相关,而该子系统将始终仅与一个系统相关。

问题出在组件上……因为必须有一个系统,而不是一个子系统,因此不是一个部件。

如果我在零件和组件之间创建关系,我将能够知道哪个子系统以及关系中的系统。但是当我只有一个系统时会发生什么?这样我就无法找回系统了。

我的想法是将子系统和系统直接与组件相关联。在组件上总共有 3 个关系。但是那样的话,如果我有一个零件,那么子系统和组件之间的关系将包含已经存在于零件-组件关系中的信息。系统-组件关系也是如此。

如何删除重复的信息?

编辑

为了便于阅读,我将复制@duffymo 的摘要,但有一处更正:

  1. 四个实体:组件、系统、子系统和部件
  2. 组件系统是 1:many
  3. 系统子系统是 0:many
  4. 子系统部分是 0:many

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    回到实体关系的开头。

    我读到了:

    1. 四个实体:组件、系统、子系统和部件
    2. 组件系统是 1:many
    3. 系统子系统是 0:many
    4. 子系统部分是 0:many

    导致问题的原因是最后两个中的“可能有”。

    当您的系统是单个部件时,问题就出现了:没有系统或子系统介入。

    您可能通过使 Component-Part 多对多来规避问题。我没有看到系统和子系统之间的区别。我只有系统。

    【讨论】:

    • 另一条评论。如果我创建一个组件部分 N:M,这意味着我的组件可以有多个部分,那就错了。
    • 系统和子系统是有区别的。系统信息永远不会与子系统相同。我不需要一个子系统来成为一个系统。例如:系统可以是相机,子系统可以是镜头。你不会在相机里面有一个相机,我们永远不会按照要求在相机外面有镜头
    • 语义。我可以很容易地将镜头称为系统。我可以将 Part 视为图中的叶节点,将 System 视为 Part 的集合。图表是表示材料清单的一种自然方式。
    • 请提供一个包含 0 个部件的子系统示例。
    • 在我们的例子中,我们将在数据库中存储一个小型卫星,它有一个我们不是为自己建造的电力系统。这将是系统内部的一个子系统,没有任何部分。卫星
    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多