
最佳答案
- 利用 MySQL 的外键约束也可以。
- 利用数据库的视图功能,可以聚合一些数据,并且保证数据源变化后,视图表保持一致。





讨论数量:
最近在写的,给你参考
//用户删除
public function remove(RetaineUser $retaineuser, File $file)
{
//此处应该做一个判断,如果患者下有STL文件,则禁止删除 RetaineUser File做了数据关联
if ($retaineuser->file()->count() > 0) {
alert('删除失败,请先删除患者的STL文件', 'danger');
return back();
}$retaineuser->delete();
alert('患者已经删除', 'danger');
return back();
}
引用计数这种在复杂逻辑系统中几乎就不可能准确维护,一旦出现任何意外,关联数据失败,整个系统分分钟崩溃啊,而数据库外键这种看似很美好,但是业务流程和数据库逻辑硬绑定在一起,除非你一次性做好了后面就不改了,频繁修改简直要死
其实这个问题本质应该是数据分层的问题,即遗留数据和当前有效数据不一致,那么你就要解决这个问题吧,为两者共存创建一个方案,而不是业务流程上修改它强行让两者一致,最好做法是在数据中加一个标记表示是否是有效数据,新增修改都只能用有效数据,遗留数据永远存在来解决数据关联问题,这种适用于像地区这种变更小但是关联很多的情况,另外像订单关联收货地址这种,则应该在下单时就为订单复制一份收货地址才对