UIには、基になるテーブルの主キー列でもある名前フィールドがあります。そのフィールドをUIで編集可能にする必要があります。主キーとして機能するIDが必要ですが、IDカラムを導入することは現実的ではありません。プライマリキーでもある列を更新するには?
このようなシナリオで使用できる代替設計アイデアはありますか?
UIはSwingで、DBはOracleです。
UIには、基になるテーブルの主キー列でもある名前フィールドがあります。そのフィールドをUIで編集可能にする必要があります。主キーとして機能するIDが必要ですが、IDカラムを導入することは現実的ではありません。プライマリキーでもある列を更新するには?
このようなシナリオで使用できる代替設計アイデアはありますか?
UIはSwingで、DBはOracleです。
まず、わかりませんが、Name
フィールドはPrimary Key
とすることができます。それはこれまでの間違ったデータベース設計です。
はい、ID
の列をPrimary Key
に変更し、今後更新しないでください。以来、Primary Key
を複数持つことはできません。だからここでサーカスをやる必要があります。
最初Primary Key
を既存のdrop
する必要があります。 1つのテーブルに複数のPrimary Key
を置くことはできません。
あなたID
列を作成し、その後NULL
を許可し、シーケンスでこのコラムを更新します。
ID
列にデータが入力されたら、この列にPrimary Key
を作成する必要があります。
ありがとうございます。しかし、それにはほとんど問題はありません。これは従来の製品であり、名前が主キーとして使用された理由がいくつかありました。あなたが提案したアプローチは理想的なアプローチでなければなりませんが、巨大なデータモデルの変更が必要になるため、これを実行することはできません。 これに代わる解決策がありますか? –
@NinadSinghNegi私は今のところ他の選択肢は考えられません。 – Ravi
プライマリキーは1つしか設定できませんが、テーブルには任意の数のユニークなインデックスを設定できます。したがって、既存の主キーを不変の主キーとし、アプリケーションでこのキーをすべて内部的に使用させるようにします。別の列をテーブルに追加し、テーブルに一意のインデックスを作成します。ユーザーがこの他のフィールドを変更するようにします。
また、外部キーを持つすべての子テーブルをUPDATE CASCADEに宣言することもできます。これにより、主キーの更新はすべて子テーブルにカスケードされます。本番環境で実装されたら、会社を辞めて別の方向にすばやく実行し、プロダクション環境でON UPDATE CASCADEを初めて使用した人物の記事を書いてください。
プライマリキーの更新は意味をなさない – Ravi
はい、そうではありません。しかし、同様の機能を実現するための代替設計パターンはありますか?私が言ったように、IDを導入するためにデータモデルを変更することも、製品ごとに実現可能ではありません。 –
PK列を更新できません。あなたの問題は何ですか?そうしたときに発生するエラーは何ですか? –