我将使用车辆数据库的数据模型,我将使用databaseanswers.com中的图表,但有一件事我不明白。
在此图表中有一个表格"vehicle_model_categories"
,用于表格"vehicle_models"
和"vehicle_category"
之间的关系,直到那时它很好,但表格"vehicles"
也会使这两个表之间的关系,不明白"vehicle_model_categories"
表可能提供什么。向表"vehicule_model_categories"
添加索引并在表"vehicles"
中建立关系会不会更好?
我不是数据库建模专家,对不起,如果我的问题看起来有点愚蠢,但我想了解。
谢谢。
答案 0 :(得分:0)
Vehicles
是关于个别车辆的。想象一下,美国可以有1亿辆汽车。 Vehicle_Categories
是一个更小的集合,可能只有20-100个类别(例如Compact,Convertible等)。 Vehicle_Models
也是一个相对较小的集合,可能不超过2,000(例如VW Beetle,VW GTi)。最后两组中的实体之间肯定存在关系。例如," VW Beetle"可归类为" Compact"作为其类别。这种关系相对较小(例如2,000个型号的100个类别)。有一个小表(可能只有2000个条目)可以捕获这种关系,这样可以快速回答这些问题:
如果我们删除表Vehicle_Model_Categories
并仅在表Vehicles
中表达关系,那么对上述问题的查询将不得不搜索更大的约100M条目表。
冗余信息
严格来说,数据库设计有一些冗余,但确实如此
不在表Vehicle_Model_Categories
中,而是在列中
Vehicles.Vehicle_Category_Code
。这些信息是多余的
因为可以使用JOIN
的Vehicles
来编写查询而不使用
列(但有列Model_Code
)和表Vehicle_Model_Categories
仍然可以获取信息
关于Vehicle_Category_Code
。这种冗余有其自身的特点
利弊。
Vehicles
的访问速度并提供信息
更容易获得(即无需加入Vehicle_Model_Categories
)Vehicle_Cetegory_Code
Vehicles
中的信息必须更新。