我正在尝试制作关于公式1的应用程序。我有三个表:Team,Driver和Race Results。我正在考虑三种选择(也许我错过了更多):
有一个派生表Driver_Team。在该表中有一个Driver_TeamId。在Race Results表中使用该Driver_TeamId。这似乎解决了我认为我将使用的大多数查询,但感觉很尴尬,我没有在任何地方看到它。
在Race Results表中有Driver.DriverId和Team.TeamId。这具有无法添加额外信息的问题。我还不知道什么信息,也许是开始加入新团队的日期。然后我需要一个联结表(因为该信息与种族结果无关)。
最后一个:拥有一个联结表Driver_Team,但在Race Results表中只有Driver.DriverId作为外键。问题是,像“团队x在赛季中获得多少积分/几个赛季”这样的问题确实非常糟糕。
我错过了另一种解决方案吗?如果是,请告诉我! :-)否则,哪些解决方案似乎最好?
谢谢!
答案 0 :(得分:0)
您的第一个选项获得我的投票。我还建议添加一个Race表(用于保存跟踪,日期,条件等数据),并使Race_Results成为Driver_Team和Race的组合。
答案 1 :(得分:0)
我建议如下:
RaceResult - Driver - DriverTeam - Team
在RaceResult包含race_date
的位置,DriverTeam包含(driver_id
,team_id
,team_join_date
和team_leave_date
)。然后,即使查询可能很复杂,您也可以获得您在问题中询问的所有信息。
答案 2 :(得分:0)
只是头脑风暴,一个对象模型可能看起来像这样。注意RaceResult上明显缺少“id”字段,因为终点位置完全可以作为一个自然键(每个终点位置一个驱动器)。当然,也可能有很多其他选择。
Team:
id
name
Driver:
id
name
team_id
Race:
id
venue
date
RaceResults:
position
driver_id
race_id
答案 3 :(得分:0)
对于你所讨论的那种查询,我认为DriverId和TeamId都应该在RaceResults中。如果要存储有关驱动程序和团队之间关联的其他信息,则应将其放在单独的表中。这似乎会产生一些冗余,因为竞赛表中的驾驶员/团队对将受到DriverTeam表中的雇佣日期的限制,但考虑到合同和时间表的复杂性,我认为最终可能不会特别多余的。
我喜欢您计划数据库支持查询的方式。多年来,我在DB设计中遇到了太多的OOP思想!
答案 4 :(得分:0)
如果您只在RaceResults表中存储DriverId和TeamId,那么您就无法将驱动程序与没有RaceResult的团队关联。