(这是我提出的第一个问题所以请在这里与我一起讨论)
我在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运行OS 1,另一个运行OS 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中构建一个可以向我显示一个服务器具有多个组件的多维数据集。
答案 0 :(得分:0)
您可以创建定义NetworkGroup
的表格(或维度):
CREATE TABLE NetworkGroup (
NetworkGroupID int not null PRIMARY KEY,
Name nvarchar(50) null
);
然后使用你的"桥接"表(a.k.a。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)
);