AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 24445
Accepted
JNK
JNK
Asked: 2012-09-18 12:16:47 +0800 CST2012-09-18 12:16:47 +0800 CST 2012-09-18 12:16:47 +0800 CST

我应该将事实链接到所有级别的层次维度还是仅链接到最细粒度的层次维度?

  • 772

关于同一项目的相关问题在这里。

我正在寻找两种方法来为存储 IT 基础设施数据的数据仓库中的事实表和维度表之间的层次关系建模。

举个例子:

  • FACT_Folder
    • 包含有关文件系统文件夹的事实
  • Dim_Drive
    • 文件夹链接到单个 DRIVE 条目
  • Dim_Array
    • 驱动器链接到单个阵列
  • Dim_Server
    • 阵列链接到单个服务器
  • Dim_Farm
    • 服务器链接到单个农场

出于我们的目的,我们不需要担心文件夹移动到不同的驱动器。

我们希望能够获得此层次结构所有级别的指标。

假设我最终将拥有数百万个文件夹实体(包含每日数据),以及成百上千个驱动器、阵列等;您会推荐哪种设计模式,为什么?

  1. 归一化

    • AFolder链接到 a Drive,层次结构的其余部分在维度之间
  2. 非规格化 I

    • AFolder链接到 a Drive,但维度包含每一行的每个条目Drive的整个层次结构Drive
  3. 非规格化 II

    • AFolder直接链接到层次结构的所有级别
  4. ??????

database-design data-warehouse
  • 1 1 个回答
  • 1255 Views

1 个回答

  • Voted
  1. Best Answer
    Cade Roux
    2012-09-18T12:45:40+08:002012-09-18T12:45:40+08:00

    我会在所有/大多数级别进行链接。这个非规范化的星号意味着是的,数据是冗余的,但它通常会使报告和分析变得容易得多。请注意,这与 OLTP 规范化有很大不同,您通常不必担心冗余数据不同步,因为在 DW 场景中数据永远不会更改。添加新事实,维度过期并创建新事实。

    我没有看到 Dim_Folder。我假设文件夹的实际路径是 Dim_Folder 的一个属性。只有数字数量和任何退化维度 (http://en.wikipedia.org/wiki/Degenerate_dimension) 会出现在事实表中。我不会将文件夹路径视为退化维度,因为它会在每个快照中不断返回(文件夹不是事务)。

    所以你可以这样做:

    SELECT AVG(bytes_on_disk)
    FROM FACT_Folder
    INNER JOIN DIM_Folder
        ON FACT_Folder.FolderDimID = DIM_Folder.DimID
    INNER JOIN DIM_Date
        ON FACT_Folder.SnapshotDateID = DIM_Date.DateID
    WHERE DIM_Date.Date BETWEEN '20120101' AND '20121231'
        AND DIM_Folder.FolderPath = '/usr/bin/'
    

    查看 DIM_Folder 的使用如何使 dim id 集变小,然后,我们假设在快照日期和文件夹 dim id 上有某种索引(反之亦然)。

    如果您只想要更高级别的数据,请了解您现在如何根本不需要加入文件夹。由于您通常在 ETL 时就知道所有这些,因此与 OLTP 系统有不同的动机,在 OLTP 系统中,您希望在某些内容发生变化时一切都一起移动(腿骨连接到大腿骨等)。在 DW 场景中,您真的不想移动任何东西。

    所以,砰!- 总农场使用分析:

    SELECT DIM_Farm.Farm_Name, SUM(bytes_on_disk)
    FROM FACT_Folder
    INNER JOIN DIM_Farm
        ON FACT_Folder.FarmDimID = DIM_Farm.DimID
    INNER JOIN DIM_Date
        ON FACT_Folder.SnapshotDateID = DIM_Date.DateID
    WHERE DIM_Date.Date BETWEEN '20120101' AND '20121231'
    GROUP BY DIM_Farm.Farm_Name
    

    记住星星对于分析来说真的很简单。您永远不需要担心单个非雪花星中的无意交叉连接。连接不同的星星时,您一定要小心。所以大多数情况下的查询在星型模式中要简单得多。没有网络遍历和担心像在规范化模型中那样的多对多关系。

    • 5

相关问题

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve