覆盖从无操作到运行时级联的约束

时间:2008-09-17 09:50:08

标签: sql constraints cascade

我觉得我有一个非常基本/愚蠢的问题,但我从来没有看到/阅读/听到过这方面的任何事情。

假设我有一个表用户(userId,name)和一个表首选项(id,userId,language)。这个例子是微不足道的,但可以扩展到具有多层次关系和更多表格的情况 当我的UI请求删除用户时,我首先要显示一条警告,指出其首选项也将被删除。如果在某些时候数据库扩展了更多的表和关系,但软件没有相应调整(客户端没有更新),则应显示通用消息。

我该如何实现?用户界面无法了解整个数据结构,也不应该费心去除所有关系以手动删除所有依赖记录。

我认为这会受到限制 该约束首先是 no action ,因此约束将抛出可由UI捕获的错误。 UI收到确认后,约束应成为级联

不知何故,我觉得我错了......

2 个答案:

答案 0 :(得分:1)

我要做的是:

  1. 约束是CASCADE
  2. 应用程序检查是否存在首选项。
  3. 如果有,请显示警告。
  4. 如果不存在首选项或接受警告,请删除客户端。
  5. 动态更改数据库关系不是一个好主意!!

    干杯,

    RB。

答案 1 :(得分:0)

如果您担心用户没有意识到删除的全部影响,您可能需要考虑不实际删除数据 - 而只需在名为“marked_for_deletion”的列上设置标记即可。 (然后可以在安全时间之后删除条目)
缺点是您需要记住在其他查询中过滤掉标记的行。这可以通过在表上创建一个过滤掉标记行的视图来缓解,然后始终在查询中使用该视图。