2010-12-17 15 views
1

私はテーブルを持っています。 3つの列が主キーの組み合わせを作成するという点で5つの列を持ちます。oracleのプライマリキーを更新

テーブル(コーラ、COLB、COLC、風邪、コール)

iが主キーグループ内の列のいずれかを更新します。どうやってするか?

その与え主キー制約エラー。

+3

なぜあなたは主キーを更新していますか?それは不変でなければならない。 – davek

+0

が必要です。助けてください –

+2

参照データを変更しないでください。 –

答えて

2

あなたの変更が再あなたの主キーにリンクされている制約を有効にする無効にする必要があります。 (ユニークな、null以外、等...)

はあなたが本当にこれらの3つの列の上に一意性を維持する必要がある場合は、あなたを構成する3つの列に一意制約を定義し、このwebsite

2

を見てみましょう現在のPKを定義し、次に新しい代理主キー列を定義します。

+1

なぜですか?主キーは単なる候補キーです。鍵を適用するために使用する一意性制約に違いはありません。サロゲートの追加については、どのように使用するかによって異なります。それのためだけにサロゲートを追加する点はありません。安定性(「不変性」ではない)は、どのキーにとっても有用な特性ですが、絶対的な要件ではありません。サロゲートキーでさえも更新する必要があります。 – sqlvogel

+4

あなたは例外的な状況(例えばデータ移行、)以外のプライマリキーを更新した場合は、その後、私は設計に問題があることをお勧め:http://stackoverflow.com/questions/2499246/how-更新するプライマリキー/ 2499507#2499507 – davek

+1

私は同意しません。あなたがそれをしたいと思う理由があります。しかし、いずれの場合でも、あなたの提案された解決策は実用的な違いはありません。 PRIMARY KEY制約によって強制される制約を更新することは、UNIQUEキー制約によって強制されるキーを更新することとまったく同じです。あなたが実際に*外部キー*について何か言いたいのであれば、それを明確にすることができたと思います。複合キーを参照する外部キーはなく、更新が必要かどうかは要件によって異なります。あなたの答えはまったく助けにならないと思います。 – sqlvogel

0

は、念のためにあなたもreferncingデータを変更する必要があります。 MS-SQL-Serverとは対照的に、更新時カスケードには外部キーの制約はありません。How to create a Foreign Key with “ON UPDATE CASCADE” on Oracle?を参照してください。私は、プライマリ・テーブルに新しい行を挿入し、新しい行を参照するために参照テーブルを更新し、最終的には元のプライマリ行を削除ものより

関連する問題