DynamoDB 支持外键吗?

不支持。DynamoDB 没有外键、参照完整性约束或级联删除——作为一款 NoSQL 数据库,它从不强制项目或表之间的关系。你需要自行建模关系:将相关数据反规范化到一个项目中,或用单表设计把相关项目并置在同一个分区键下。

为什么没有外键

外键的存在是为了支持连接并跨规范化的表强制完整性。DynamoDB 有意省略了 JOIN 运算符(AWS 建议改用反规范化),因此外键约束会去约束一个查询模型从不利用的关系。没有什么阻止你把另一个项目的键_存储_为属性——DynamoDB 只是不会校验或级联它。如果强制的参照完整性不可妥协,DynamoDB vs PostgreSQL 划清了两种模型之间的界线。

关系改为如何建模

  • 嵌入——小而有界的子数据以列表或映射的形式存放在父项目内部。
  • 并置——父项目和子项目共享一个分区键,使用不同的排序键,因此一次 Query 就能返回整个关系;这正是单表设计的核心。
  • 复制——把每种访问模式所需的字段拷贝到需要它们的项目上,以写入时的维护换取单次请求的读取。

一对多多对多指南深入讲解了每种形态。

在重要时强制完整性

对于你本会依赖约束的情形,DynamoDB 给了你一些构件:条件表达式根据被写入项目的状态守护一次写入,而事务的 ConditionCheck 可以在同一个全有或全无的操作中验证_另一个_项目(比如父项目)是否存在。级联删除则成为显式的应用逻辑或由 Streams 驱动的清理。

深入了解

先从单表设计入手,在表达式构建器中构建守护条件,并下载 DynoTable 在一个视图中看到你的项目集合——父项目和子项目并排呈现。

参考资料

最后核实于 2026-07-13,依据上方所链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。