DynamoDB 支持外键吗?
不支持。DynamoDB 没有外键、参照完整性约束或级联删除——作为一款 NoSQL 数据库,它从不强制项目或表之间的关系。你需要自行建模关系:将相关数据反规范化到一个项目中,或用单表设计把相关项目并置在同一个分区键下。
为什么没有外键
外键的存在是为了支持连接并跨规范化的表强制完整性。DynamoDB 有意省略了 JOIN 运算符(AWS 建议改用反规范化),因此外键约束会去约束一个查询模型从不利用的关系。没有什么阻止你把另一个项目的键_存储_为属性——DynamoDB 只是不会校验或级联它。如果强制的参照完整性不可妥协,DynamoDB vs PostgreSQL 划清了两种模型之间的界线。
关系改为如何建模
- 嵌入——小而有界的子数据以列表或映射的形式存放在父项目内部。
- 并置——父项目和子项目共享一个分区键,使用不同的排序键,因此一次
Query就能返回整个关系;这正是单表设计的核心。 - 复制——把每种访问模式所需的字段拷贝到需要它们的项目上,以写入时的维护换取单次请求的读取。
在重要时强制完整性
对于你本会依赖约束的情形,DynamoDB 给了你一些构件:条件表达式根据被写入项目的状态守护一次写入,而事务的 ConditionCheck 可以在同一个全有或全无的操作中验证_另一个_项目(比如父项目)是否存在。级联删除则成为显式的应用逻辑或由 Streams 驱动的清理。
深入了解
先从单表设计入手,在表达式构建器中构建守护条件,并下载 DynoTable 在一个视图中看到你的项目集合——父项目和子项目并排呈现。
参考资料
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Best practices for NoSQL design — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方所链接的 AWS 官方文档。