0

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

我的案例是设计一个 ERD 来跟踪汽车及其从一个位置到另一个位置的运动。

用户使用包含三个字段的表单: 第一个字段用于输入车号。第二个字段用于输入汽车来自的位置(From_Location),第三个字段用于输入汽车要去的位置(To_Location)。

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

如何创建 location 表并将其连接到 car 表以使其覆盖 From 和 To ?

关系应该是多对多的。

我希望问题足够清楚。

4

2 回答 2

0

Car 和 Location 之间的关系是:对于每辆汽车,恰好有两个位置(从和到),并且对于每个位置,有 0..n 辆汽车。
您应该:制作带有字段的 Car 表:LocationFrom 和 LocationTo 每个都是具有 LocationId 和 LocationName 的表 Location 的外键(您只能拥有后者,这是有争议的)。
为什么你不需要第三张桌子:连接不是多对多 - 它是二对多。
当您具有真正的多对多关系时,表格无法分辨一个记录中的哪条记录在另一个记录中,因此需要第三张表(尝试一下..例如,如果您要保存所有每辆车的位置 - 这本来是多对多的关系,因为现在一辆车与 0..n 个位置相关,而一个位置与 0..n 辆汽车相关。现在你怎么能知道哪个汽车记录与哪个位置有关(您可以为此设置 n 列,但这是不合理的,因此您需要另一个表))无论如何,在这里您在 car 中只有两列与“直接”位置相关。

补充:
所以你也需要历史......在这种情况下,你确实需要一个额外的表格。
我会在我的原始解决方案中添加一列,以便现在表 car 具有列:
Id、FromLocation、ToLocation、LocationHistoryId
FromLocation 和 ToLocation 保持不变,LocationHistoryId 是表 LocationHistory 的外键,它具有以下列:
CarId、LocationId
Where键是包含两个字段的复合键(显然 LocationId 指向 Location 表)

于 2010-09-10T20:32:38.363 回答
0

我会有三张桌子

  • 地点
  • 车位

汽车会有相应的汽车信息

  • 车牌号
  • 姓名
  • 颜色
  • 制作
  • 模型

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

  • 位置 ID
  • 地点名称
  • 纬度
  • 经度

CarLocation 将包括至少四个字段

  • 汽车位置 ID
  • 车牌号
  • FromLocationId
  • ToLocationId

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

于 2010-09-10T20:42:38.610 回答