gpt4 book ai didi

mysql - 何时使用 SQL 数据库中什么类型的表关系

转载 作者:行者123 更新时间:2023-11-29 19:35:34 28 4
gpt4 key购买 nike

如何确定对整个数据库中的不同数据使用哪种类型的表关系?数据库什么时候足够大以保证一种方法优于另一种方法?

通过一个例子可以更好地解释这一点。假设您有一些想要记录的汽车测试数据。您将获得型号年份和型号等信息

示例 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_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 - 具有与另一列相关的多个值的列的正确关系数据库,并限制“主表”中的条目数

我走在正确的道路上吗?

最佳答案

如果域(例如有效的模型列表)满足以下任何条件,则查找表非常有用:

  • 可扩展(例如将来会添加或删除值,尤其是由用户添加或删除)。

  • 许多可能的值,很难使用行/列约束(例如 ENUM 或 CHECK 约束)进行检查。

  • 关联的属性或关系(例如,模型可以自动、手动或两者兼有,具有区域翻译或与制造商相关)。更正式地说,请参阅数据库关系的第二范式和第三范式。

  • 与代理键相比,值需要相对较大的存储空间。请注意,我并不建议对所有查找表使用代理键,自然键(例如年份数字)就完全没问题。

  • 值的表示经常变化,例如产品名称经常更改。

您的示例 1 就其本身而言是完全有效的,但在完整的数据库中,上述一些因素可能会变得很重要。根据上述标准,模型可能比 modelYear 更适合作为查找表,但请注意,如果需要,可以为两者创建查找表。

关于mysql - 何时使用 SQL 数据库中什么类型的表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574144/

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