私は 3 つのテーブルを持っています (それらを Foo、Bar、Baz と呼びましょう。
テーブル:
フー
- FooId
バー
- BarId
- FooId
バズ
- BazId
- BarId
- アナザーバリュー
明らかに、外部キーにより、各 Baz が Bar に関連付けられ、したがって Foo に関連付けられます。ここで、同じ「AnotherValue」を持つ Baz の各セットに対して、関連するすべての Foo が一意であることを確認したいと思います
たとえば、私が持っていた場合
Foos (1, 2, 3)
Bars ((10, 1), (11, 1), (12, 1), (13, 2))
Bazs ((100, 10, "a"), (101, 10, "b"), (102, 13, "a"), (104, 11, "b"))
Baz 104 と baz 101 の両方に AnotherValue "b" と Foo 1 があるため、これはブロックする必要があります。
私が考えた選択肢(現在の好みの順)
インデックス付きビュー
これら 3 つのテーブルのビューを作成し、2 つの列に一意のインデックスを配置できます。
計算列
FooId を計算列として Baz に追加します。次に、AnotherValue と FooId にインデックスを追加します。
制約をチェック
これを追加して機能させることができると確信しています。私はチェック制約をあまり使用していません。これが最善の方法であるかどうかはわかりません。
引き金
これは私には醜いようです。