2008-09-17 70 views
0

我觉得我有一个严重的基本/愚蠢的问题,但我从来没有看到/读/听到任何东西在这个方向。覆盖约束从没有行动级联在运行时

说我有一个表用户(用户ID,姓名)和表偏好(ID,用户id,语言)。这个例子是微不足道的,但可以扩展到多层次关系和更多表格的方式.. 当我的UI请求删除一个用户时,我首先要显示一个警告,说明它的首选项也将被删除。如果在某些时候数据库被扩展了更多的表和关系,但是软件没有相应地调整(客户端没有更新),应该显示一条通用消息。

我该如何执行此操作?用户界面无法了解整个数据结构,因此不应该费心去逐步删除所有关系以手动删除所有依赖记录。
我认为这将与约束。 约束将是不采取任何行动所以约束将抛出一个可以被UI捕获的错误。 UI收到确认后,约束条件应该变为级联

不知怎的,我感觉像我得到这一切错了..

回答

1

我会做的是这样的:

  1. 约束是CASCADE
  2. 如果应用程序检查偏好存在。
  3. 如果他们这样做,显示警告。
  4. 如果不存在首选项,或者警告被接受,请删除客户端。

即时更改数据库关系不会是一个好主意!

干杯,

RB。

0

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