sup*_*ell 1 foreign-key database-design
我将从一个示例数据库设计开始,让您了解我目前正在处理的内容。
我有一张桌子,里面放着所有品牌的车辆,还有一张桌子,里面放着每个品牌的模型。这将导致以下数据库设计:
使
楷模
到目前为止,它非常简单,但现在有点困难,它在我的场景中引入了“不可避免的”循环引用。我要介绍另一个名为 Vehicles 的表,用于配置特定的车辆。
车辆
我来这个设计的原因是因为我有一个前端 Web 应用程序,它允许用户填写表单来配置车辆。在表单内,用户会看到两个选择框,一个用于品牌,另一个用于模型。在这种情况下,一旦用户选择了一个品牌,属于一个品牌的模型就会动态加载,因此模型和品牌之间的 FK 关系。
可能的解决方案:
1) 从 Vehicles 表中删除 FK 关系,只存储品牌名称和型号名称,但如果由于某种原因这些值发生变化,已插入的车辆记录将不会显示更新的名称。
2) 仅将 ModelId 存储在 Vehicles 中
3) 在 Vehicles 和 Makes 和 Models 之间创建一个多对多表,并将多对多表的 Id 作为 FK 存储在 Vehicles 表中。然而,这需要前端根据 MakeId 和 ModelId 执行查找,以获取多对多表的 id。
推荐哪种方法?有更好的选择吗?
一个合理的解决方案是第二种,即从 Vehicles 中移除 MakeId FK,原因有二:
某个Model的Maker信息已经包含在Model记录中,所以将其存储在Vehicle中是多余的。
在 Vehicle 中有这两个属性很容易出错,因为一个 Vehicle 内的信息可能不一致。