我正在一个项目中工作,其中数据库项目未被删除,但仅标记为已删除.像这样的东西:
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 0
Run Code Online (Sandbox Code Playgroud)
我希望能够在name列上定义类似UNIQUE约束的内容.看起来很简单吧?
让我们假设一个场景,其中"Thingy3"被删除,并创建一个新的(可能在几年后).我们得到:
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 1
...
100 Thingy3 0
Run Code Online (Sandbox Code Playgroud)
从用户的角度来看,他删除了一个项目并创建了一个新项目.就像删除文件和创建新文件一样.因此,对他来说很明显,新项目与连接到旧项目的任何数据无关且未附加.
这已经处理完了,因为DB只关心它id,并且由于新项目的数量id为100而不是3,它们完全不同.
当我想阻止用户创建另一个 "Thingy3"项时,我的困难就出现了.如果我有一个UNIQUE约束只查看未标记的项目deleted,那么我会解决一个问题.
(当然,那时我必须处理当有人撤消删除时会发生什么......)
那么,我该如何定义那种约束呢?