CHECK() 制約は、問題の同じ行内の値のみを参照できるという印象を受けています。次のルールを適用する方法を見つけようとしています。
次の表を考えます。
PK_Employee_ID | Employee_Name | Manager_ID
Manager ID は、テーブル上の別の従業員の ID です。特定の行の PK_Employee_ID が別の行の Manager_ID で参照されている場合、その行の Manager_ID は null でなければならないというルールが必要です。あれは:
すべての従業員にマネージャーが必要なわけではありませんが、別の従業員のマネージャーである従業員にはマネージャーがいない場合があります。
問題を解決する他の方法があることを知っています。単に「Is_Manager」である別のビット列が存在する可能性があります。これは、1 の場合、Manager_ID がヌルでなければならないことを意味します。ただし、各行がマネージャーであるかどうかを明示的に伝えるのではなく、他の行を見て自分で判断できるようにするという、より洗練されたソリューションをお勧めします。これにより、特定の行間の関係を簡単に変更できます。それとも、これは問題を処理するための非常に非効率的な方法ですか?