我正在SQL Server 2012中设计一个数据仓库数据库,用于创建一个多维数据集。假设我在原始关系数据库中有3个表
Supplier (SupplierId, SupplierName .....)
Invoice (InvoiceId, SupplierId, InvoiceCode, InvoiceName, InvoiceTotal ...)
InvoiceLineItem (InvoiceLineItemId, Description, InvoiceId, Rate, Count, Total)
我想将其转换为仓库数据库。所以我创建了3个维度和2个事实表
DimSupplier (SupplierId, SupplierName .....)
DimInvoice (InvoiceId, InvoiceCode, InvoiceName ....)
FactInvoice (InviceId, SupplierId, InvoiceTotal)
DimInvoiceLineItem (InvoiceLineItemId, Description)
FactInvoiceLineItem (InvoiceLineItemId, InvoiceId, SupplierId, Rate, Count, Total)
我的问题是我不确定外键的最佳方法是什么。我应该将SupplierId密钥从 FactInvoice 和 FactInvoiceLineItem 分别移动到 DimInvoice 和 DimInvoiceLineItem 中,那么事实可以弄清楚这一点查看 DimInvoice 或 DimInvoiceLineItem 的信息。这里最好的方法是什么?我知道最好尽量保持平坦。这里有任何帮助,因为我对数据分析还很陌生?
答案 0 :(得分:1)
我认为你根本不需要FactInvoice
表。它唯一提供的是InvoiceTotal
,它应该是FactInvoiceLineItem.Total
的总和。省略这个表会使结构变得相当简单:只有一个事实表和三个维度。
顺便说一句:我没有看到任何日期维度。将其作为与当前位置分开的维度提取可能是有意义的,可能是DimInvoice
。您可能希望添加“日期组字段”,如“月”,“季度”,“年”,具体取决于用户请求“星期几”,“一年中的周数”等。