将Users表链接到其他实体/表

时间:2016-04-07 12:39:25

标签: sql database-design foreign-key-relationship

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

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

构建users表与其余数据库表之间的关系可以使DeleteUserFunction更容易验证。

因此,我试图确定用户表是否必须显式链接到其他表(通过外键constaints),还是必须在应用程序业务逻辑中处理。

1 个答案:

答案 0 :(得分:1)

首先,需要明确您的功能要求。如果用户被删除会发生什么?

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中)。这意味着在软件中传递异常,直到达到处理案例的正确层。

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