Sql 一对多关系的正确数据库架构

Sql 一对多关系的正确数据库架构,sql,database-design,database-schema,Sql,Database Design,Database Schema,我正在建立一个关于汽车的兴趣网站。如果用户单击某辆车,我希望显示所选车的类似车列表 我有一个主表,它存储关于每辆车的基本信息,CarDataMain,表中的两列是CarID(Pk)和similarsid(Fk) 我有另一个表叫做“SimilarCars”,它有三列;相似carsid(Pk)、CarGroupID和CarID 因此,SimilarCars表中的SimilarCarsID列与CarDataMain表中的SimilarCarsID列有关系 这是正确的方法还是“最佳实践” 每辆车只能属于

我正在建立一个关于汽车的兴趣网站。如果用户单击某辆车,我希望显示所选车的类似车列表

我有一个主表,它存储关于每辆车的基本信息,CarDataMain,表中的两列是CarID(Pk)和similarsid(Fk)

我有另一个表叫做“SimilarCars”,它有三列;相似carsid(Pk)、CarGroupID和CarID

因此,SimilarCars表中的SimilarCarsID列与CarDataMain表中的SimilarCarsID列有关系

这是正确的方法还是“最佳实践”

每辆车只能属于一个CarGroup(CarGroupID)

另一个解决方案是创建第三个表,该表保存CarDataMain和SimilarCars数据之间的关系,但由于存在一对多关系,我想这是过度杀戮了?这样我就可以在CardatMain中为所有属于同一汽车组的汽车输入相同的外键值,而这些汽车在某种程度上感觉很吸引人

第三种解决方案是跳过CarDataMain中的SimilarCarsID列,并使CarID成为SimilarCars表中的外键,如果您理解我的意思的话。但我想这个解决方案有一些缺点

对于新手的问题(如果这个问题以前提过),我很抱歉,但我想在开始之前把它弄清楚:)


Ludde

注:重新编写

  • 设计表来描述诸如
    汽车
    集团
    ,其他
  • 使用“联接表”提供所需的一对多关系
桌子
  • CarID
    -主键
团体
  • GroupID
    -主键
  • Name
    -组的名称
GroupID
可能不是必需的。如果
Name
是唯一的,则将其用作主键

车组
  • CarID
    -车表外键
  • GroupID
    -组表的外键
这是一个联接表。在这里,您可以将给定的汽车映射到多个组,并将给定的组映射到多个汽车

相似车 我可能是误解了,但似乎你想匹配类似的汽车,没有特别的原因。如果您想按组匹配,请参见上文;如果你想“这两辆车是相似的,句号”,给你。这对集团而言并非相互排斥

  • CarID
    -FK到车辆表
  • SimilarCarID
    -Fk到Car表

一个约束,使CarId不能匹配SimilarCarID——除非您确实希望汽车与自身相似。但是如果是这样的话,那么只需阅读car表即可。

注意:重新编写

  • 设计表来描述诸如
    汽车
    集团
    ,其他
  • 使用“联接表”提供所需的一对多关系
桌子
  • CarID
    -主键
团体
  • GroupID
    -主键
  • Name
    -组的名称
GroupID
可能不是必需的。如果
Name
是唯一的,则将其用作主键

车组
  • CarID
    -车表外键
  • GroupID
    -组表的外键
这是一个联接表。在这里,您可以将给定的汽车映射到多个组,并将给定的组映射到多个汽车

相似车 我可能是误解了,但似乎你想匹配类似的汽车,没有特别的原因。如果您想按组匹配,请参见上文;如果你想“这两辆车是相似的,句号”,给你。这对集团而言并非相互排斥

  • CarID
    -FK到车辆表
  • SimilarCarID
    -Fk到Car表

一个约束,使CarId不能匹配SimilarCarID——除非您确实希望汽车与自身相似。如果是这样的话,那就看一下汽车表吧。

我想你的概念需要先弄清楚。“相似的车”不是同一“组”中的车吗?如果是,你只需要一个学期。由于“group”是一个保留字,所以最好使用其他词

我将使用“类别”一词。所以我的Cars表将有一个CategoryId列。想象一下前端的页面,有人会在那里添加新车,他们不是有一个下拉列表来选择类别吗

所以我的模型是:

Cars
-Id (PK)
-Name
-CategoryId  (FK to Categories)
...

Categories
-Id (PK)
-Name

我认为你的概念需要先弄清楚。“相似的车”不是同一“组”中的车吗?如果是,你只需要一个学期。由于“group”是一个保留字,所以最好使用其他词

我将使用“类别”一词。所以我的Cars表将有一个CategoryId列。想象一下前端的页面,有人会在那里添加新车,他们不是有一个下拉列表来选择类别吗

所以我的模型是:

Cars
-Id (PK)
-Name
-CategoryId  (FK to Categories)
...

Categories
-Id (PK)
-Name

在不深入细节的情况下,让我们假设我描述的是我想要的(一个类似的CARS表)。(我已经写了一个详细的解释,但是它包含了太多的字符,对不起…)。有关我为什么需要SimilarCars表的详细信息,请参阅我对JBrooks的回答。然而,你在上面写的关于“SimilarCar”的部分感觉很到位!考虑到我对JBrooks的回答,我想这就是我们的方向了吧?非常感谢各位。不必详细说明,我们假设我所描述的就是我想要的(一个类似的CARS表)。(我已经写了一个详细的解释,但是它包含了太多的字符,对不起…)。有关我为什么需要SimilarCars表的详细信息,请参阅我对JBrooks的回答。然而,你在上面写的关于“SimilarCar”的部分感觉很到位!考虑到我对JBrooks的回答,我想这就是我们的方向了吧?谢谢大家,谢谢你们的回答。我做的和你上面的模型一模一样。“问题”在于