我正在设计一个数据库并且遇到了这个问题:
我的情况是设计一个ERD来跟踪汽车及其从一个地方到另一个地方的移动。
用户使用包含三个字段的表单:第一个用于输入汽车#。第二个字段用于输入汽车来自的位置(From_Location) 第三个字段是输入汽车前往的位置(To_Location)。
例如,Car#1从#A位置移动到位置#B。另一个例子,汽车#2从位置#B移动到位置#A。
如何创建位置表并将其连接到汽车表,以便它涵盖From和To?
关系应该是多对多的。
我希望问题很清楚。
答案 0 :(得分:0)
Car和Location之间的关系是:每辆车都有两个位置(从和到),每个位置都有0..n车。
你应该:使用字段制作Car表:LocationFrom和LocationTo每个都是表Location的外键,它有LocationId和LocationName(你可以只有后者,这是有争议的)。
为什么你不需要第三张桌子:连接数量不是很多 - 它是两个到多个
当你有一个真正的多对多关系时,这些表不能分辨哪一个记录在另一个中记录哪个记录在另一个上,因此需要第三个表(尝试一下......例如,如果你要保存全部每辆车的位置 - 这可能是多对多的关系,因为现在一辆车与0..n位置有关,而且一个位置与0..n车有关。现在你怎么能分辨出哪辆车记录与哪个位置相关(你可以有n列,但这是不合理的,所以你需要另一个表))无论如何,你在汽车中只有两列与“直接”位置相关。
<强>加了:强>
所以你也需要历史...在这种情况下你真的需要一个额外的表
我会在原始解决方案中添加一列,以便现在表车有列:
Id,FromLocation,ToLocation,LocationHistoryId
FromLocation和ToLocation保持不变,LocationHistoryId是表LocationHistory的外键,其中包含以下列:
CarId,LocationId
其中键是包含两个字段的复合键(显然LocationId指向Location表)
答案 1 :(得分:0)
我会有三张桌子
汽车将拥有相应的汽车信息
- CarId
- 姓名
- 颜色
- 年
- 制作
- 模型
除非您想添加拉/长信息等,否则位置将只是一个字段...
- LocationId
- LOCATIONNAME
- 纬度
- 经度
CarLocation将包含至少四个字段
- CarLocationId
- CarId
- FromLocationId
- ToLocationId
我可能会在CarLocation表中包含一个UpdateTimestamp字段。