我正在建立一个关于汽车的业余爱好网站。如果用户点击汽车,我想显示所选汽车的类似汽车列表。
我有一个主表存储有关每辆车的基本信息,CarDataMain,表中的两列是CarID(Pk)和SimilarCarsID(Fk)。
我有另一个名为“SimilarCars”的表,它有三列; SimilarCarsID(Pk),CarGroupID和CarID。
因此,SimilarCars表中的SimilarCarsID列与CarDataMain表中的ColumnCarsID列有关系。
这是正确的做法还是“最佳做法”?
每辆车只能属于一个CarGroup(CarGroupID)。
另一个解决方案是创建第三个表来保存CarDataMain和SimilarCars数据之间的关系,但由于存在一对多的关系,我猜这是过度杀戮?这样我就可以为所有属于同一个CarGroup的汽车在CarDataMain中设置相同的外键值,女巫不知何故感觉很吸引人......
第三个解决方案是跳过CarDataMain中的SimilarCarsID列,如果你理解我的意思,那么将CarID作为SimilarCars表中的外键。但我想这个解决方案有一些缺点......
抱歉新手问题(如果此问题已经提前),但我想在开始之前做好准备:)
Ludde
答案 0 :(得分:0)
注意:重写
Car
,Group
,其他?CarID
- 主键GroupID
- 主键。Name
- 该组的名称。 GroupID
可能没有必要。如果Name
是唯一的,则将其用作主键。
CarID
- Car Table的外键GroupID
- 组表的外键这是一个连接表。在这里,您可以将给定的汽车映射到多个组,并将给定的组映射到许多汽车。
我可能会误解,但似乎你想要匹配类似的汽车,没有特别的原因。如果你想按组匹配,那就在上面;如果你想“这两辆车相似,期间”,你走吧。这与团体并不相互排斥。
CarID
- FK到Car table SimilarCarID
- Fk to Car table 一个约束因此CarId无法匹配SimilarCarID - 除非您确实希望汽车与自身相似。但如果是这样,那么只需阅读汽车表。
答案 1 :(得分:0)
我认为你的概念需要先被清除。是不是“同类车”是同一个“小组”的车?如果是这样,您只需要1个学期。由于“group”是保留字,因此最好使用其他内容。
我会选择“类别”一词。所以我的Cars表会有一个CategoryId列。想象一下有人会添加新车的前端页面,他们不会有下拉列表来选择类别吗?
所以我的模型是:
Cars
-Id (PK)
-Name
-CategoryId (FK to Categories)
...
Categories
-Id (PK)
-Name