2

私のデータベースでは、次の関係が必要です。

  • トーナメント
  • 大会参加者(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

このエンティティは、穴エンティティが更新されるたびに更新される可能性があります。ただし、これらのソリューションはどちらもかなり堅牢に見えます。

4

1 に答える 1