gpt4 book ai didi

postgresql - 构建数据库

转载 作者:行者123 更新时间:2023-11-29 12:13:18 25 4
gpt4 key购买 nike

在我的数据库中,我需要以下关系:

  • 锦标赛
  • 锦标赛参赛者(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

每次更新孔实体时,都可以更新此实体。不过,这些解决方案中的任何一个似乎都相当强大。

最佳答案

我的建议是:您应该始终从干净、规范化的逻辑关系数据库设计开始,不要存储冗余数据,并相信 DBMS 会很好地派生您的数据(即回答您的查询)。这就是 DBMS 的用途。下一步应该是优化您的物理数据库设计,例如,选择您的索引、您的表存储参数等。根据您的数据库,您甚至可以具体化您的 View ,以便存储它们的结果在您的逻辑数据库设计中实际添加派生值(例如您的 RndScore 关系)应该是最后的手段,因为您必须手动确保它们的一致性。

一般来说,您应该避免过早的优化:确保您确实需要优化数据库布局(例如,通过测量运行时间、检查查询执行计划、估计您必须回答的查询数量等.)

关于postgresql - 构建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com