构造SQLite数据库的智能方法

2024-10-04 05:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉数据库,对它们只有非常基本的了解

我需要保存排行榜的历史数据,我不知道如何以一种好的方式保存

我将获得accountName、characterName和xp的列表

到目前为止我一直在考虑的选择:

  1. 每个帐户都有一个额外的表,我每10分钟将他们的xp添加为另一个条目(不确定在该选项中将字符名放在哪里)
  2. 我每10分钟向其中添加一个表,其中包含我在该时间间隔内获得的所有数据

我不太确定第一个选择,因为大约有2000名球员,我不知道我是否想要2000张桌子(这会有问题吗?)。但我也觉得第二个选择不是个好主意


Tags: 数据库列表间隔选项方式时间条目帐户
2条回答

通常,您希望有少量的表,每个表的行数并不重要。这就是数据库优化的目的。从技术上讲,您希望争取实现Third normal form的结构

如果你想知道哪个帐户拥有最多的xp,你会怎么做?如果每个帐户都有一个单独的表,则必须查询每个表。如果有一个包含所有帐户的表,那么它就是一个简单的查询。扩展到前15名同样是一个简单的查询

如果您有一个每10分钟有一个快照的历史记录表,随着时间的推移,它会变得相当大,但按照数据库标准,它仍然是合理的。10年内每10分钟对2000个字符进行一次快照将产生1051920000行,这可能接近the maximum number of rows in a sqlite table。但是如果你做到了这一点,我认为你最好把数据分成多个数据库,而不是多个表。您希望方便地访问历史记录有多远

感觉上,通过一些基本的尺寸建模技术,您将能够解决这个问题

具体地说,听起来你需要一个玩家维度和一个游戏事实表……也许一路上需要更多的支持表

我很高兴向你们介绍维度建模大师(IMHO):Kimball Group - Dimensional Modeling Techniques

我的建议是——在那里投入一点时间,在工具箱中放一些基本的维度建模工具,这个构建应该是非常有趣的

相关问题 更多 >