Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于保存统计数据和保存统计数据历史记录的数据库设计_Mysql_Sql_Database_Database Design - Fatal编程技术网

Mysql 用于保存统计数据和保存统计数据历史记录的数据库设计

Mysql 用于保存统计数据和保存统计数据历史记录的数据库设计,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我目前正在做一个项目,我想保存一个用户的统计信息。让我们假设一下,我正在保存他的Facebook页面的统计数据。页面喜好、当天所有帖子的评论数、当天所有帖子的分享数 问题是,我想保存计数,但也要将数据保存为sperate表中的历史记录。我还想要这些值的最小/最大值 现在我遇到的问题如下。我将在哪里保存当天的数据,在哪里保存最大/最小值?我是否会将最新数据(包括最大/最小/当前值)保存到表facebook_页面中,并保存到facebook_历史中 现在我有几个场景 场景1:将最新数据保存在一个表中

我目前正在做一个项目,我想保存一个用户的统计信息。让我们假设一下,我正在保存他的Facebook页面的统计数据。页面喜好、当天所有帖子的评论数、当天所有帖子的分享数

问题是,我想保存计数,但也要将数据保存为sperate表中的历史记录。我还想要这些值的最小/最大值

现在我遇到的问题如下。我将在哪里保存当天的数据,在哪里保存最大/最小值?我是否会将最新数据(包括最大/最小/当前值)保存到表facebook_页面中,并保存到facebook_历史中

现在我有几个场景

场景1:将最新数据保存在一个表中

在这里,这将是简单的。当我需要一个用户的所有数据时,我只需要运行一个查询

"SELECT * FROM facebook_pages WHERE id = {ID}";
场景2:仅将最大/最小值保存到一个表中

这也是一个简单的注意事项,这里只是伪代码

"SELECT * FROM facebook_pages INNER JOIN facebook_history
WHERE id = {ID} AND checkDate = {TODAY}";
场景3:仅保存历史记录,需要数据时查询最大/最小值

这里的这个也很简单。只需查询ID,然后使用MySQL的MAX和MIN函数进行选择

如您所见,上述所有场景都很简单。我只是在想,哪一个是最好的


从数据库工程师的角度来看?从逻辑的角度来看?哪种方案最有意义?

如果我理解正确,您只需要一个包含原始收集数据的表+一个时间戳——方案3的更简单版本。然后,您可以从该表中查询以整个日期分组的最小/最大聚合。你没有多余的,那就好了

如果表变大而查询变慢,则可以在时间戳列上放置索引,如果时间戳列也变慢,则可以通过创建一个包含聚合的新表(每晚使用查询填充该表),然后从应用程序中查询该表来引入冗余

//Table 1: facebook_pages

id
facebook_page_id  
page_likes_MAX
page_likes_MIN
post_likes_MAX
post_likes_MIN
post_shares_MAX
post_shares_MIN   
post_comments_MAX
post_comments_MIN

//Table 2: facebook_history

id
facebook_pages_id (referencing the id on the table facebook_pages)
page_likes
post_likes
post_shares
post_comments
checkDate (date when the data got gathered)
"SELECT * FROM facebook_pages INNER JOIN facebook_history
WHERE id = {ID} AND checkDate = {TODAY}";
//Table 1: facebook_pages

id
facebook_page_id  
page_likes  
post_likes  
post_shares
post_comments

//Table 2: facebook_history

id
facebook_pages_id (referencing the id on the table facebook_pages)
page_likes
post_likes
post_shares
post_comments
checkDate (date when the data got gathered)