对记录之间的多对多关系进行适当的数据库建模

时间:2015-01-31 16:55:32

标签: sql-server data-modeling

所有我构建一个小型数据库应用程序,我可以使用一些输入最好的方法来创建我的表之间的关系。 Driver Info

我想我已经想通了,但是我一直在盯着它,所以我需要第二组眼睛和意见。

此型号适用于赛车手。我在设置关系的地方卡在分区表上。基本上司机可以分为多个部门。为了解释这一点,我添加了一个DriverDivision表,它基本上是一个查找,允许我将驱动程序映射到多个分区。

您可以从驱动程序的模型中看到,还有一个PointsStanding和一个RaceResults表。这与驱动程序关联为1:M。在我磕磕绊绊的地方,我还需要按照分部过滤结果和排名。我是否需要在Division和这两个表之间创建查找表?看看模型我可以通过DriverInfo页面获得所有结果,但我不知道这是否是正确的方法?导航这将总是返回一个完整的对象,所以我可以看到所有结果以及与之关联的驱动程序。我是偏离轨道还是有更好的模型/模式可供选择?当我第一次启动这个模型时,我认为驱动程序将是主要的一点,但感觉就像分区一样。驾驶员必须与分部相关联,分数和结果与驾驶员相关联,但我需要能够按分部查看所有积分和所有积分。

我很感激任何建议或建议。

-Cheers

2 个答案:

答案 0 :(得分:1)

首先,DriverDivisionId是什么?我假设您将它用作分区/驱动程序组合的主键,但您可以同时使用DivisionId和DriverId作为主键。

第二,您可以将divisionId添加到积分榜和比赛结果中,然后同时使用driverId和divisionId获取特定分区/赛车组合的结果

编辑:

在思考了一分钟后,我想我会再增加一张桌子,一场比赛'表格将列出所有比赛。那里你需要一个' RaceId'识别种族。然后你可以在那里存储关于这场比赛的所有信息(包括分区),在RaceResults表中你可以获得你的RaceId,DriverId,PositionFinished,PositionStarted,RacerPoints

答案 1 :(得分:1)

据我了解你的帖子,一名赛车手参加了一场比赛,每场比赛属于一个师。

一个问题是,一名车手可以属于一个师而不参加该师的任何比赛吗?根据答案,您可能不需要Driver和Division之间的关系。 RaceResult和Divison之间的关系更有意义。

所以你得到类似的东西:

Driver -->> RaceResult <<-- Race
                       <<-- Division

在我看来,你可以根据过去的RaceResults来计算站立时间。如果这是真的,我根本不会在数据库中存储积分。存储您也可以计算的结果肯定会导致不一致:例如,如果某些更新了比赛结果,而不是更新结果。

最后,您的表结构对于初始设计似乎非常通用。我尝试将其简化为您应用程序第一版所需的简单信息存储。