关系商店&多对一加入

时间:2013-04-09 14:46:05

标签: activepivot

大卫,我可以要求澄清你对this answer

中加入的看法

当你说“你不能,使用关系存储的连接,将一个条目加入多个条目”时,这是否意味着任何方向?

E.g。商店1:

| Key1 | Measure1 |

商店2:

| Key 1 | SomeId1 | Measure2 | Measure3 |
| Key 1 | SomeId2 | Measure4 | Measure4 |

因此,无法通过将商店2的连接添加到商店1来加入这两个商店吗?

如果没有,你是说那么管理这个的唯一方法是复制商店1中的条目? E.g:

Store 1
| Key 1 | SomeId1 | Measure1 | Measure2 | Measure3 |
| Key 1 | SomeId2 | Measure1 | Measure4 | Measure4 |

1 个答案:

答案 0 :(得分:1)

方向对于一对多很重要:它取决于哪个商店是“父母”商店。

关系存储包括“ActivePivot商店”的概念,它是您的主要商店(架构所基于的商店)。然后,在给定一组关键字段的情况下,可以将该商店连接到一个或多个商店,为简单起见,我们将其称为“子”商店。这些子商店中的每一个最终都可以与其他商店结合,依此类推(您可以用有向图表示它)。

尊重的主要规则是你永远不应该有一个“父”商店条目解析为多个“子”商店条目(我认为你也不应该有任何循环关系)。

关系存储背后的简化理念(从RS 1.5.x / AP 4.4.x开始)是当一个条目被提交到“ActivePivot商店”时,然后从ActivePivot商店开始,它将递归地解析连接以便在每个连接的存储中检索最多一个条目。根据您的架构定义,这些条目将用于在将其插入多维数据集之前填充事实。

如果在多个条目中解析连接结果,那么AP将无法选择使用哪一个来填充事实并将引发异常。

回到您的示例,只有在Store 2是您的ActivePivot商店或商店1的“父”(APStore-> ...-> Store2)的情况下,您才能在商店1和商店2之间进行连接。 - > Store1),这似乎是你的情况。

如果不是(Store1-> Store2),则必须复制商店1的条目,以确保在解析连接时始终只能找到一个条目。然后,商店1将显示为:

| Key 1 | SomeId1 | Measure1 
| Key 1 | SomeId2 | Measure1 

您在Store 2中的加入将在“Key,SomeId”字段上完成,而不仅仅是“Key”,这将确保您在解析Store1-> Store2时只找到一个条目