Database design 两个地点的ERD
我正在设计一个数据库,遇到了这个问题: 我的案例是设计一个ERD来跟踪汽车及其在不同地点之间的移动 用户使用一个包含三个字段的表单:第一个字段用于进入汽车。第二个字段用于输入车辆来自的位置(从位置) 第三个字段是输入汽车要去的位置(to_位置) 例如,汽车1正在从位置A移动到位置B。另一个例子是,汽车2正在从位置B移动到位置A 如何创建位置表并将其连接到汽车表,以便它覆盖从和到 这种关系应该是多对多的Database design 两个地点的ERD,database-design,erd,Database Design,Erd,我正在设计一个数据库,遇到了这个问题: 我的案例是设计一个ERD来跟踪汽车及其在不同地点之间的移动 用户使用一个包含三个字段的表单:第一个字段用于进入汽车。第二个字段用于输入车辆来自的位置(从位置) 第三个字段是输入汽车要去的位置(to_位置) 例如,汽车1正在从位置A移动到位置B。另一个例子是,汽车2正在从位置B移动到位置A 如何创建位置表并将其连接到汽车表,以便它覆盖从和到 这种关系应该是多对多的 我希望问题足够清楚。汽车和位置之间的关系是:每辆汽车有两个位置(从和到),每个位置有0..n辆
我希望问题足够清楚。汽车和位置之间的关系是:每辆汽车有两个位置(从和到),每个位置有0..n辆汽车。
您应该:使用字段创建Car表:LocationFrom和LocationTo每个字段都是具有LocationId和LocationName的表位置的外键(您只能有后者,这是有争议的)。
为什么不需要第三个表:连接不是多对多-而是两对多。
当您有一个真正的多对多关系时,表无法分辨一个表中的哪个记录对应另一个表中的哪个记录,因此需要第三个表(试一试..例如,如果您要保存每辆车的所有位置-这将是一个多对多关系,因为现在一辆车与0..n个位置相关,而一个位置与0..n辆车相关。现在,您将如何判断哪个汽车记录与哪个位置相关(你们可以有n列,但这是不合理的,所以你们需要另一个表)无论如何,你们在car中只有两列和位置“直接”相关 添加:
因此,您还需要历史记录……在这种情况下,您确实需要一个额外的表。
我会在我的原始解决方案中添加一列,这样现在表car就有了列:
Id、FromLocation、ToLocation、LocationHistoryId
FromLocation和ToLocation保持不变,LocationHistoryId是具有以下列的表LocationHistory的外键:
CarId,位置ID
其中,键是一个复合键,包含两个字段(显然LocationId指向Location table)我将有三个表
- 汽车
- 位置
- 定位
- 龋齿
- 名字
- 颜色
- 年
- 制造
- 模型
- 位置ID
- 地点名称
- 纬度
- 经度
- CarLocationId
- 龋齿
- FromLocationId
- ToLocationId
我可能会在CarLocation表中包含一个UpdateTimestamp字段。因此,在这种情况下,两个字段(LocationFrom和LocationTo)将引用一个键,即locationID?但我如何确保From和to的数据不相同?例如,记录车(car#1,1,1)不可能发生,因为一辆车不可能从一个地方同时到达同一个地方。你明白我的意思吗?还有,我需要第三个连接表吗?因为这个关系似乎是多对多的。是的,我明白你的意思。这个AFAIK不能通过ERD看到,但你应该把它作为一个注释来写。@Oren,当车移动时从位置B到位置C,您会丢失这些信息。@Guest1,您想保留该车所有人的历史记录吗?@Nathan,是的,我想保留历史记录。感谢您的快速回复!这引发了两个问题:如果用户在“发件人”字段和“收件人”字段中放置到相同的位置,会怎么样?这将使我的表成为“CarLocation”要获得以下无效记录:CarLocation(1,1,3,3)。位置3与位置3相同,这是错误的。我们不能让一辆车从某个位置驶向该位置。对吗?@guest,您应该在前端包含逻辑,以确保不会发生这种情况