2017-10-04 3 views
0

UIには、基になるテーブルの主キー列でもある名前フィールドがあります。そのフィールドをUIで編集可能にする必要があります。主キーとして機能するIDが必要ですが、IDカラムを導入することは現実的ではありません。プライマリキーでもある列を更新するには?

このようなシナリオで使用できる代替設計アイデアはありますか?

UIはSwingで、DBはOracleです。

+0

プライマリキーの更新は意味をなさない – Ravi

+0

はい、そうではありません。しかし、同様の機能を実現するための代替設計パターンはありますか?私が言ったように、IDを導入するためにデータモデルを変更することも、製品ごとに実現可能ではありません。 –

+0

PK列を更新できません。あなたの問題は何ですか?そうしたときに発生するエラーは何ですか? –

答えて

0

まず、わかりませんが、NameフィールドはPrimary Keyとすることができます。それはこれまでの間違ったデータベース設計です。

はい、IDの列をPrimary Keyに変更し、今後更新しないでください。以来、Primary Keyを複数持つことはできません。だからここでサーカスをやる必要があります。

  • 最初Primary Keyを既存のdropする必要があります。 1つのテーブルに複数のPrimary Keyを置くことはできません。

  • あなたID列を作成し、その後NULL

  • を許可し、シーケンスでこのコラムを更新します。

  • ID列にデータが入力されたら、この列にPrimary Keyを作成する必要があります。

+0

ありがとうございます。しかし、それにはほとんど問題はありません。これは従来の製品であり、名前が主キーとして使用された理由がいくつかありました。あなたが提案したアプローチは理想的なアプローチでなければなりませんが、巨大なデータモデルの変更が必要になるため、これを実行することはできません。 これに代わる解決策がありますか? –

+0

@NinadSinghNegi私は今のところ他の選択肢は考えられません。 – Ravi

0

プライマリキーは1つしか設定できませんが、テーブルには任意の数のユニークなインデックスを設定できます。したがって、既存の主キーを不変の主キーとし、アプリケーションでこのキーをすべて内部的に使用させるようにします。別の列をテーブルに追加し、テーブルに一意のインデックスを作成します。ユーザーがこの他のフィールドを変更するようにします。

また、外部キーを持つすべての子テーブルをUPDATE CASCADEに宣言することもできます。これにより、主キーの更新はすべて子テーブルにカスケードされます。本番環境で実装されたら、会社を辞めて別の方向にすばやく実行し、プロダクション環境でON UPDATE CASCADEを初めて使用した人物の記事を書いてください。

関連する問題