如何在没有强关系键(外键)的情况下在数据库中创建 LINK?

Posted

技术标签:

【中文标题】如何在没有强关系键(外键)的情况下在数据库中创建 LINK?【英文标题】:How to create the LINK in data vault without having strong relationship keys (Foreign Keys)? 【发布时间】:2021-10-17 20:30:16 【问题描述】:

我们的销售代表致电 Leads 以提出服务建议。潜在客户存储在 Crm 中,具有以下属性:LeadId、PrimaryContactNumber、SecondaryContactNumber。所有通话均通过 Teams 完成并记录下来。可以通过 Microsoft Graph Api 提取呼叫并具有以下属性:CallId、UserId、CalleeNumber、CallerNumber、Duration。用户具有以下属性:用户 ID、用户名、电子邮件。当外键未知时,如何使用数据库建模生成 LINK(用户、潜在客户之间的关系)?我认为我的设计应该是这样的:User(hub)-Call(link)-Lead(hub),但是我的调用只有 userId,leadId 只能从 Lead 属性之一(PrimaryContactNumber 或 SecondaryContactNumber)中推断出来这个问题的最佳解决方案?还是应该将 Call 建模为集线器并在将数据加载到数据集市时执行过滤器?

【问题讨论】:

【参考方案1】:

电话不是业务实体,而是销售人员和潜在客户之间的关系。所以,你的第一个想法是对的。

要回答您的问题,您可能需要了解零/重影记录概念。 http://roelantvos.com/blog/unknown-keys-zero-keys-or-ghost-keys-in-hubs-for-dv2-0/

基本上,在您的潜在客户(集线器)中添加一个“未知”条目。然后,当您生成链接并且潜在客户未知时,只需将其链接到未知实体即可。确保将卫星添加到您的链接中,以便您可以跟踪未知的时期以及已知的时间。

【讨论】:

“那么,当您生成链接并且潜在客户未知时” - 我如何知道我的潜在客户是否已知?仅通过将 CalleeNumber 中的 CalleeNumber 与 Lead 上的 PrimaryContactNumber 或 SecondaryContactNumber 进行比较,对吗?这意味着我必须在 CallLink 之前加载 Lead,并增加耦合。我想并行加载它们。 Exploration Link 概念能帮到我吗? 根据您的架构,这可以并行完成。您已经获得了在暂存区域中是否已知潜在客户的信息。如果 PrimaryContactNumber 或 SecondaryContactNumber 与 CalleeNumber 匹配,则散列关联的业务密钥,否则散列“未知”或您设置的任何 BK。探索链接在这里对您没有帮助,基本上,您会遇到同样的问题,当潜在客户未知时如何生成链接。 听起来不错。您能否详细说明我的流程应该如何?想象一下,我有一个 etl 工作,它每天加载潜在客户,另一个每 5 分钟加载一次呼叫。当没有潜在客户时,所有呼叫都将链接到未知潜在客户。当我加载潜在客户时,我应该怎么做才能将未知链接更改为已知链接?你能解释一下这一步吗? 零键和幽灵记录不是一回事,Roelant 需要更新那篇文章。 patrickcuba.medium.com/… Ghost 记录需要用单个记录预先填充卫星,零键不需要 --- 如果您先暂存它们,它们自然会出现。

以上是关于如何在没有强关系键(外键)的情况下在数据库中创建 LINK?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有事件/委托回调的情况下在 Unity 中创建 MessageBox?

如何在没有任何视图或任何其他表类型的情况下在 oracle 中创建具有动态列名和动态数据类型的动态表

如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?

如何在没有 Apple Developer 帐户的情况下在 xcode 6 中创建 ipa?

如何在没有 Jquery-ui 且没有 Bootstrap 的情况下在 angularjs 中创建自定义进度条?

iOS - 如何在没有第三方框架的情况下在 Swift 中创建自定义动画横幅