sql多值维度
Posted
技术标签:
【中文标题】sql多值维度【英文标题】:sql multi value dimension 【发布时间】:2014-12-03 08:43:12 【问题描述】:(这是我问的第一个问题,请大家多多包涵)
我在 SQL Server 2014 Enterprise 上创建了一个数据仓库,我正在努力将一个事实映射到一个维度中的多个值。
想象一个数据中心,其服务器为特定服务和客户保留。 这些服务器具有特定的组件,例如网络适配器、CPU 或操作系统。
我的事实表中的几行如下所示:
ServerID CustomerID OSID ServiceID NetworkGroupID CPUID
1 1 1 1 1 1
2 1 2 1 2 1
3 2 1 2 2 2
服务器 1 和 2 属于客户 1。服务器 1 运行操作系统 1,另一个操作系统 2。两者都提供服务 1。 服务器 1 有一组被标识为“1”的网络适配器,另外 2 个。这些组包含多个网络适配器(一些是虚拟的,一些是物理的)。
我的网络维度具有属性 ID 和 NetworkAdapterName,我需要 ID 多次出现,如下所示:
ID NetworkAdapterName
1 IntelAdapter#1
1 IntelAdapter#2
1 VirtualAdapter#1
2 IntelAdapter#1
2 DellAdapter#1
3 VirtualAdapter#1
3 VirtualAdapter#2
我想我需要某种子维度来充当这样的桥梁:
NetworkGroupID NetworkID
1 1
1 2
1 3
2 1
2 5
3 3
3 4
NetworkID NetworkAdapterName
1 IntelAdapter#1
2 IntelAdapter#2
3 VirtualAdapter#1
4 VirtualAdapter#2
5 DellAdapter#1
但是,既然有多个与 NetworkGroupID 具有相同值的外观,我该如何定义从事实表到桥接维度的主键或关系呢?
(CPU 和操作系统也是如此,但一旦我让它为网络适配器工作,我也可以为其他组件做这件事。)
编辑: 最后,我想在 SSAS 中构建一个多维数据集,它可以向我展示一台服务器拥有的多个组件。
【问题讨论】:
【参考方案1】:您可以创建一个表(或维度)定义NetworkGroup
:
CREATE TABLE NetworkGroup (
NetworkGroupID int not null PRIMARY KEY,
Name nvarchar(50) null
);
然后使用您的“桥”表(又名Junction Table)将其与您的Network
表连接起来:
CREATE TABLE NetworkGroupNetwork (
NetworkGroupID int not null,
NetworkID int not null,
CONSTRAINT PK_NetworkGroupNetwork
PRIMARY KEY (NetworkGroupID, NetworkID),
CONSTRAINT FK_NetworkGroupNetwork_NetworkGroup
FOREIGN KEY (NetworkGroupID)
REFERENCES NetworkGroup (NetworkGroupID),
CONSTRAINT FK_NetworkGroupNetwork_Network
FOREIGN KEY (NetworkID)
REFERENCES Network (NetworkID)
);
【讨论】:
Design Tip #124 Alternatives for Multi-valued Dimensions 也值得一读。 这是我的想法,但我如何才能创建从 PK NetworkGroup 到 NetworkGroupNetwork 中的复合 PK 的约束? 反之亦然;约束是从NetworkGroupNetwork
中的一列到NetworkGroup
的PK。类似于 Fact 表(CustomerID 列)和 Customer 表之间的内容。
我现在觉得很傻,当然可以:D 看起来很有希望,我需要再花几分钟来验证结果。我仍然需要弄清楚如何在 SSAS 中将它们放入我的立方体中
完全正确;)感谢您的帮助!在 SSAS 中,我必须将 NetworkGroupNetwork 定义为另一个度量组(事实表),并通过 NetworkGroupNetwork 在我的原始事实表和 dimNetwork 之间建立多对多关系以上是关于sql多值维度的主要内容,如果未能解决你的问题,请参考以下文章
考虑到它具有一对多的关系 [Dim 1: many Fact],如何在星型模式中表示多值维度?