データベース アイテムが削除されず、削除済みとしてマークされているだけのプロジェクトで作業しています。このようなもの:
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 0
列に UNIQUE 制約のようなものを定義できるようにしたいと考えていname
ます。簡単そうですよね?
「Thingy3」が削除され、新しいものが作成されるシナリオを想像してみましょう (おそらく数年後)。我々が得る:
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 1
...
100 Thingy3 0
ユーザーの観点から見ると、彼はアイテムを削除して新しいアイテムを作成しました。ファイルを削除して新しいファイルを作成するのと同じです。したがって、新しいアイテムが古いアイテムに関連するデータとは無関係であり、関連付けられていないことは明らかです。
DB は のみを気にするため、これは既に処理されていid
ます。また、新しいアイテムの はid
3 ではなく 100 であるため、それらはまったく異なります。
ユーザーが別の「Thingy3」アイテムを作成できないようにしたい場合、問題が発生します。マークされていないアイテムのみを見る UNIQUE 制約があれば、deleted
1 つの問題を解決できたはずです。
(もちろん、誰かが削除を元に戻したときに何が起こるかを処理する必要があります...)
では、そのような制約をどのように定義できますか?