【问题标题】:How to structure data for users based on date in a MySQL database如何根据 MySQL 数据库中的日期为用户构建数据
【发布时间】:2012-03-08 01:38:45
【问题描述】:

我正在开发一个 zend 项目,该项目具有基于用户记录分钟数的功能。它需要能够根据日期范围生成报告。我希望有人可以帮助我找出处理存储该信息的最佳方法。

我正在使用用户表来处理所有重要的个人资料信息。我想最好的情况是将其链接到另一个表以跟踪分钟......我只是没有考虑它应该如何布局。我看到一些页面建议使用数据库中的列作为日期,但在我看来,它很快就会变得难以管理。

当前网站有 1500 个用户,每天有多个用户提交...我只是不知道我是怎么做的。

任何帮助都会很棒。 谢谢

【问题讨论】:

  • 嗯,你能详细解释一下用户记录的分钟数是什么意思吗?他们是手动完成的,还是“在网站上花费的时间”?
  • 手动输入。实际上,导师可以输入学生在任何一天阅读的时间。

标签: mysql database zend-framework database-design zend-db


【解决方案1】:

一种方法,基于我认为您正在寻找的:

创建一个包含 User_ID FK、Start_Time 和 End_Time 的 User_Session 表。每次用户开始和结束会话时,都会向该表写入一个新行。您可以在登录时获取这些 User_ID 和 Start_Time,并在会话结束或用户注销时获取 End_Time。

现在您有一个历史表,其中包含 [1500 个用户] x [每天的会话数],我认为它很大,但并非难以想象。 (特别是查看它是如何正确索引的等等。)您可以针对您需要的任何日期范围对该表运行查询,例如 SELECT User_ID, SUM(End_Time - Start_Time) 。

要控制表大小,您可以依次存储这些聚合值(User_ID、MMYY、Num_Minutes)并按某个设定的时间表截断源表。但是,存储计算字段可能不如手头有标准化数据。因此,在您确定源表大小是一个大问题之前,也许不要走那条路。

只是众多方法中的一种,为了清楚起见,过于简单化了。

【讨论】:

  • 这是有道理的。这也解释了我计划在以后使用的部分功能,因此也感谢您。
  • 如果可以的话,请向您提出另一个问题...我对这种大小的数据库有点新,您会说数据库在什么时候变得“太大”?我知道这完全取决于文件大小、服务器等。我只是想大致了解一下你什么时候会看到它导致问题。
  • 100,000+ 行应该没问题。关键考虑因素是设计良好的表(您只是存储必要的键,没有多余的数据)和索引(针对您打算查询的字段选择适当的索引。)当然服务器速度和文件大小很重要,但这不是十次中有九次会烧伤你。
  • 为了更进一步,请记住“性能”问题的两个方面:您的 Web 应用程序必须快速写入表,并且您的报告需要足够快速地选择。前者可能对您网站的健康更重要(当然,负责报告的人除外。)
  • 我们的数据库中有数百万行的表。主要是记录数据,不经常使用,但适合历史分析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多