1

伙计们,

快速版本:当我的 HUB_SAT 中有多个域查找引用时,我应该如何对 HUB、SAT 和 LINK 建模?如果您要从源模式中对这些进行通用建模,您将如何区分应该是 LINK 的 FK 和应该是 References 的 FK?

长版:

我正在构建一个通用解决方案,用于从现有的 3NF MSSQL 模式生成 DV 模型。在我的源数据库中,我有一个巨大的域引用表,其中包含大部分业务查找键

  • 键 INT(唯一)
  • 类型 ID INT
  • 说明 VARCHAR
  • 发布代码
  • ...与讨论无关的其他一些领域

如我所见,链接到此表有四种基本选择

  1. 将其创建为 HUB,然后为每个引用它的业务 HUB 生成 LINK 表
  2. 将其创建为单个 ReferenceLookup 表并在 SAT 表中包含 R_ReferenceID
  3. 使用 R_ReferenceID 为每个 TypeID 和来自 SAT 的链接创建一个单独的 ReferenceLookup 表
  4. 为每个 TypeID 创建单独的 HUB 并生成 LINK 表
  5. 使用 LINK_SAT 表创建单个 LINK 表,以保存 LINK 映射的参考值的详细信息

其中#3 感觉是最好的设计(但也是最难正确建模的——尤其是在我的情况下,查找表对类型表有一个 FK)

从 Wikipedia for DataVault中,参考表是从卫星中引用的,但从未与物理外键绑定。

我的通用代码基于BIML DataVault 演练中解释的设计模式

我正在查看源模式中的所有表,以确定它们是 HUB(有 PK 和多个 FK 以及不是 FK 的字段)、SAT(有 PK 并且只有一个 FK)还是 LINK(有 PK,多个 FK并且所有字段都在PK / FK中)

然后我建立:

  • 具有 HUB_ID 和源 PK 的 HUB
  • 具有 HUB 源表的非 FK 字段的 SAT
  • 源 SAT 表的 SAT
  • 来自源 LINK 表的 LINK
  • 来自 HUB FK 关系的链接

这一切都达到了一定程度(即我有上面所有的表格)但是有一些非常宽的表格,其中大量的字段只是 R_RefID 字段,所有字段都在同一个 HUB 上查找,并且它们都与引用参考表的实体表上的 FK

EG 源资产表具有以下参考字段 - 资产类型 - 资产用途 - 资产经理 - 资产出资者 - ...

所以在初步模型中我有:

  • ASSET_HUB (HubID, Asset_ID)
  • ASSET_SAT (SAT_ID, BuildDate, DisposalDate, ....)
  • Lookup_HUB (Hub_ID, LookupID)
  • ASSET_Lookup_1_LINK) (Link_ID,ASSET_HUB_ID,Lookup_HUB_ID)
  • ASSET_Lookup_2_LINK) (Link_ID,ASSET_HUB_ID,Lookup_HUB_ID)
  • ASSET_Lookup_3_LINK) (Link_ID,ASSET_HUB_ID,Lookup_HUB_ID)
  • ASSET_Lookup_4_LINK) (Link_ID,ASSET_HUB_ID,Lookup_HUB_ID)

但是无法确定每个 LINK 表在域模型中代表什么

您将如何询问模式以确定该表是否是真正的 HUB 候选表,或者它是否应该是 REF 表,以及您将如何确定 FK 应该被视为 LINK 还是 SAT.R_RefID。我追求的是策略而不是代码(但我不会拒绝提供的代码:))我的源数据库是 SQL2008R2,我的开发环境是 SQL2016_Dev

回应 tobi6:

在源系统中,业务实体有许多属性字段,它们只是 XXX_ID 类型,它们从域引用表中查找它们的描述符。如果您将此域引用表建模为 HUB,那么您要么必须为每个查找有单独的链接表(LINK 表是自动生成的,因为业务实体上有一个 FK),或者具有 LINK_SAT 的多个活动 LINK 记录来识别哪个您正在跟踪的属性(实际上这会创建第 5 个设计模式选项)。如果我将域引用表标记为 REFerence,那么 XXX_ID 将保留在 HUB_SAT 中,这感觉像是一个更好的解决方案,但一般难以建模。即我如何确定业务实体 FK 是否应该创建 LINK、LINK 和 LINK_SAT 或 SAT.R_RefID

4

0 回答 0