在数据仓库中,Kimball讨论将保险单保费建模为维度和事实。我有下表,
create table dbo.DimAutoInsurance
(
DimAutoInsuranceId int primary key identity(1,1),
CustomerName varchar(100),
CustomerAddress varchar(255),
PolicyCoverageAmount numeric (15,2),
PolicyBeginDate datetime,
PolicyExpirationDate datetime
)对于事实表,我是否应该为事实重行ETL的另一个表?再次复制数据似乎是多余的。或者我应该创建一个视图?什么是最好的数据库设计策略?
create view dbo.FactAutoInsurance
as
select
DimAutoInsuranceId,
PolicyCoverageAmount numeric (10,2),
from dbo.DimAutoInsurance“一个更模糊的例子是对汽车保险单范围的限制。这个限额是一个数字数据项目,比如说碰撞赔偿责任30万美元。此外,许多查询将对此限制数据项进行分组或约束。这听起来像是一次扣篮,因为限制是覆盖维度的属性。您可以提出一些重要的查询,总结或平均处理许多策略和覆盖范围的所有限制。这听起来像是一次扣篮,因为限制是事实表中的一个数字事实。不要为维度和事实的选择而烦恼,只需用两种方式来建模就行了!在覆盖维度中包含限制,以便它以通常的方式参与约束和行标题的内容,但也将限制放在事实表中,以便在复杂的计算中以通常的方式参与。“
发布于 2019-03-15 20:02:38
您引用的金博尔网页说:
我们将数值度量放入事实表,并将文本描述符作为“属性”放入维度表中。
根据维基百科的网页Star_schema:
事实表记录特定事件的度量或度量。事实表通常由数值和保存描述性信息的维度数据的外键组成。...事实表被定义为三种类型之一:
和
与事实表相比,维度表通常有相对较少的记录,但每个记录可能有大量的属性来描述事实数据。
因此,维度表记录和事实表记录之间有一对多的关系。
在您的示例中,我希望事实表有一个日期作为字段之一,它表示该特定日期的值的时间快照。
例如,如果在两个表中都包括PolicyCoverageAmount,它将表示DimAutoInsurance表中的当前值,以及FactAutoInsurance表中特定时间的值。
是的,同样的号码将在两个地方。但是这个想法是为了优化查询,而不是规范化,所以需要一些冗余。
https://dba.stackexchange.com/questions/231203
复制相似问题