在我的数据库中,我需要以下关系:
- 比赛
- 比赛参与者(Tpart)
- 将用户与锦标赛相关联
- 圆形的
- 这是单场比赛
- 洞
- 将 Tpart 与一轮相关联
- 也有分数
这是我当前的持久实体:
Tournament
name Text
urlName Text
location GolfCourseId
startDate Day
endDate Day Maybe
UniqueTName name
UniqueTUrlName urlName
Tpart
tournament TournamentId
userId UserId
deriving Show
deriving Eq
Round
tourn TournamentId
name Text
UniqueRound tourn name
deriving Show
Hole
round RoundId
part TpartId
score Int
deriving Show
考虑到我需要做的那种查询,我不知道这是否是最好的结构。我需要
获取每个 Tpart 一轮的总分
这将通过将与特定轮和 Tpart 相关的所有 Holes 的得分相加来完成Part | round 1 | round 2 | ... p1 | 56 | 54 p2 | 60 | 57
获取与一轮相关的所有孔和零件
Part | hole 1 | hole 2| ... p1 | 3 | 5 p2 | 5 | 6
要获得第一个表上的数据,需要将每个用户的所有球洞得分相加。这是一种有效的方法吗?或者拥有另一个实体会更好RndScore
,如下所示:
RndScore
rnd RoundId
tpart TpartId
score Int
每次更新孔实体时都可以更新该实体。不过,这些解决方案中的任何一个似乎都相当强大。