首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用代理键将数据库拆分为物理层和逻辑层

使用代理键将数据库拆分为物理层和逻辑层
EN

Stack Overflow用户
提问于 2020-01-23 09:37:42
回答 1查看 89关注 0票数 0

我正在重建一个最初使用自然密钥的大型仓库数据库,现在我想切换到代理密钥。

因此,我正在考虑将数据库分成一个物理层和一个逻辑层

物理层中,每个表基本上得到两个字段,如下所示:(简化案例)

tblProducts:

代码语言:javascript
复制
ProductKey bigint identity (1,1) not null primary key,
ProductID nvarchar(100) not null unique

tblSales:

代码语言:javascript
复制
RowKey bigint identity (1,1) not null primary key,
ProductKey bigint not null references tblProducts(ProductKey),
DateSold date,
UnitsSold decimal,
UNIQUE (ProductKey, DateSold)

relationships.

  • The "ID“字段始终是所有外键
  • 字段中唯一的nvarchar。用户将始终使用"ID“,永远看不到”键“。

逻辑层中,其思想是为每个表创建视图,这些表将“隐藏”代理键,并允许我处理is。甚至数据库管理员也应该最终只处理视图!例如:

查看vwSales:

代码语言:javascript
复制
select 
    prd.ProductID,
    sls.DateSold,
    sls.UnitsSold
from tblSales sls inner join tblProducts prd on sls.ProductKey = prd.ProductKey

现在,如果我想使用这个视图来工作,我需要创建触发器,这些触发器处理所有的更新/删除/插入并将其“转换”到物理层。创建所有这些视图是一项很大的工作。所以:

  • 有办法“自动”创建这样的视图吗?
  • 到底是将数据库拆分成物理层和逻辑层的好方法吗?
EN

回答 1

Stack Overflow用户

发布于 2020-02-12 21:27:12

虽然有一种方法可以自动创建DDL,但从经验中我可以告诉您,这不是您想要的方式。

是的,在数据仓库中创建代理密钥是最佳实践(我们是这样做的)。是的,您可以将代理键隐藏在视图或维度层中(我们也这样做),即自动创建与底层数据(除了代理键之外)基本相同的视图,这不必要地增加了您的复杂性,我相信您最终会后悔的。

爱因斯坦曾说过一句名言:“一切都应该尽可能简单,但不能简单。”

最初构建我们数据仓库的供应商在创建DDL的过程中为每个物理表创建一个视图。出于好意,这些观点提供了很少的价值,成为一个维护问题,不必要地凌乱了一个非常好的组织DW。我们最终删除了所有这些观点。

您仍然可以获得拥有不同逻辑层的好处。我建议使用视图来构造维度层。我们只向希望使用DW数据的业务用户发布“逻辑”维度层视图。

我强烈建议您研究ELT相对于传统ETL流程的好处。它彻底改变了我们的数据仓库方法,并在逻辑层实现了您可能正在寻找的好处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59875389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档