【问题标题】:Database design for a Fantasy league梦幻联赛的数据库设计
【发布时间】:2012-12-19 11:02:03
【问题描述】:

这是我的数据库的基本架构

Table user{  
      userid numeber primary key,  
      count number  
}

Table player{  
      pid number primary key,  
}

Table user-player{  
      userid number primary key foreign key(user),  
      pid number primary key foreign key(player)  
}

Table temp{  
      pid number primary key,  
      points number  
}

这就是我打算做的......

  • 在每场比赛之后,临时表都会更新,其中包含参加最后一场比赛的球员的 ID 和他们获得的积分。
  • 接下来运行一个程序,将临时表中的 pid 与具有相同 pid 的用户播放器表的每个 uid 进行匹配。
  • 将临时表中的点添加到每个匹配 uid 的用户表计数中。
  • 空的临时表。

我的问题是考虑 200 个玩家和 10000 个用户,这种方法会有效吗? 我将为此使用mysql。

【问题讨论】:

  • 我不知道临时表的用途。为什么不直接更新用户表中的分数呢?
  • 临时表是在每场比赛后为每个球员输入分数......手动或通过一些api
  • 临时表似乎没有必要。这是一个,也许是两个查询过程。哎呀 - 每小时做一个 cron 作业来查询已完成的匹配并运行“积分更新”。
  • 在 200 个玩家和 10000 个用户的情况下,您所做的几乎任何事情都可以正常工作,这对于现代数据库来说是非常小的负载
  • 谢谢你!这帮了大忙。

标签: mysql database-design


【解决方案1】:

人们似乎经常担心小型数据库的性能。 让 DBMS 做它被设计做的事情。 如果您在实践中发现 - 或者最好是在负载测试中 - 发现您有性能问题,然后采取措施来处理它。否则不要预优化

不要使用临时表来存储一批玩家得分,而是将所有玩家得分存储在事务表中。

删除user.count 列并将temp 表替换为以下内容:

Table player_points{  
      pid number primary key,  
      match_date datetime primary key, 
      points number
}

有了这个,您可以轻松计算任何用户的分数。您甚至可以重新计算任何用户在给定日期的分数。这功能更强大,维护也更简单。保留当前快照只会在出现任何问题或您的某个用户挑战他们的分数时无法管理。

此查询为您提供所有用户的分数。您可以向其添加过滤器以执行其他操作,例如查找单个用户的分数或显示排行榜。

select 
  U.userid as UserID
, sum(S.points) as TotalScore
from user S 
  inner join user-player J
    on S.userid = J.userid
  inner join player_points S
    on J.pid = S.pid
group by
  U.userid

这个查询会给你一个排行榜:

select 
  U.userid as UserID
, sum(S.points) as TotalScore
from user S 
  inner join user-player J
    on S.userid = J.userid
  inner join player_points S
    on J.pid = S.pid
group by
  U.userid
order by TotalScore desc
limit 10

此查询会为您提供按日期授予用户的积分,例如,您可以按原样或累积图表。

select 
  S.match_date as MatchDate
, sum(S.points) as TotalScore
from user-player J
  inner join player_points S
    on J.pid = S.pid
where J.userid = 123 -- The user ID you want.
group by
  S.match_date 
order by S.match_date 

【讨论】:

    猜你喜欢
    • 2017-05-21
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多