我对关系数据库中的表有以下模式。
员工
- 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方式的新表,还是应该将此信息作为主表属性的键对值包含在内?请建议。
提前致谢。
答案 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()
修改根据评论更新架构以支持查询
希望有所帮助