我正在研究两种方法来对数据仓库中的事实表和维度表之间的分层关系进行建模,以存储IT基础结构数据。
举个例子:
FACT_Folder Dim_Drive Dim_Array Dim_Server Dim_Farm 为了我们的目的,我们不需要担心文件夹移动到不同的驱动器。
我们希望能够在这个层次结构的所有级别上获得度量。
假设我最终将拥有数百万个文件夹实体(包含每日数据),以及数百或数千个驱动器、数组等;您会推荐哪种设计模式,以及为什么?
Folder链接到一个Drive,而层次结构的其余部分在维度之间Folder链接到一个Drive,但是Drive维度包含每一行的每个Drive条目的整个层次结构Folder直接链接到层次结构的所有级别。发布于 2012-09-17 20:45:40
我会在所有/大部分级别进行链接。这个非正态化恒星意味着是的,数据是多余的,但它通常会使报告和分析更加容易。请注意,这与OLTP规范化非常不同,您通常不必担心冗余数据不同步,因为在DW场景中,数据永远不会改变。新的事实被添加,维度被过期,新的被创建。
我没看到Dim_Folder。我假设文件夹的实际路径是Dim_Folder的一个属性。事实表中只有数字数量和任何退化维度(http://en.wikipedia.org/wiki/Degenerate_尺寸)。我不认为文件夹路径是一个退化维度,因为它总是在每个快照中返回(一个文件夹不是一个事务)。
所以你可以这样做:
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记住,星星分析起来真的很简单。你不需要担心不经意间的交叉连接在一颗没有雪花的星星上。当连接不同的星星时,你必须小心。因此,在大多数情况下,查询在星型模式中要简单得多。没有网络穿越和担心许多-许多关系,如在一个规范化的模型。
https://dba.stackexchange.com/questions/24445
复制相似问题