数据库结构,怎么想

Posted

技术标签:

【中文标题】数据库结构,怎么想【英文标题】:Database structure, how to think 【发布时间】:2014-03-11 12:09:46 【问题描述】:

我正在制作一个足球系统,如果我将一个球队参加过的所有比赛以及每场比赛的参与者放入其中,如果你已经得分,例如,你的个人资料中就会得到一个分数 + 1。

现在的结构是这样的:

users:
ID - Name - Games - Wins - Losses - Goals - Assist - 2min

event:
ID - opponents - Results - UserID

Participants 
ID - UserID - EventID

我想知道这是否真的是最好的方法,我发现的问题是你看不到谁在哪场比赛中得分,例如,因为我只用目标中的 +1 更新用户表。所以现在我在想这样的事情:

users:
ID - Name

event:
ID - opponents - Results - UserID

Participants 
ID - UserID - EventID - Games - Wins - Losses - Goals - Assist - 2min

这里的好处是我可以看到哪个球员在哪场比赛中得分,这真是太好了!但是在用户配置文件中,我必须使用我们正在查看的当前用户的用户 ID 计算参与者表中的所有目标,所以问题是,如果我在参与者中有大量帖子,运行该查询是否需要这么长时间?

感谢您的意见。

更新:

假设我使用第二个选项并想计算它们。

$query = "SELECT count(assist) as aassist FROM `participants` WHERE `mid`='$q'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
    while($row = $result->fetch_assoc()) 
echo $row['aassist'];

如果通过 phpadmin 手动计数,我会得到一个完全错误的数字。

【问题讨论】:

您总是可以在用户表中添加一个字段:总目标..并根据事件中的目标进行更新..而不是您只需要 1 次查询稍后获取数据,只需多一点编码添加分数.. 我也一直在考虑这个问题。而且我正在考虑这样做,从长远来看,我认为会更容易。谢谢。 这是经常预优化的症状。如果您从store every individual item of known data separately 点开始,那么您始终可以计算出每个球员、每场比赛、每个赛季等的进球数。原始的goals 字段只是缓存结果以避免重复处理,但锁定了潜在的开发范围在将来。从可以为您提供最大灵活性的粒度数据开始,并且仅在您实际将结果识别为真正的瓶颈而不是潜在的/理论上的瓶颈时才寻求缓存/预先计算结果。 【参考方案1】:

除非您有数千亿条记录,否则仅从 Participants 表中求和应该不会有任何性能问题,所以我会采用第二种方法。

【讨论】:

以上是关于数据库结构,怎么想的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何读取结构体中的数据,比如我想利用里面的数据画图

我想知道C++中怎么区分各种各种函数,有效记忆的,我现在学数据结构那里边各种函数看着头疼。谢谢。

matlab中怎样读取结构体某字段

mysql怎么把多张数据结构相同的表,合成一张视图表

我想根据id批量删除几条记录,该怎么写sql语句,我用的数据库是mysql!

JavaScript怎么使用递归将后台json数据转换成树结构