关系型数据库常用值

问题描述 投票:0回答:1

在关系数据库中设计通用值的正确方法是什么?

示例 - 表格

car_make
:

id 名字
1 欧宝
2 宝马

car_model

id 名字 make_id
1 阿斯特拉 1
2 威达 1
3 I7 2
4 X4 2
5 其他

在该示例中,我希望每个品牌都有额外的“其他”模型,尽管有其型号。

如果我们省略“其他”值,一对多关系似乎是最合乎逻辑的,因为每个品牌都有自己的模型。但是,如果我们为数千个品牌引入多对多关系,只是为了每个品牌都有“其他”模型,这不是浪费资源吗?

sql database-design
1个回答
0
投票

这取决于您计划如何在应用程序中查询数据库。就我而言,“其他”模型仅在您对每个 car_make 的查询进行分组时才相关,例如,当您尝试聚合每个 car_make 及其对应的 car_model 的销售额时。如果您对每个 car_make 中“other”作为 car_model 的命名约定保持一致,您还可以使用该名称过滤查询,例如:大写 O 的“Other”。

关于资源浪费,我们尝试比较一下多对多和一对多。在多对多中,我们需要引入一个中间表,我们称之为car_model_x_make。另外,为了让您了解查询多对多关系是多么困难,这里有一个获取 BMW 创建的 car_model 的示例。

SELECT car_model.name FROM car_make,car_model_x_make,car_model WHERE car_make.id=car_model_x_make.makeid AND car_model.id=car_model_x_make.modelid AND car_make.name='BMW'

如果您有 1000 个品牌,并且每个品牌都填充了 10 个独特的型号,再加上一个“其他”型号,这意味着 car_make 表将有 1000 行,每行 2 个基本列,car_model 将有 10001 行,每行 2 个基本列列,car_model_x_make 将有 11000 行,每行 3 个基本列。总而言之,将会有 55002 必需细胞。

相比之下,一对多关系只会用 35000 基本单元填充您的数据库,其中包含 car_make 中 1000 行 2 个基本列,以及 car_model 中 11000 行 3 个基本列。

© www.soinside.com 2019 - 2024. All rights reserved.