为什么大家用 Laravel 开发的项目中都不使用数据库的外键约束呢

看了一些开源项目的源码, 发现大家都没有使用外键约束功能。

个人感觉这个功能非常实用啊, 例如文章评论表添加约束之后, 删除文章时数据库会自动删除该文章的所有评论!

如果不使用外键约束的情况下就需要用代码实现同时删除评论的操作了,而且用代码实现的方式还难以保证其数据的完整性。

这么好的功能为什么大家都没有使用呢,迷惑。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 9

个人观点:

  1. 难以排查。你很难确定 Cascade 连带删除了什么数据。
  2. 数据迁移难做。导入导出时会浪费大量精力。
  3. 依赖数据库处理「实际上是由于业务需求引发的关联」,不合理。
  4. 增加数据库压力,让数据库更容易成为瓶颈。
  5. 软删除没法做。

因此我个人更喜欢使用 ORM 来编排关联关系,这样方便调整,也能够基本确保不会漏删。

4年前 评论
largezhou 4年前
dzb980521 4年前
张雷

那只是你看的一些代码没用而已,我一直在用LARVEL本身也带这个功能~

4年前 评论
h-o-o (楼主) 4年前
张雷 (作者) 4年前

个人观点:

  1. 难以排查。你很难确定 Cascade 连带删除了什么数据。
  2. 数据迁移难做。导入导出时会浪费大量精力。
  3. 依赖数据库处理「实际上是由于业务需求引发的关联」,不合理。
  4. 增加数据库压力,让数据库更容易成为瓶颈。
  5. 软删除没法做。

因此我个人更喜欢使用 ORM 来编排关联关系,这样方便调整,也能够基本确保不会漏删。

4年前 评论
largezhou 4年前
dzb980521 4年前

我司 DBA 说那是个坑爹的玩意尽量别用。

4年前 评论

尽量在代码层面约束

4年前 评论

软删除支持不咋地……
可以考虑这个包在代码层面做
https://github.com/askedio/laravel-soft-ca...

4年前 评论

数据库就应该只负责存取数据
任何跟业务逻辑有关的任务应该交给业务层做

4年前 评论

模型连带删除就可以了

4年前 评论

代码能实现的事情, 为啥要交给数据库,再说了,ORM不是实现这个功能了吗?

4年前 评论
张雷

而且外键必须要InnoDB表才能用~

4年前 评论
h-o-o (楼主) 4年前
张雷 (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!