我正在尝试了解OLAP和数据仓库,并且对关系建模和维度建模之间的区别感到困惑。尺寸建模基本上是关系建模,但允许冗余/非标准化数据?

例如,假设我拥有有关(产品,城市,#销售)的历史销售数据。我了解以下是关系点:

Product | City | # Sales
Apples, San Francisco, 400
Apples, Boston, 700
Apples, Seattle, 600
Oranges, San Francisco, 550
Oranges, Boston, 500
Oranges, Seattle, 600

虽然以下是一个更维的观点:

Product | San Francisco | Boston | Seattle
Apples, 400, 700, 600
Oranges, 550, 500, 600

但是,似乎两种观点都将在相同的星形架构中实现:

Fact table: Product ID, Region ID, # Sales
Product dimension: Product ID, Product Name
City dimension: City ID, City Name

直到您开始向每个维度添加一些其他细节之前,差异才开始弹出。例如,如果您也想跟踪区域,则关系数据库将倾向于拥有一个单独的区域表,以使所有内容都归一化:

City dimension: City ID, City Name, Region ID
Region dimension: Region ID, Region Name, Region Manager, # Regional Stores

虽然尺寸数据库将允许将区域数据保持在城市维度内,以便更轻松地切成数据:

City dimension: City ID, City Name, Region Name, Region Manager, # Regional Stores

它是否正确?

有帮助吗?

解决方案

星模架子确实在于数据的关系模型和数据的维数模型的交集。这确实是从维度模型开始的一种方式,并将其映射到SQL表中,如果您从关系模型开始,则与您获得的SQL表相似。

我说有点类似,因为许多关系设计方法会导致标准化设计,或者至少是几乎归一化的设计。星模架将与完全正常化有很大的不同。

与完全正常化的每一次偏离都随之而来的是数据更新异常。 (我在一个保护伞下包括插入,更新和删除操作的Anomlaies)。这些异常与您最初的数据模型无关。

关于OLTP与OLAP的评论在这里很重要。在这两种情况下,更新异常将对性能和/或编程难度产生不同的影响。

除了在SQL数据库中使用Star模式外,还有该产品以物理形式存储数据的维度数据库产品。有了这些产品,您看不到明星架构的直接实现,即尺寸模型的直接实现,也是该产品可能是特殊的界面。其中一些接口允许OLAP操作完全点击。

就像与您的问题的离题一样,我曾经在支持基于交易的应用程序和Cognos PowerPlay中支持基于交易的应用程序和DataCube的OLTP数据库之间建立了星形架构。使用标准的ETL技术,从OLTP数据库到星形模式的合并传输实际上从星形架上到数据立方体实际上优于从OLTP数据库到DataCube的直接传输。这是一个意外的结果。

希望这可以帮助。

其他提示

简单地说,OLTP归一化数据库的设计具有最佳的“交易”观点。将数据库归一化以最佳地适用于交易系统。当我说对交易系统的优化时,我的意思是。要进入数据库结构的设计状态,在该状态下,删除,插入,更新和选择等所有交易操作都是平衡的,以在任何时间点在所有时间点具有相等或最大的重要性。它们在交易系统中同样受到重视。

以及一个归一化系统提供的..数据更新可能的最小更新,最小的新条目插入,一个类别删除的一个位置删除等(例如新产品类别)...所有这些都是我们的所有这些,我们可能是我们分支机构创建主人表.....但这是以“选择”操作延迟为代价的。但是,正如我所说的那样(归一化)并不是所有操作的最有效型号..它的“最佳” ...说我们得到了其他方法增强数据获取速度..例如索引等

另一方面,尺寸模型(主要用于数据软件房屋设计)。用于仅对一种数据选择的一种操作,就像数据软件室中的选择一样。DATAUPDATE/INSERTION定期发生。 。这是一次性的成本。

因此,如果一个人尝试调整归一化的数据结构,以便在任何时间点仅选择是最重要的操作……我们最终将获得一个不符合的(我想说部分非规范化)。尺寸恒星结构。

  • 所有外国钥匙一个一个地方事实 - 维度连接的尺寸(即主表到主表)。雪花代表相同的维度
    • 理想设计的事实仅携带数字。MEASISER或外国钥匙
    • 维度用于携带描述和非汇总信息
    • 数据的冗余被忽略...但是在极少数情况下,如果尺寸本身生长得太多。Snowflake设计被视为选项。.但是仍然可以避免

有关详细信息,请浏览有关此主题的详细书籍。

我最近刚刚阅读了维度和关系数据建模之间的差异,因为我们主要使用我的业务中的关系模型,在该模型中我们存储了企业数据仓库(EDW)。

史蒂夫·霍伯曼(Steve Hoberman)在他的书《数据建模变得简单》一书中说,这两种模型之间的区别是:

  • 关系数据模型捕获业务解决方案的一部分,又称业务流程
  • 维度数据模型捕获了企业需要回答有关其状况如何的详细信息

可以说,关系模型也可以用作回答业务问题的基础,但在战术层面上。 “由于信用持有,有多少个处于未实现客户X状态的订单?”但是,区别在于报告问题需要表的“本地谷物”,以及何时可以通过汇总数据回答报告问题。

在您的上面两个示例中,它们实际上都是维度数据建模的示例,因为两个表都没有将销售订单存储在其“本地谷物”中,因此没有捕获创建销售订单的业务流程。两张表之间的唯一区别是,在第二个表中,城市维度已被转移到事实表中。

我找到了我在 http://www.orafaq.com/node/2286 从关系的角度来到Star Schema时非常有帮助。

考虑一个完全归一化的数据模型。现在想一想完全相反的情况,您将关系数据模型完全归一般,以便您只有一个平坦的记录,例如一个带有非常宽的行的大ol电子表格。现在,从这个平坦的记录中返回,只需一点,您就有一个只有两个级别的数据模型。一张大桌子,大桌子指向的几个小桌子。这是星形架构。因此,真正的星数据模型具有两个属性,它始终是两个级别的深度,而真正的恒星模型总是只包含一个大型桌子,该表是模型的焦点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top