将用户 table 链接到其他 entities/tables

Linking Users table to other entities/tables

我有一个 data driven ASP 应用程序。和大多数 data driven 应用程序一样,我在大多数 table 中有一个 Users table 和一个 CreatedBy 字段。

我正在尝试在我的应用程序中创建一个 DeleteUserFunction。在删除任何用户之前,我必须检查每个 table 以查看该用户是否创建了任何记录。

users table 和数据库 table 的其余部分之间建立关系可以使 DeleteUserFunction 更容易验证。

因此,我试图弄清楚用户 table 是否必须显式链接到其他 table(通过外键约束),或者它是否必须在应用程序业务逻辑中处理。

首先,您需要明确您的功能需求。如果用户被删除应该怎么办?

1 User may not get deleted if records linked to her are present.
2 User may be deleted, and
  2.1 all records linked to her stay present, without link to that user,
  2.2 all records linked to her must be deleted as well.

外键约束可以支持 1 和 2.2,但不支持 2.1,因为它不会更改引用记录中的用户外键。

但是,使用外键约束作为强制执行此操作的唯一方法可能会导致奇怪的软件结构和用户体验。在所有情况下,数据库都会检测到违反约束的情况,并且默认情况下会在数据访问模块中导致一些异常。但是,您可能不希望您的应用程序因异常而崩溃,而是告诉您的用户此功能不可用(情况 1)或触发某些应用程序功能(情况 2.1、2.2)。这意味着在软件中传递异常,直到到达正确的层来处理这种情况。

因此,我建议执行必要的检查以查明删除是否合法,并作为应用程序逻辑的一部分触发逻辑后果。外键约束作为一种在测试期间检测应用程序错误的方法可能仍然有用。