首页 > 解决方案 > 对重复多次的 1 对多关系建模

问题描述

我有三张桌子InitiativeCategoryForecasts。所有表中的关系都是一对多。

Initiative可以有多个Category可以有多个Forecasts

Initiative可以是重复的,也可以不是基于Category名称可以不同的。例如,对于经常性Initiative,它将有一组特定的Categories,将针对所有Initiatives重复性类型重复。

并且预测将针对一年中的每个类别进行。这就是目前的情况,小提琴就在这里

在此处输入图像描述

这种方法的问题是,对于特定类型的每个倡议,类别名称会重复很多次,尽管它是相同的。

另一个问题是,当我们需要添加特定类别的倡议时,我们必须维护另一个包含所有倡议和所有类别的 AllInitiative 表,以将它们最初映射到Category表中。之后,可以将预测添加到新添加的计划和类别中。

我如何更好地设计这个结构,以便我有一个AllInitiative表,其中包含所有类型的倡议恰好一次,以及一个AllCategory表,其中包含每种类型的倡议的类别列表。

并使用另一个表来跟踪特定类型的倡议和类别,而无需在特定类型倡议的每个实例中重复类别名称。

标签: databasedatabase-designrelational-databaserelationship

解决方案


您可以拥有一个Initiative表,其中包含所有倡议一次,另一个用于Category,对于 1-n 关系,您需要一个链接表,例如Initiative_Category,您在其中具有用于倡议和类别的外键。

在此表中,您可以存储具有相应类别的每个倡议。

    +---------------+-------------------+
    | initiative_id |    category_id    |
    +---------------+-------------------+
    |       1       |         2         |
    |       1       |         3         |
    +---------------+-------------------+

推荐阅读