我正在重建一个最初使用自然密钥的大型仓库数据库,现在我想切换到代理密钥。
因此,我正在考虑将数据库分成一个物理层和一个逻辑层。
在物理层中,每个表基本上得到两个字段,如下所示:(简化案例)
tblProducts:
ProductKey bigint identity (1,1) not null primary key,
ProductID nvarchar(100) not null uniquetblSales:
RowKey bigint identity (1,1) not null primary key,
ProductKey bigint not null references tblProducts(ProductKey),
DateSold date,
UnitsSold decimal,
UNIQUE (ProductKey, DateSold)relationships.
在逻辑层中,其思想是为每个表创建视图,这些表将“隐藏”代理键,并允许我处理is。甚至数据库管理员也应该最终只处理视图!例如:
查看vwSales:
select
prd.ProductID,
sls.DateSold,
sls.UnitsSold
from tblSales sls inner join tblProducts prd on sls.ProductKey = prd.ProductKey现在,如果我想使用这个视图来工作,我需要创建触发器,这些触发器处理所有的更新/删除/插入并将其“转换”到物理层。创建所有这些视图是一项很大的工作。所以:
发布于 2020-02-12 21:27:12
虽然有一种方法可以自动创建DDL,但从经验中我可以告诉您,这不是您想要的方式。
是的,在数据仓库中创建代理密钥是最佳实践(我们是这样做的)。是的,您可以将代理键隐藏在视图或维度层中(我们也这样做),即自动创建与底层数据(除了代理键之外)基本相同的视图,这不必要地增加了您的复杂性,我相信您最终会后悔的。
爱因斯坦曾说过一句名言:“一切都应该尽可能简单,但不能简单。”
最初构建我们数据仓库的供应商在创建DDL的过程中为每个物理表创建一个视图。出于好意,这些观点提供了很少的价值,成为一个维护问题,不必要地凌乱了一个非常好的组织DW。我们最终删除了所有这些观点。
您仍然可以获得拥有不同逻辑层的好处。我建议使用视图来构造维度层。我们只向希望使用DW数据的业务用户发布“逻辑”维度层视图。
我强烈建议您研究ELT相对于传统ETL流程的好处。它彻底改变了我们的数据仓库方法,并在逻辑层实现了您可能正在寻找的好处。
https://stackoverflow.com/questions/59875389
复制相似问题