0

col1、col2、col3....col10 の10 列を持つ Oracle テーブルがあります。私の要件は次のとおりです-col1、col2、col3の一意の値のセット、つまり(col1、col2、col3)の場合、複数回であっても、col4の一意の値のみが許可されます。例: col1=3、col2='A005'、および col3=10を持つ行が 10 行ある場合、10 行すべてで col4 の値は同じである必要があります。

この制限を Oracle に設定するにはどうすればよいですか?

4

1 に答える 1

1

3 つの列 (co1、col2、col3) に一意の制約を作成し、それを別のテーブルへの外部キーとして使用できます (つまり、col4 を別のテーブルに移動します)。これにより、現在 col4 で得られる重複値が排除されます (これは悪い習慣です - データベースの「正規化」を読んで理由を確認してください)。

したがって、一意の組み合わせ (col1、col2、col3) ごとに、col4 の正確に 1 つの行にマップされますが、別のテーブルになります。

たとえば、sqlfiddle の場合: http://sqlfiddle.com/#!4/ad317

編集:テーブルの列/スキーマを変更することは望ましくありません

メインテーブルにトリガーを追加して、値/変更を別の「リンク」テーブルに書き込むことができます: http://sqlfiddle.com/#!4/d78f6

2 番目の「リンク」テーブルは、(col1、col2、col3) の一意の値ごとに col4 の一意性を強制します。これにより、table1 の列/値を以前と同じに保つことができます。基本的には、情報を正規化するための制御が可能なテーブルに複製します。

于 2013-08-05T12:36:46.460 に答える