many-to-many 记录之间关系的正确数据库建模

Proper database modeling for many-to-many relationship between records

我构建了一个小型数据库应用程序,我可以使用一些关于最佳方法的输入来创建我的 table 之间的关系。

我想我已经弄明白了,但我已经盯着它看了太久了,我需要第二套眼睛和意见。

此模型适用于赛车 driver。我在设置关系时卡住的地方是部门 table。基本上一个driver可以分多个。为了解决这个问题,我添加了一个 DriverDivision table,它基本上是一个允许我将 driver 映射到多个分区的查找。

您可以从 driver 的模型中看到还有一个 PointsStanding 和一个 RaceResults table。这与 driver 关联为 1:M。我遇到困难的地方是我还需要按部门过滤结果和排名。我还需要在 Division 和这两个 table 之间创建查找 table 吗?查看模型我可以通过 DriverInfo 页面获得所有结果,但我不知道这是否是正确的方法?导航这将始终 return 一个完整的 object 所以我可以看到所有结果以及与之相关的 drivers。我是偏离轨道还是有更好的 model/pattern 可以遵循?当我第一次开始这个模型时,我认为 driver 将是主要点,但感觉可能是除法。 driver 必须与分区相关联,积分和结果与 driver 相关联,但我需要能够按分区查看所有积分和所有排名。

如果有任何建议或建议,我将不胜感激。

-干杯

首先,DriverDivisionId 是做什么用的?我假设您将它用作 division/driver 组合的主键,但您可以同时使用 DivisionId 和 DriverId 作为主键。

其次,您也可以将 divisionId 添加到积分榜和比赛结果中,然后使用 driverId 和 divisionId 来获取特定 division/racer 组合的结果

编辑:

考虑一分钟后,我想我会再添加一个 table,一个 'Race' table,这将是所有种族的列表。在那里你需要一个 'RaceId' 来识别种族。然后你可以在那里存储关于这场比赛的所有信息(包括分区),并且在 RaceResults table 中你会有你的 RaceId,DriverId,PositionFinished,PositionStarted,RacerPoints

据我了解您的post,一名赛车手参加了多场比赛,每场比赛都属于一个组别。

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

所以你会得到类似的东西:

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

在我看来,您可以根据过去的比赛结果计算排名。如果那是真的,我根本不会将排名存储在数据库中。存储您也可以计算的结果必然会导致不一致:例如,如果某些更新了比赛结果,但没有更新排名。

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