【问题标题】:Table Design for Data with multiple Granularity多粒度数据的表设计
【发布时间】:2021-03-07 15:18:45
【问题描述】:

我一直在尝试了解数据建模和仓储,鉴于表中只有一种粒度的最佳实践,我可以让一张表同时存储低粒度数据和聚合数据。

2 表结构

表 1

TransactionID   Transaction_Dt  ProductID   Items   Cost_Total
11111           1/1/2020        1           10      100
11111           1/1/2020        2           5       200
11111           1/1/2020        3           4       400
11111           1/1/2020        4           5       100
11111           1/1/2020        5           6       600
11111           1/1/2020        6           10      100

表 2(汇总)

TransactionID   Transaction_Dt  Total_Items Cost_Total
11111           1/1/2020        40          1500

单表结构

汇总表中的数据

TransactionID   Transaction_Dt  ProductID   Items   Cost_Total  Type
11111           1/1/2020        1           10      100         ind_Item
11111           1/1/2020        2           5       200         ind_Item
11111           1/1/2020        3           4       400         ind_Item
11111           1/1/2020        4           5       100         ind_Item
11111           1/1/2020        5           6       600         ind_Item
11111           1/1/2020        6           10      100         ind_Item
**11111         1/1/2020        ALL         40      1500        all_Item**

这里我们为整个交易记录了一个记录,其中包含所有项目的总和和所有成本的总和。

谁能帮我解决第二种方法的缺点,我们在同一个表中汇总数据

【问题讨论】:

  • 在您的combined 表中简单询问交易的总成本,您很可能会得到两倍的结果。这对于 NO GO 来说已经足够了。

标签: data-modeling data-warehouse


【解决方案1】:

对此的一些想法:

  1. 由于@Marmite Bomber 建议的原因,我不喜欢在一个表中存储多个聚合级别的数据 - 如果您进行选择总和并且不过滤掉聚合,您将获得多个您正在寻找的答案。
  2. 如果您仍想将所有内容放入一个表中,我会添加另一列,可能称为 agg_level,并指示该表中行的聚合级别。 (尽管类型是一个非常含糊的术语,但您已经在使用“类型”列这样做了)。
  3. 我建议不要更改 TransactionID 值(您建议添加一些星号来表示它是一个聚合)。修改它会使搜索你想要的变得更加困难,并且用户必须理解你的符号才能获得正确的记录。如果您确实添加了 agg_level 列并将 TransactionID 保留为原始形式,则可以在 agg_level 列中放置一个易于识别的术语。例如,记录可以是“原始”、“交易总额”或“每月汇总”...
  4. 如果您必须将聚合放入基本数据表中,就像您展示的那样,您应该考虑在表的顶部创建视图,每个视图只提供一个聚合级别的详细信息。您可能只允许用户访问这些视图,而不是基础数据。通过这种方式,您可以将每个人都存储在一个表中,但是对于用户来说,您似乎有多个表,您不必担心用户不小心误写了一个带回重复总数的查询。

这是一个很好的问题,Snehasish,它表明您一直在思考这个问题。祝您顺利应对未来的需求!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多