繁体   English   中英

表是一对多关系还是多对多关系?

[英]Table with one to many relationship or many to many?

下面是表格的外观,

Place (id, name) i.e 1,Work | 2,Home | 3,College [lookup table]

UserPlace (id, placeId, contryId, userId)即1,2,1,12表示,id为1,地点为工作地点,contry为澳大利亚。 用户ID是12

Transport (id, name) i.e 1,Bus | 2,Train | 3,Cycle [lookup table]

UserPlaceTransport (userPlaceId, transportId, distance)

该表的样本数据,属于一个用户。

1,1,10km -UserPlace id是1,正在工作,Transpory方式是乘公共汽车。 距离是10km

1,2,20km -UserPlace id是1,这是工作,Transpory方式是乘火车。 距离是20公里

1,3,70km -UserPlace id为1,有效,Transpory方式为Cycle。 距离是70km

2,3,50km -UserPlace id是2,这是家,Transpory方式是按Cycle。 距离是50km

4,3,40km -UserPlace id是3,是大学,Transpory方式是按Cycle。 距离是40km

根据这种结构,UserPlaceTransport表中存在一些混乱。 也就是说,也可以将所有3个userPlaces的值一起获取。 这意味着,用户已经接触到了这么多公里的所有三个区域(工作,大学,家庭)。 即乘公共汽车20%,乘火车60%和乘自行车20%

但是当前的表结构仅适用于其他方式,即工作,乘公共汽车10%,乘火车90%..对于大学-乘公共汽车50%,乘自行车50%

所以我想知道如何扩展数据库表以便也存储这种值。 我的方法是采用两个单独的表UserPlaceTransportBasicUserPlaceTransportAdvanced因此, UserPlaceTransportBasicUserPlaceTransportAdvanced表相同,而UserPlaceTransportBasic如下所示,

UserPlaceTransportBasic (userId, transportId, distance)这样可以UserPlaceTransportBasic (userId, transportId, distance)混乱。

我想知道是否有更好的解决方案来处理这种情况。 我的意思是不创建两个单独的表,但只有一个表。

谢谢

您说:

根据这种结构,UserPlaceTransport表中存在一些混乱。 也就是说,也可以将所有3个userPlaces的值一起获取。 这意味着,用户已经接触到了这么多公里的所有三个区域(工作,大学,家庭)。 即乘公共汽车20%,乘火车60%和乘自行车20%

我看不到这一点:UserPlaceTransport指定了UserPlace和Transport,因此没有重复或混乱。

但是,此表还有另一个问题:它有旅程的终点​​,但没有另一终点:如果UserPlace是Work,那是离大学或家的距离? 这可以通过添加另一个字段来解决,该字段指向所涉及的第二个UserPlace。 更好的解决方案是添加一个Journey表(id,FromUserPlaceid,ToUserPlaceId),并使用Journey表代替UserPlaceTransport表。

还是您的问题是旅途可能涉及多种运输方式? 如果是这样,请从UserPlaceTransport(或Journey)表中取出距离和TransportId,并添加表UserPlaceTransportSection(id,UserPlaceId,TransportId,距离)。 您可以根据需要将总距离保留在UserPlaceTransport表中,但这是过早的优化,所以我不会这样做。

有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM