次の結合テーブルのような状況があります。
A_ID B_ID
1 27
1 314
1 5
重複するグループが入力されないように、テーブルに制約を設定する必要があります。言い換えると:
A_ID B_ID
2 27
2 314
2 5
失敗するはずですが、
A_ID B_ID
3 27
3 314
それは異なるグループであるため、成功するはずです。
私が考えた2つの方法は次のとおりです。
- 順序に基づいてマテリアライズ ビューでテーブルをピボットし、ピボット フィールドに一意のキーを配置します。Oracleでは、ピボットルールと32列のインデックス制限の両方のためにグループ内の行数を制限する必要があるため、これは好きではありません(この2番目の問題を回避する方法を考えましたが、それでも).
- B_ID の組み合わせで一意のハッシュ値を作成し、それを一意にします。たぶん、私は数学者として十分ではありませんが、B_ID に使用できる値の数を制限しないでこれを行う方法を思いつきません。
ある種の順序付け列を追加して別の一意のキーを設定するだけでよいなど、明らかに欠けているものがあるように感じますが、かなりの量を読んでも何も思いつきませんでした。継承したデータ モデルに欠陥がある可能性もありますが、同様の柔軟性が得られるものは思いつきません。