查找表上的sql server外键约束

时间:2014-11-14 21:50:02

标签: sql-server foreign-keys constraints

寻找正确的设计来处理这种情况(这个例子不真实,只显示我的问题的概念):

假设您有tblStates用作查找表,控制在tblEmployees(tblEmployees.state)中可以选择哪些状态。 tblEmployee上有一个外键约束,因此您只能选择tblStates中存在的状态。

我希望最终用户能够从tblStates中删除状态,但如果tblEmployees的记录具有相同的删除目标,则会受到限制。我想允许最终用户删除tblStates中的状态并使其保留在tblEmployees的现有行中。它应该仅在用户进行更新时限制已删除的状态。

3 个答案:

答案 0 :(得分:1)

考虑到您希望保留FOREIGN KEY约束。在这种情况下,实际上不要删除tblStates表中有关最终用户删除的记录;而是在tblEmployees中有一个单独的列State_Status并更新该列DELETED状态可能(或)a BIT列说IsStateDeleted并设置它到TRUE

答案 1 :(得分:0)

通常处理这种情况的方法是将tblStates中的行标记为非活动状态,但不将其从表中删除。

为此,您需要添加一个布尔列(例如IsDeleted),并在不再希望用户对tblEmployees中的新行可见状态时设置它。

这样可以保持数据的完整性,并且无论相关的tblStates行是否被删除(例如,通过连接表格),您都可以以相同的方式使用tblEmployees表。

答案 2 :(得分:0)

您似乎在描述的是使用或不使用州的能力,具体取决于它是否可用且未被删除&#39 ;;删除我认为在这种情况下不是物理操作。对于tblStates表,为什么不创建一个而不是触发器,然后如果有人删除了一个州,只需设置一个标记'删除'在触发器中,所以其他人不能使用该状态。由于状态存在于tblStates中,引用完整性仍然有效。