Azure表存储:存储关系



当在Azure表存储中存储一对多关系时(例如存储记录所有者的ID),您是否将PartitionKey和RowKey作为两个单独的字段存储?或者为了简化存储,您是否将这两个字段连接到一个字段中?


EDIT -更清楚我在问什么

我知道表存储不是关系存储。我不是在寻找外键完整性或级联删除之类的东西。

但是,即使没有"关系",仍然非常普遍地需要在另一个表中存储指向记录的指针。这有成千上万的用途。我的存储创建记录的用户的示例只是其中一个示例。存储任何类型的列表或数组是另一个例子(例如,在简历中存储"工作经验"记录列表,或者在Person记录中存储联系地址列表)

因为Azure表存储表的"主键"是两个字段,我想知道是否有一个关于如何存储该信息的通用约定。什么是"最佳实践"?

我看到的选项有:

  • 连接PartitionKey和RowKey到一个字段,并存储为"外键"(我知道没有真正的外键)。
  • 分别存储两个字段并使用它们作为外键。
  • 第三个我没有想到的选择。

这里有"最佳实践"吗?是否有理由选择一种方法而不是另一种方法?

下面是一些使用Azure表的"最佳实践":https://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/

"一对多关系"一章可能有用。

我建议对你的数据进行非规范化,将代表一对多关系的记录保存在单个表中。考虑如何查询数据,进行反规范化。

首先,Azure表存储不是原生支持一对多关系的关系数据库。无论如何,你可以像你提到的那样开发这个场景。关键是PartitionKey + RowKey在表中必须是Unique。因此,在给定的分区(由PartitionKey表示)中,不能复制RowKey。

所以我想连接是正确的方式。否则,如果您使用主表中的PartitionKey和RowKey作为第二表中的PartitionKey和RowKey,那么您将无法拥有一对多关系。因为主表中的一条记录将在第二表中有多条记录,并且对于第二表中的所有这些记录,您不能有相同的PartitionKeyRowKey值。

请注意,连接PartitionKey和RowKey将导致主表中的每条记录在第二个表中产生单独的分区。如果你想在第二个表中查询多个分区,那么它就会很慢。

最重要的一点是,在设计表存储结构时,主要考虑的是数据访问模式。因此,您应该了解如何访问数据并相应地设计结构。

希望这对你有帮助。

必须小心连接父表中的键。你真得看看你的钥匙是否可行。

我们最近有一个项目,我们在ATS中存储关系数据,它工作是因为我们的键要么是字母数字(a- za -z0-9)(你不能在PK/RK中有某些符号),要么是用下划线分割的指针(去掉破折号)。看看你可以在这里使用的字符。这个模型可以保证密钥的唯一性。

例子

客户:PK "业务" RK "A0001"

Product: PK "business_A0001" RK " someesequentialstringguid "

InstanceOfProduct: PK " business_a0001_someesequentialstringguid " RK " someesequentialstringguid "

另一个大问题是您希望如何查询您的数据?在这个模型中,从多个产品收集数据会很麻烦(多个请求等,或者请求跨越带有延续键的分区边界),但是提取单个实例/分区的速度非常快。这对我们来说更重要,所以这就是我们所追求的。

my 2 cents HTH

相关内容

  • 没有找到相关文章

最新更新