2

我正在设计一个使用 Data Vault 模型的数据仓库。我的数据仓库中有一个名为 Specialty 的实体。这些专业有一个基于其代码的查找表,该查找表具有从 Specialty_CD 到描述的一对一映射。此查找表(因为专业代码可以改变含义)和我保管库中的所有卫星表都有数据条目的历史记录。

我遇到了一个奇怪的案例,我想将 Data Vault 中名为“Professional”的另一个实体链接到 Specialty 实体,其中一个专业人员可以拥有多个专业。但是,专业实体没有中心。我当前的解决方案只有一个专业中心,其中包含每个专业人士的业务密钥和业务密钥哈希,一个将专业 BK 哈希映射到专业实践的专业的专业代码的链接表,以及从专业代码到描述的查找表。这里的问题是链接表将集线器连接到查找表,而不是另一个集线器。我不禁觉得这打破了 Data Vault 模型。这是否违反了 Data Vault 模型的规则?这会破坏我整个模型的正常化吗?

我觉得为专业创建一个中心会导致额外的数据检索连接。由于专业代码已经是专业描述的唯一标识符,我宁愿只为这个专业实体提供一个查找表,而不是为我不需要的专业实体提供一个集线器和额外的卫星。尤其是因为它只是在数据仓库中服务于一个特殊代码的定义和描述的目的。

欢迎对这种情况提出任何建议。在这种情况下,通过将集线器链接到查找表是否会破坏数据库?为这个专业实体创建一个中心和卫星是否值得在检索时进行开销和额外的连接?

谢谢!

4

2 回答 2

3

您已经回答了自己的问题:“专业实践专业的专业代码”

专业显然是一个核心业务概念,是一个枢纽。它只有两个字段(代码和描述)的事实是无关紧要的。

Data Vault 适用于模式。它不是“只在数据库中服务于定义的目的”。如果它被删除,数据库仍然可以工作吗?例如,我从数据库将继续运行的地址中删除了邮政编码。我猜如果您删除了 Specialty,某些报告可能会出现问题。

当您创建原始数据保险库时,您需要习惯这样一个事实,即您将拥有更多的表(大约 7 个是一般指标)。

个人电脑

于 2017-06-22T04:01:52.070 回答
1

我认为你的模型应该是这样的

  • Specialty_HUB (HUB_ID(pk),Specialty_CD)
  • Specialty_SAT (SAT_ID(pk),HUB_ID(fk),Load_Date,Description)
  • Professional_HUB (HUB_ID(pk),Professional_PK)
  • Professional_SAT (SAT_ID(pk),(HUB_ID(fk), Professional details...)
  • Profesional_X_Specialty_LNK (LNK_ID(pk), Load_Date, End_Date, Professional_HUB_ID(fk),Specialty_HUB_ID(fk))

请注意,在此设计中,您需要链接表中的 End_Date,因为您可能需要独立于专业或专业的状态而退出单个关联,并且您需要确保您的 ETL 逻辑选择“删除” . 如果与专业相关的代码也可以更改,那么您将需要在链接表和专业 SAT 之间再增加一层抽象,以确保链接保持稳定。

于 2017-06-28T09:41:12.643 回答