在表中,每次添加行时都会有一个标识列递增1(最低值为1)。现在,有一个新的要求 - 我们需要实现软删除。
所以,我的想法是基本上将任何轻微删除的行乘以-1。这样可以确保唯一性,并在活动和轻微删除的项目之间划清界线。
update Things set Id = -101
where Id = 101
你知道吗,愚蠢的电脑不让我这样做。建议的解决方法是:
我正在使用EF来执行额外的工作,当我更改身份的值并存储它时,该软件非常友好地为我思考并且实际上创建一个新的行(具有递增设置的标识,既不是原始标识,也不是它的否定)。
我该如何解决这个问题?
答案 0 :(得分:8)
我强烈建议您不要使用任何其他含义来超载您的标识列。第一次查看数据库表的人无法知道否定ID意味着"已删除"。
引入新列Deleted BIT NOT NULL DEFAULT 0
没有这个缺点。这是不言自明的。它的成本几乎为零:在大数据时代,额外的BIT
列不会填满你的硬盘。
所有这一切,如果您仍然想要这样做,您可以在SET IDENTITY_INSERT dbo.Things ON
之前尝试UPDATE
。 (但我目前无法验证这是否有效。)