快速回答:在您的代码中或对表进行非规范化(存储冗余数据).
>反规范化;换句话说,将冗余数据存储在中央“连接”表中,这样您就可以通过查询该表来获取所需的所有信息.这可能是您的最佳选择,但您需要记住在更新左侧或右侧表时更新中央表中的所有相关记录.这样做的成本是额外的数据存储,以及每次更新的额外编程麻烦.
>做三个查询;拉入连接的中央表,然后用右表和左表两个查询拉入.
另外两种混合选择:
>第三种选择是仅在一个表中进行非规范化.在左侧表中有一列,用于存储连接数据的serialized()数组.所以你只需要拉入左表,你已经将所有的连接从右表中拉到.如果您更新右表,请不要执行此方法,因为您需要拉入所有左表,找到需要更新的位置,然后更新左表.讨厌 – 所以你可能会选择第四个选项……
>在左表中存储相关ID的列表(以相同的序列化方式),这样您就可以拉入左表,取消IDS的分离并知道从右侧拉出的内容.这意味着两个查询,而不仅仅是三个.
哪一个适合你,真的取决于程序,如果你只是“添加”数据或进行大量的编辑和删除.如果它们都不起作用,那么考虑一个关系数据库.
原因(抱歉,如果你知道,但添加完整性).
DynamoDB是一个noSQL数据库,专为非关系查询而设计.所以你不要做JOINS和外键和级联等(是的,我在这里简化,但希望总结一下).您在查询中引入数据并在代码中执行“JOIN”.外国钥匙和所有爵士乐并非真正发挥作用.
如果需要关系数据库,请使用关系数据库.
直接引用亚马逊模糊:
While Amazon DynamoDB tackles the core problems of database
scalability, management, performance, and reliability, it is not a
relational database and does not support complex relational queries
(e.g. joins) or complex transactions. If your workload requires this
functionality, or you are looking for compatibility with an existing
relational engine, try Amazon Relational Database Service (RDS).