Cloud Spanner不强制父子表参照完整性具体指什么?
Cloud Spanner 父子表参照完整性的强制执行边界
首先明确:你看到的「插入子行之前必须存在父行」是Cloud Spanner确实会强制执行的规则,这是INTERLEAVE IN关联的基础约束。而所谓的「不强制父子表之间的参照完整性」,指的是它不会强制执行以下几类典型的参照完整性规则:
- 父行删除时,不会自动级联删除子行:即使删除了某条父行,对应的子行依然可以保留在数据库中,系统不会自动清理这些“孤儿行”。
- 父行主键更新时,不会自动同步子行的关联字段:如果修改父行的主键值,子行中关联该父行的字段不会被系统自动更新,需要你手动处理,否则子行的关联关系会失效。
- 允许子行关联不存在的父行(除插入场景):插入子行时必须有父行,但后续修改子行的关联字段时,系统不会校验该字段对应的父行是否存在——也就是说,你可以把子行的关联字段改成一个不存在的父行主键,这种操作在普通带外键约束的关系型数据库中会被阻止,但Cloud Spanner允许。
这种设计是Cloud Spanner在分布式场景下权衡性能与一致性的结果:放弃部分自动参照完整性校验,减少分布式锁开销,把关联逻辑的维护交给应用层处理,换取更高的写入性能和灵活性。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

