我们有一个项目,用于将数据从外部源加载到 Data Vault 数据仓库中。这些数据是雇主和雇员之间的工资报表。
开始建模时,我们发现两个业务密钥:雇主的公司 ID 和员工的社会安全号码 (SSN)。 基于此,我们有两个中心,一个为雇主,一个为雇员。当在这两个中心之间添加链接时,我们注意到,对于雇主和雇员的每种组合,可能(将会)有不止一份薪资报表。这意味着我们无法用两个中心和一个链接来模拟这种关系。
从逻辑上讲,这可以通过添加第三个薪资报表中心来处理。然后我们就可以获得所有这三个中心的链接。我们的问题是我们没有任何薪资报表的业务密钥!
我唯一的解决方法是使用公司 ID、SSN 和薪资报表期间为薪资报表生成人工业务密钥。在数据仓库中生成业务密钥确实感觉不太正确,但我们还有其他选择吗?是否可以使用 Data Vault 对其进行不同的建模?
任何想法和想法都受到高度赞赏。
您在这里注意到的是 Data Vault 变得非常困难的情况。
您会遇到这样的情况:每个数据对象都没有业务密钥。
Data Vault 架构需要业务密钥。
您通常有 4 个选择。
拥有一个没有业务密钥的业务对象(在本例中为工资报表)是一种反模式。说服薪资系统开发人员为每份薪资报表提供业务密钥或唯一交易编号。
创建一个复合键,就像您提到的那样。 这种方法的最大问题是:您能否确定组合键始终是唯一的? 假设您使用公司 ID、SSN 和期间。如果工资制度出了问题,同期必须额外支付怎么办? 在这种情况下,您将拥有 2 行相同的复合键(公司 ID、SSN 和期间)。
创建您自己的业务密钥。 编写一个小程序,从薪资系统中获取数据,并添加自己的业务密钥。 这可以像带有主键的数据库表一样简单,然后使用该主键作为业务键。
请勿为此对象使用 Data Vault。如果某个对象不适合 Data Vault,或者有其他结构更适合该数据,则使用该结构。
不需要人工密钥,正如您所说,您有两个带有真实业务密钥的集线器,并且在它们之间,您可以使用非历史链接表。在该链接表中,除了公司 ID 和 SSN 之外,您还需要一个额外的业务字段来使记录确实唯一。 要了解是否可以选择年份和月份、报表 ID 或其他内容作为附加业务 ID,您应该与负责薪资报表的业务人员联系。他们可以告诉您他们如何唯一地识别生成的报表以及他们如何在其运营业务系统中实施它。