这是存储这些数据的最佳方法吗?

时间:2019-03-21 21:53:41

标签: sqlite database-design relational-database

首先要说我是数据库设计的新手,但打算使用python转到我的其中一个项目的SQLite,以提高读取数据的效率。目前,我为游戏存储的数据具有树状结构,每小时记录一次。我有以下格式的文件夹树:用户名/年/月/月/日期/time.csv

我的目的是完全消除这些错误,并且在对reddit进行了一些讨论之后,提出了一些基本设计,但仍然不确定这是否是最好的。我将张贴在这里绘制的ER图:

enter image description here

因此,对每一个进行一些澄清:

  • 服务器为用户提供登录服务器(在记录时)
  • UserExperience将记录所有在一个小时内获得的经验(以及多少经验)。所以一个小时的总和
  • 这是我真的不确定的-UserActivites。这可能是一小时内可能发生的一些事件的可变文本(“我将X技能升级到Y级”,“我杀死了许多老板A的Z”,“我完成了任务B”),并且添加了更多内容,消除了加班时间,所以我无法精确地做主键。我不太确定可以在这里做什么。

任何帮助将不胜感激:D随时要求进行任何澄清。同样也不完全确定我将如何进行查询以获取两个日期之间的一组用户的统计信息,但这是一个单独的问题

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

因此,活动(在 UserActivites 中)始终与(随时间增长)活动查找表相关。活动的文本表示形式位于“活动”表中,而您只是从UserActivities表中链接到该表-到目前为止看来还不错。您已经有一个从 UserActivities.ActivityID 指向 Activities.ActivityID 的外键(对于Username到UserStatus也是一样)?

datetime只是一个时间点-无需将其放入某种组合索引中(因为主键是)。不过,您可以为将来的日期时间建立索引,以提高查询性能。

要做的是:

  • 扔掉UserActivities上的组合主键
  • 在UserActivities表(ID INTEGER PRIMARY KEY)中创建无意义的自动递增整数主键

您应该考虑的事情:

您的数据设计看起来不错。您提到了与用户活动有关的“ ”“并删除了加班” (如果我理解正确的话)。如果是这样,我将在UserActivities中为已删除记录创建一个布尔列。这样,您可以分析已删除的活动。一旦在数据库中创建记录,就永远不会删除它们。