【发布时间】:2017-05-25 06:09:02
【问题描述】:
您如何确定对整个数据库中的不同数据使用哪种类型的表关系?什么时候数据库大到足以保证一种方法优于另一种方法?
这可以通过一个例子更好地解释。假设您有一些要记录的汽车测试数据。您将获得型号年份和型号等信息
示例 1 - 一张桌子
entryID | modelYear | model
1 | 2011 | Fusion
2 | 2012 | Focus
3 | 2013 | Explorer
4 | 2011 | Focus
如果我们想获取所有 Focus 条目,您可以使用 where model="Focus" 直接从该主表中提取数据
示例 2 - 在主表中有数字索引的两个表
main_table
entryID | modelYear | model
1 | 2011 | 1
2 | 2012 | 2
3 | 2013 | 3
4 | 2011 | 2
model_lookup_table
modelID | model
1 | Fusion
2 | Focus
3 | Explorer
在这种情况下,您必须根据 main 中的 model 列进行查找,与 model_lookup_table 中的 modelID 进行比较并将它们连接在一起。
示例 3 - 在 model_lookup 表中保存条目索引的两个表
main_table
entryID | modelYear
1 | 2011
2 | 2012
3 | 2013
model_lookup_table
modelID | entryID | model
1 | 1 | Fusion
2 | 2 | Focus
3 | 3 | Explorer
4 | 1 | Focus
在这种情况下,您将比较 main_table.entryID 和 model_lookup_table.entryID 以提取最终表。请注意,主表条目的数量保持为 3 而不是 4。
我的想法:
示例 1 - 快速而肮脏,但适用于小型数据库
示例 2 - 具有单个条目的列的正确关系数据库
示例 3 - 具有与另一列相关的多个值的列的正确关系数据库并限制“主表”中的条目数
我走对了吗?
【问题讨论】:
-
示例 2 对我来说似乎是正确的,不确定您在示例 3 中展示的内容,这对我来说没有多大意义。使用 model_lookup_table 您似乎正在尝试创建一个链接表,因此模型不应该在那里。对于示例 3,您可以将
main链接到model_lookup链接到model,但我认为这不是必需的,因为您没有多对多的关系。 -
我认为我对示例 3 的解释很差......所以假设您有两个模型条目,其中 model_year 为 2011 年(即 2011 年的焦点和 2011 年的融合)。使用示例 2 的样式,您必须有第二个条目,其中 model_year 为 2011,主表中总共有 4 条记录。对于示例 3,您的主表将保留 3 条记录(2011、2012、2013),即使 2011 可能有两个与之关联的模型。
-
是的,第三个例子意义不大;它似乎可能试图表示没有考虑这种关系的多对多关系。
-
更新了示例 1-3,希望使示例 3 更清楚地说明我所追求的。如果还不清楚,请告诉我。
-
另一个例子是,如果您要向这些车辆添加测试编号。如果 2011 Focus 有四个与之相关的测试编号会怎样。您可以使用示例 3 的样式将 main 中的单个条目与四个不同的测试编号相关联,而不是在主表中添加四个几乎相同的条目。
标签: mysql sql sql-server database sqlite