如何在维度模式中建模父子关系表

Posted

技术标签:

【中文标题】如何在维度模式中建模父子关系表【英文标题】:How to Model Parent-Child Relational Table in a Dimensional Schema 【发布时间】:2013-09-16 19:42:41 【问题描述】:

在源关系数据库中,有一个名为 CompanySurety 的表,其 INT IDENTITY PK SuretyId 具有指向父 SuretyId 行的自引用 ExtendsSuretyId FK 列。

将这些数据引入星型模式模型,我设计了 CompanySurety 事实表(到目前为止)如下:

CREATE TABLE fact_company_surety
(
    SuretyCompanyDimId INT NOT NULL,
    SuretyCoversCompanyAccountDimId INT NOT NULL,
    SuretyReplenishPaymentCompanyAccountDimId INT NOT NULL,

    -- ExtendsSuretyId -- TODO: ?????

    SuretyAmountChangeDateDimId int NOT NULL,
    SuretyEffectiveFromDateDimId int NOT NULL,
    SuretyEffectiveThruDateDimId int NOT NULL,
    SuretyExcludeCalcDateDimId int NOT NULL,
    SuretyHoldingCompanyDimId INT NOT NULL,
    SuretyLastRRQDateDimId int NOT NULL,
    SuretyMethodDimId INT NOT NULL,
    SuretyReplenishmentTypeDimId INT NOT NULL,  
    SuretyTypeDimId INT NOT NULL,

    SuretyAccountNumberDD nvarchar(100) NOT NULL,
    SuretyAmount money NULL,    
    SuretyBalance money NULL,
    SuretyDeletedFlag bit NOT NULL, 
    SuretyOverrideThresholdPercent decimal(5, 2) NULL
);

问题是,我如何以适当的维度方式对这种父子关系建模(实际上,如何在维度模型中对任何父子层次结构进行建模)?

我考虑过复制所有维度和事实列来表示父事实(因为目前,层次结构只有一层深)。但这对我来说似乎是错误的。

【问题讨论】:

总是必须在Dimension表中完成父子关系,只需使用Adwenture的示例数据库并查看Dimensions...按国家/地区有Customer维度-> City等....跨度> 【参考方案1】:

如果您知道表格上的级别数有限制,那么您可以创建列 Level1Surety、Level2Surety、Level3Surety、Level14Surety... 直到您需要的级别数。然后我总是创建一个名为 LevelLeafSurety 的列。这始终包含叶级别。

如果一个成员只有 2 个级别,您需要将级别“扩展”到叶。

如果这没有意义,请回帖,并告诉我关卡数量是否有实际限制(4、10、100?)

【讨论】:

以上是关于如何在维度模式中建模父子关系表的主要内容,如果未能解决你的问题,请参考以下文章

星型模式 - 贷款逾期日期建模

交叉引用表...维度还是事实?

星型架构[事实 1:n 维度]...如何?

如何在 Kimball 风格的数据仓库中对这种关系进行维度建模?

数据仓库维度建模法案例

关于如何在星型模式中对许多半布尔属性进行建模的问题