不使用JetBrains Exposed schema生成功能还需要定义约束吗
关于JetBrains Exposed框架手写SQL迁移时是否需要定义表约束的解答
这些约束配置并非仅在框架生成schema时生效,哪怕你完全使用手写SQL做schema生成和迁移,也非常建议在Exposed的表对象中同步定义这些配置,原因如下:
- 优化运行时异常反馈与逻辑校验
定义唯一约束、外键规则后,Exposed在执行对应DML操作时会抛出语义更明确的异常,相比原生数据库的通用错误信息更容易定位问题。部分场景下框架还会提前做前置校验,不用等到请求到数据库层才报错。另外外键的级联规则你在表对象中定义后,使用Exposed的ORM API做数据操作时,框架会遵循你配置的级联逻辑处理关联数据,和数据库层的规则保持一致可以避免逻辑冲突。 - 简化关联查询的编写
配置了外键关联后,使用Exposed的join、关联预加载等API时,框架可以自动匹配关联字段,不用每次手写关联条件,减少手写SQL的出错概率。 - 代码即文档降低协作成本
所有约束规则直接在表定义代码中体现,后续维护项目的开发者不需要单独翻历史SQL迁移脚本,就能快速了解表结构的约束逻辑,也能避免开发业务代码时忽略底层约束写出不符合要求的逻辑。
注意事项
如果选择在表对象中定义约束,必须保证配置和你手写SQL中的约束规则完全一致,比如数据库层外键配置的是ON DELETE CASCADE,代码中就不能定义为ON DELETE RESTRICT,避免出现数据库层和代码层规则不匹配导致的逻辑异常。
内容的提问来源于stack exchange,提问作者magnomp
相关产品推荐
相关产品推荐

