子女可以属于不同父母的亲子关系:设计方法

时间:2018-08-27 04:57:38

标签: database database-design amazon-redshift rdbms azure-sqldw

我有一种情况,我正在从多个源(例如SourceA,SourceB,SourceC……SourceN)获取数据。每个源的数据格式或内容可以不同。现在,我需要从多个来源处理此数据,并为每个来源示例“ Col1,Col3,Col3,SourceIdentifier,sourceUniqueID”生成一个公共输出。现在我需要将此输出添加到某个表中,让我们将此表称为处理后的输出。现在我的问题是 1)如您所见,我需要通过这2列在Processedoutput表中标识哪行属于哪个源以及每个源的uniqueID(每个源都有一个标识列作为主键),我可以获得唯一行,但是我不想使用2个键作为标识符,我只想要一个键即可通过它获得相同的答案。我也不想使用GUID列

2)如果我将这些数据存储在列式数据库(如redshift或AZUER数据仓库)中。记录的标识符或唯一标识符2键是否会出现性能问题

3)由于有一些BI工具(如power BI)不支持多键作为联接条件,因此我该如何在powerBI中显示相同的数据(请注意-我可以在powerBI中创建一个计算列并进行联接作为单键,但我不想这样做)

谢谢 阿图尔

2 个答案:

答案 0 :(得分:0)

这是一个典型的维度构建问题,您想在其中转换业务密钥以替代密钥。

您的登台表(可能是您称为commonoutput的表)具有包含SOURCE和ID的两部分业务密钥。

您的目标表(我认为这是您的已处理输出)需要包含代理键和您的业务键。代理密钥是您将用于连接到其他表的ID,仍然需要业务密钥,以便您可以查找代理密钥。

您的目标表将如下所示:

  • surrogate_key(给它一个更好的名称,以反映表的业务名称)
  • source_id
  • source_unique_id
  • col1
  • col2
  • col3

您可能可以使用IDENTITY列来创建新的surrogate_key值。 Redshift和Azure SQL数据仓库均支持身份。

答案 1 :(得分:0)

就像罗恩说的那样

  1. 来源:1..n:来源A,B,C ... N
  2. 每种来源的来源格式都不同。
  3. 固定的目标架构,即维度的表架构
  4. DW中的典型尺寸构建
  5. 如果维度类似于客户,产品,那么我也将其称为主数据问题。
  6. 您可能需要外部参照表,然后是尺寸表。

除Ron解决方案外,类似地检查文章或Google:

https://www.tek-tips.com/viewthread.cfm?qid=1636261

Design a dimension with multiple data sources