反规范化 SQL Server 表

Posted

技术标签:

【中文标题】反规范化 SQL Server 表【英文标题】:De-normalizing SQL Server tables 【发布时间】:2016-04-12 22:41:23 【问题描述】:

表格布局:

.Net 应用程序正在捕获 4 个表中的数据

A1(对其他 3 个查找表有 FK) LK_C1(转至 A1 和 LK_R1、LK_R2 和 A1) LK_R1(转至 LK_C1 和 LK_R2 和 A1) LK_R2(转至 LK_C1 和 LK_R1 和 A1)

现在有些情况下LK_C1LK_R2 的关系跳过LK_R1

将其制作成 OLAP 表。

我知道A1 将变成一个事实表,其中包含各种键以及我可能需要的任何其他常用维度键。

    但是设计查找表(以上 3 个 LK)。我应该将其创建到 1 维表中吗?

    我应该把它分解成二维表

    a) LK_C1 和 LK_R2 之间有直接关系的地方

    b) 所有 3 个 LK 都是相互关联的。

在方法 2 中,我将在 A1 事实表中添加 2 个额外的复合键引用 一个用于 LK_C1 + LK_R2 的组合,例如 column_7 和 column_8 中的 LK_C1 + LK_R1 + LKR2。

将其制成星型模式的正确方法是什么?

【问题讨论】:

考虑阅读下一个 SO:***.com/questions/36485432/… 中提到的帖子。然后我建议检查维度关系:msdn.microsoft.com/en-us/library/ms166560.aspx 【参考方案1】:

架构师接受的解决方案是将 3 次查找的所有组合放入 1 维表中以形成层次结构。 从这个新维度表中获取标识键并将其放入 Fact 表中。 使用 Merge 语句实现。 因为这是一个简单的 .Net 表转储,用于从 s-s-rS 进行快速查询;需要聚合。解决方案被认为是一个简单的解决方案。 感谢所有的帮助和意见。

【讨论】:

以上是关于反规范化 SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server之数据库规范——1自动化规范命名

SQL Server 中层次结构和规范化的建议

在 SQL Server 2008 中使用 Unpivot 或 Cross Apply 规范化数据

在 SQL Server 中自动更新冗余/非规范化数据

使用 SQL Server 进行实时聚合和非规范化的架构推荐

SQL Server 数据库规范