私はこれまでのキャリアの中で何度かこの問題に直面してきましたが、地元の同業者の誰もそれに答えられないようです。ユーザーがプロセスの途中で停止する場合があることを除いて、候補キーである「説明」フィールドを持つテーブルがあるとします。したがって、おそらく 25% のレコードでこの値は null ですが、NULL 以外のすべてのレコードでは一意である必要があります。
もう 1 つの例は、レコードの複数の「バージョン」を維持する必要があるテーブルであり、ビット値はどれが「アクティブな」バージョンであるかを示します。そのため、「候補キー」は常に読み込まれますが、同一のバージョン (アクティブ ビットが 0) が 3 つ存在し、アクティブなバージョン (アクティブ ビットが 1) が 1 つだけ存在する場合があります。
これらの問題を解決する別の方法があります (最初のケースでは、ストアド プロシージャまたはビジネス レイヤーのいずれかでルール コードを適用し、2 番目のケースでは、アーカイブ テーブルにトリガーを入力し、履歴が必要なときにテーブルを UNION します)。 . 代替手段は必要ありません (明らかにより良い解決策がない限り)。SQL のいずれかのフレーバーがこの方法で「条件付きの一意性」を表現できるかどうか疑問に思っています。私はMS SQLを使用しているので、その中でそれを行う方法があれば、素晴らしい. 私は主に問題に学術的に興味があります。