DynamoDB(NOSQL)数据库设计

时间:2017-01-03 08:17:33

标签: amazon-dynamodb nosql

我对关系数据库中的表有以下模式。

员工
- employee_id
- 姓名
- 电子邮件
- 密码
- is_manager

项目
- project_id
- 标题
- 说明
- 所有者
- 经理

技能
- skill_id
- 技能

EmployeeSkills
- employee_skill_id
- employee_id
- skill_id

ProjectMembers
- project_member_id
- project_id
- employee_id

我想在NOSQL数据库设计中实现相同的目标。

我知道为前3个表(员工,项目,技能)创建密钥对值。

来到表 EmployeeSkills ProjectMembers ,每个表包含来自其他2个主表的信息。如何在NOSQL数据库中表示?

我应该创建2个类似于RDBMS方式的新表,还是应该将此信息作为主表属性的键对值包含在内?请建议。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式设计架构。在最终确定模式之前,您应该做的第一件事是查看您将对数据执行何种查询。

以下是我能想到的主要架构,您可以再次根据查询修改它:

    EmployeeSkills
    - skill_id  (hash)
    - employee_id (range)

   Create GSI of above table with
    - employee_id  (hash)   
    - skill_id  (range)

    ProjectMembers
    - project_id  (hash)
    - employee_id (range)

    Create GSI of above table with
     - employee_id (hash)
     - project_Id (range)

listOfProjects中的数据将是主表中的projectId列表。

在上述模式中,优势在于通过单次阅读,您将获得员工的所有信息。一个缺点是,如果您要搜索具有某些技能/项目的所有员工,那么我不会推荐这种模式。

如果您要获得这些查询而不是单独的表

row_number()

修改根据评论更新架构以支持查询

希望有所帮助