如果项目只能由三个或更多属性唯一标识,如何在DynamoDB中选择主键?

时间:2016-04-10 04:46:30

标签: amazon-web-services amazon-dynamodb aws-sdk database nosql

如果项目只能由三个或更多属性唯一标识,如何在DynamoDB中选择主键?或者这不是使用NOSQL数据库的正确方法吗?

1 个答案:

答案 0 :(得分:4)

通常,如果您的项目由三个或更多属性唯一标识,则可以连接属性值并形成一个复合字符串键,您可以将其用作Dynamo tbale中的哈希键。

如果您需要在项目上创建索引,或者您需要在条件表达式中使用它们,则可以将哈希键中的attribes重复删除到项目的单独属性中。

关系数据库规范形式的规则不一定适用于NoSQL数据库,事实上,通常首选非规范化模式。

为了扩展这个概念,在设计关系数据库模式以使用规范化形式时,这是典型的(并且通常是可取的)。其中一个规范化表单规定您不应复制表示数据库中相同“事物”的数据。

我将使用一个只包含密钥的两个部分的示例,但您可以进一步扩展它。

假设您正在设计一个包含美国地理信息的表格。在美国,邮政编码由5位数字组成,另外4位数字可以细分该区域。

在关系数据库中,您可以使用以下架构:

  Zip    |   Plus4   |  CityName     |  Population
---------+-----------+---------------+---------------  
 CHAR(5) |  CHAR(4)  | NVARCHAR(100) |  INTEGER

复合主键为Zip, Plus4

这是完美的,因为Zip和Plus4的组合保证是唯一的,您可以对此表回答任何查询,无论您是否同时拥有Zip和其他Plus4代码,或只是Zip。而且你也可以很容易地获得Zip码的所有Plus4代码。

如果您想在Dynamo中存储相同的信息,您可能会创建一个名为“ZipPlus4”的散列键,其类型为String,并且包含与Plus4代码连接的Zip代码(即60210-4598),然后在项目上存储另外两个属性,其中一个是Zip代码本身,另一个是Plus4本身。因此,表中的项可能具有以下属性:

  ZipPlus4 | Zip     |  Plus4   |  CityName   |  Population
-----------+---------+----------+-------------+---------------  
  String   | String  |  String  |  String     |  Number

上面的ZipPlus4将是表格的哈希键。

请注意,在上面的示例中,您可以使用“Zip”的散列键和“Plus4”的范围键,但正如您所看到的,当您有超过2个部分时,您需要不同的东西。