逻辑删除与字段引用的数据一致性的良好实践是什么

Blade 未结 1 783
klniu
klniu 剑圣 2021-05-14 10:27

一、该问题的重现步骤是什么?

假设一个表A引用了blade_user的id,即用户id,当该用户被删除,A表在获取用户时即会出错,因为在查询时该用户已经不存在,我能想到的解决办法和缺点如下,麻烦请问在这种情况下,良好的实践是什么,如果保证数据一致性?


1. 在删除用户时轮询引用的所有表,如果被用到,不允许删除。这种入侵性太强,如果在User代码中添加或使用切片,而且需要所有用到的模块都这么做,不是很现实

2. 因为是逻辑删除,可以在A查询用户时将被删除的用户也带上。这种方法需要增加方法来查询用户,另外在A页面看到此用户时也查不到该用户,删除的意义被减弱。

3. 不使用逻辑删除,在数据库中使用外键引用,用户被删除时提示被其他模块使用。这种方法直接废除了逻辑删除,但操作起来比较方便。

1条回答
  • 2021-05-17 09:48

    斟酌了下,还是选择使用切面了,这个对系统的入侵性是最小的,还保证了逻辑删除。

    0 讨论(0)
提交回复