这个问题是关于 sql server 2008 R2 的商业智能。
如果您有一个名为 Jim Brown 的人,他的出生日期和社会安全号码 ( SSN ) 位于三个不同的源系统中。
在 ETL 阶段将三个数据行合并为一个/行后,您是否使用应包含 Jim 的生日和SSN的代理键?
这个问题是关于 sql server 2008 R2 的商业智能。
如果您有一个名为 Jim Brown 的人,他的出生日期和社会安全号码 ( SSN ) 位于三个不同的源系统中。
在 ETL 阶段将三个数据行合并为一个/行后,您是否使用应包含 Jim 的生日和SSN的代理键?
代理键是系统分配的唯一值,用于标识实体出现。自然键是企业用来识别实体事件的键。源系统以及您的 BI/数据集成数据库可以使用任一类型来识别实体出现 - 例如您示例中的 Jim Brown。在源系统中,我们将源系统用于标识实体出现的内容称为源密钥。因此,如果您可以拥有 3 个不同的源系统,每个系统都包含 Jim Brown,那么除了自然密钥之外,每个系统都将具有不同的源密钥 - 您已将其标识为 SSN + 生日。ETL 使用的 BI 暂存环境将包括一个键映射表,该表将每个源键映射到为 BI 数据库分配的代理键。例如:
当要处理针对 Jim Brown 的交易时,它将使用源密钥来自源。假设它的系统 A 具有源密钥 12345,并更新了其他字段之一。ETL 在键映射中查找源键并找到它,并且知道将该事务应用于代理键为 1 的 Person 上的行。
如果您只有 1 个源系统,生活会很轻松。但是你有 3 个。这就是自然键的用武之地,因为你知道你可以在任何系统中通过使用这 2 个永不改变且对他真实的特征来识别吉姆。现在,假设您集成了系统 D。系统 D 中的 Jim Brown 收到了第一笔交易,系统 D 的源密钥是 AB2945。现在,当 ETL 查看键映射时,它找不到它。但是因为您知道您有多个系统可能包含一个人,所以 ETL 还会在 Person 表上查找自然键,瞧——匹配。现在 ETL 为 System D 也为 Jim Brown 的键映射插入了一个新行。
所以总而言之,你总是在多源间对同一个逻辑实体进行数据集成时,想使用代理键作为BI数据库表中的PK。您将使用键映射表将其映射到源键,并通过查找 BI 表中的自然键来防止重复(以及自然键上的备用唯一键以确保没有重复)。现在还有很多其他细节需要解决——比如你的自然键真的是独一无二的,你想把它存储在你的键映射中以防止对 Person 的查找,你是否必须处理复合源键,你是否保留了历史源密钥更改,您是否跟踪记录系统和参考系统,如何处理源密钥重用(本身就是一个潜在的非常棘手的问题)等。但是这个简短的总结让您了解自然之间的差异, 代理人, 和源密钥以及在 BI 场景中使用它们的位置。我希望这有帮助...
您正在混淆代理键和自然键。如果您使用当前数据(即“应用程序数据”)作为键,它将是一个自然键(在本例中为复合键)。但是 GUID 或身份字段将被替代。
在这种情况下,有几件事需要考虑。首先,生日和 SSN 的组合是否总是唯一的?只有您和您的业务领域可以回答这个问题,不幸的是我们不能。
另一个考虑是这可能不是顺序的。使用标识列作为键的好处在于它将是顺序的(只要您出于任何原因不执行任何标识插入)。当向聚集索引中的插入不是顺序的时,您将遇到页面拆分和可能的严重碎片。
我希望这些要点对您有所帮助,尽管它们不像大多数事情那样是确定的答案,但“视情况而定”。