两个地点的ERD

时间:2010-09-10 20:28:53

标签: database-design erd

我正在设计一个数据库并且遇到了这个问题:

我的情况是设计一个ERD来跟踪汽车及其从一个地方到另一个地方的移动。

用户使用包含三个字段的表单:第一个用于输入汽车#。第二个字段用于输入汽车来自的位置(From_Location) 第三个字段是输入汽车前往的位置(To_Location)。

例如,Car#1从#A位置移动到位置#B。另一个例子,汽车#2从位置#B移动到位置#A。

如何创建位置表并将其连接到汽车表,以便它涵盖From和To?

关系应该是多对多的。

我希望问题很清楚。

2 个答案:

答案 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)

我会有三张桌子

  • 汽车
  • 位置
  • CarLocation

汽车将拥有相应的汽车信息

  
      
  • CarId
  •   
  • 姓名
  •   
  • 颜色
  •   
  •   
  • 制作
  •   
  • 模型
  •   

除非您想添加拉/长信息等,否则位置将只是一个字段...

  
      
  • LocationId
  •   
  • LOCATIONNAME
  •   
  • 纬度
  •   
  • 经度
  •   

CarLocation将包含至少四个字段

  
      
  • CarLocationId
  •   
  • CarId
  •   
  • FromLocationId
  •   
  • ToLocationId
  •   

我可能会在CarLocation表中包含一个UpdateTimestamp字段。