dynamo db表之间的关系

时间:2015-03-13 10:14:10

标签: java amazon amazon-dynamodb

我有两个名为Country和State的表。 如何通过映射关系获取国家信息。 这是我的代码:

表:

@DynamoDBTable(tableName = "cd_country2")
public class Country implements Serializable {
    private static final long serialVersionUID = 5698425418072128936L;

    @DynamoDBAutoGeneratedKey
    @DynamoDBHashKey
    private String countryId;

    private String countryCode;
    private String countryName;
    private Long isActive;
}

@DynamoDBTable(tableName = "cd_state2")
public class State implements Serializable {

    private static final long serialVersionUID = -7289597915417184960L;

    @DynamoDBAutoGeneratedKey
    @DynamoDBHashKey
    private String stateId;

    @DynamoDBRangeKey
    private String countryId;

    private String stateCode;

    private String stateName;

    private Long isActive;
}

1 个答案:

答案 0 :(得分:0)

在您的申请中,一个州可以在多个国家/地区吗?如果没有那么就没有必要使countryId成为rangeKey。这样的事情应该有效:

@DynamoDBHashKey
private String stateId;

// attributes    
private String countryId;

private String stateCode;

private String stateName;

private Long isActive;

给定一个stateId,你可以从你的" cd_state2"中找到它所属的countryId。表

另一方面,我建议使用这样的架构:

HashKey: countryId
RangeKey: stateId
Attributes: stateCode, stateName, isActive

然后在此表的顶部构建一个GSI:

HashKey: stateId

因此,假设stateId在整个国家/地区是唯一的,给定一个State,您可以通过在GSI表上执行GET来找到其Country。另外,给定countryId,您可以通过查询基表来查找其中的所有状态。