私のデータベースでは、次の関係が必要です。
- トーナメント
- 大会参加者(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 に関連するすべてのホールのスコアを合計することによって行われますPart | round 1 | round 2 | ... p1 | 56 | 54 p2 | 60 | 57
ラウンドに関連するすべての穴と tpart を取得します
Part | hole 1 | hole 2| ... p1 | 3 | 5 p2 | 5 | 6
最初のテーブルのデータを取得するには、各ユーザーのすべてのホール スコアを合計する必要があります。これは効率的な方法ですか?RndScore
または、次のよう に別のエンティティを使用する方がよいでしょうか。
RndScore
rnd RoundId
tpart TpartId
score Int
このエンティティは、穴エンティティが更新されるたびに更新される可能性があります。ただし、これらのソリューションはどちらもかなり堅牢に見えます。