gpt4 book ai didi

mysql - 用于保存统计数据并保存统计历史记录的数据库设计

转载 作者:行者123 更新时间:2023-11-29 23:01:49 24 4
gpt4 key购买 nike

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

问题是,我想保存计数,但也将数据作为历史记录保存在单独的表中。我还想获得这些值的最小/最大值。

现在我遇到的问题如下。我到底应该在哪里保存当天的数据,在哪里保存最大/最小值?我是否会将包括 max/min/current 值在内的最新数据保存到表 facebook_pages 中,并保存到 facebook_history 中?

现在我有几种情况

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

//Table 1: facebook_pages

id
facebook_page_id
page_likes
page_likes_MAX
page_likes_MIN
post_likes
post_likes_MAX
post_likes_MIN
post_shares
post_shares_MAX
post_shares_MIN
post_comments
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 WHERE id = {ID}";

场景 2:仅将最大/最小值保存到一个表中

//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}";

场景三:仅保存历史记录,需要数据时查询Max/Min

//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)

这个也很简单。只需查询ID,然后使用MySQL的MAXMIN函数进行选择即可。

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

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

最佳答案

如果我理解正确的话,您只需要一张包含“原始”收集数据+时间戳的表(场景 3 的简单版本)。然后,您可以从该表中查询按整个日期分组的最小/最大聚合。那么你就没有冗余了(很好)。

如果表变大并且查询变慢,您可以在时间戳列上放置索引,如果这也变得太慢,您可以通过创建一个带有聚合的新表来引入冗余,每天晚上用查询填充该表然后从您的应用程序中查询该表。

关于mysql - 用于保存统计数据并保存统计历史记录的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28451149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com