对数据进行非规范化以适应星型模式

时间:2018-03-22 14:55:35

标签: sql sql-server denormalization star-schema fact-table

我正在研究将数据从OLTP移动到OLAP以帮助加速分析。我现在已经研究了我目前的问题2天,并且没有在任何地方找到确定的答案。目前,我有一个高度规范化的关系模式,在将数据转换为星型模式的事实表和维度表时,我很难弄清楚如何保留分层数据。有没有办法在保持从关系模式中获取的父表和子表的值的同时,使事实表完全精细化并规范化?我不确定我是否正确地提出这个问题,所以这里有一个例子:我记录了钓鱼之旅的数据。我必须记录旅行和捕获的数据,因此我将这些数据存储在两个主要表格中(下面是简化版本):

旅行(三联,日期,装备数量,捕捞时间,参与者)

Catch(tripid,species,disposition,count)

如何使用此方法创建一个事实表并保留齿轮数量,捕捞时间,参与者和物种数量,同时保持事实表的标准化?我可以考虑制作事实表的唯一方法如下:

事实(日期,种类,处置,装备数量,捕捞时间,参与者,数量)

日期,种类和处置是维度表的FK,其余列是可量化的值。但是,这将完全非规范化。这是一种合适的方法,还是有另一种方法可以保持父表和子表之间的关系具有可量化的值,并将其置于星型模式中?

1 个答案:

答案 0 :(得分:0)

Fact(tripid, species, disposition, count)

Dim Trip(date, gear quantity, hours fished)
    Dim Gear(gear quantity) -- not necessary, really/possibly)
    Dim Participants(partipicant)

这应该有效,但不知道关系的细节。

你还在评论中说:'......我正试图获得更好的表现......'。我会敦促你不要这样做,直到你有一个可行的架构,然后可以实际测量你得到的性能。预先设计性能问题被称为Premature Optimisation并且通常不是一件好事。