database - 对重复多次的 1 对多关系建模
问题描述
我有三张桌子Initiative
,Category
和Forecasts
。所有表中的关系都是一对多。
Initiative
可以有多个Category
可以有多个Forecasts
Initiative
可以是重复的,也可以不是基于Category
名称可以不同的。例如,对于经常性Initiative
,它将有一组特定的Categories
,将针对所有Initiatives
重复性类型重复。
并且预测将针对一年中的每个类别进行。这就是目前的情况,小提琴就在这里
这种方法的问题是,对于特定类型的每个倡议,类别名称会重复很多次,尽管它是相同的。
另一个问题是,当我们需要添加特定类别的倡议时,我们必须维护另一个包含所有倡议和所有类别的 AllInitiative 表,以将它们最初映射到Category
表中。之后,可以将预测添加到新添加的计划和类别中。
我如何更好地设计这个结构,以便我有一个AllInitiative
表,其中包含所有类型的倡议恰好一次,以及一个AllCategory
表,其中包含每种类型的倡议的类别列表。
并使用另一个表来跟踪特定类型的倡议和类别,而无需在特定类型倡议的每个实例中重复类别名称。
解决方案
您可以拥有一个Initiative
表,其中包含所有倡议一次,另一个用于Category
,对于 1-n 关系,您需要一个链接表,例如Initiative_Category
,您在其中具有用于倡议和类别的外键。
在此表中,您可以存储具有相应类别的每个倡议。
+---------------+-------------------+
| initiative_id | category_id |
+---------------+-------------------+
| 1 | 2 |
| 1 | 3 |
+---------------+-------------------+
推荐阅读
- java - 用户使用 Servlet 和 Hibernate 上传图像
- android - 为什么我的背景颜色在 Android 中只有部分变化?
- javascript - html标签限制
- spring - 关于 Spring Transaction 和异常的问题
- jquery - Slick Carousel - 在模式选项卡/窗口内浏览时图像卡在垂直位置
- google-colaboratory - Colab 错误:ModuleNotFoundError: No module named
- c# - Visual Studio 2017 找不到解决方案中存在的文件夹
- css - SVG 边框图像在 Chrome 上完美,在 Firefox 上拉伸
- python - Pandas corr() 过于频繁地返回 NaN
- php - PHP Wordpress 将 XML 导出到自定义网站