数据模型n< -   n我不理解的关系

时间:2017-01-19 15:00:15

标签: mysql database-design

我将使用车辆数据库的数据模型,我将使用databaseanswers.com中的图表,但有一件事我不明白。

Database Model

在此图表中有一个表格"vehicle_model_categories",用于表格"vehicle_models""vehicle_category"之间的关系,直到那时它很好,但表格"vehicles"也会使这两个表之间的关系,不明白"vehicle_model_categories"表可能提供什么。向表"vehicule_model_categories"添加索引并在表"vehicles"中建立关系会不会更好?

我不是数据库建模专家,对不起,如果我的问题看起来有点愚蠢,但我想了解。

谢谢。

1 个答案:

答案 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个条目)可以捕获这种关系,这样可以快速回答这些问题:

  1. 该型号是什么类别" VW Beetle"?
  2. 该类别中有哪些型号" Compact"?
  3. 如果我们删除表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
    • 缺点:当信息冗余时,更容易获得 不一致的信息。例如,如果有一天,模型得到 重新归类为新类别(例如" VW Beetle"现已分类 as" Compact - Classifical"),然后是所有Vehicle_Cetegory_Code Vehicles中的信息必须更新。