在运行时覆盖从无动作到级联的约束
时间:2020-03-05 18:58:26 来源:igfitidea点击:
我觉得我有一个基本的/愚蠢的问题,但是我从没有看过/读过/听过这个方向的任何内容。
假设我有一个表users(用户ID,名称)和一个表首选项(ID,用户ID,语言)。该示例很简单,但可以扩展到具有多级关系和更多表的情况。
当我的UI请求删除用户时,我首先要显示一条警告,指出还将删除其首选项。如果在某个时候数据库扩展了更多的表和关系,但是该软件没有进行相应的修改(客户端未更新),则应该显示一条通用消息。
我该如何实施? UI无法了解整个数据结构,因此不应费心去遍历所有关系以手动删除所有依存记录。
我认为这将受到限制。
约束最初不会是任何操作,因此约束将引发UI可以捕获的错误。 UI收到确认后,约束应成为级联。
不知何故,我感觉自己错了。
解决方案
回答
我要做的是:
- 约束是CASCADE
- 该应用程序检查是否存在首选项。
- 如果是这样,请显示警告。
- 如果不存在任何首选项,或者接受警告,请删除客户端。
即时更改数据库关系不是一个好主意!!
干杯,
RB。
回答
如果我们担心用户无法充分了解其删除的影响,则可以考虑不实际删除数据,而只需在称为" marked_for_deletion"的列上设置标志即可。 (然后可以在安全的时间删除条目)
缺点是我们需要记住在其他查询中过滤掉标记的行。可以通过在表上创建一个视图(筛选出的行已被滤除),然后在查询中始终使用该视图来缓解这种情况。