2016-10-18 7 views
0

Oracleデータベースのテール間の関係を変更して既存のデータを保持する方法について質問があります。OracleデータベースのM:Mと1:Mの関係を変更してください

私は人と雇用者が一人の雇用者のために働くように表現したいとしましょう。これは、PERSONテーブルと、EMPLOYERとPERSONの1:Mの関係を持つEMPLOYERテーブルで行います。 PERSON表に列ID、NAME、およびEMPLOYER_IDがあり、EMPLOYER表に列ID、NAME、およびLOCATIONがありました。

PERSONが複数のEMPLOYERで動作するようにこのスキーマを更新したい場合は、各IDの列を持つPERSON_EMPLOYERテーブルを追加できます。

誰もがこれを行い、私の既存のデータを移動する最も賢明な方法のいくつかのポインタを与えることができますか?私は結合テーブルを追加することができると思いますが、私は既存の雇用者:雇用主のデータをどのように設定するかわかりません。その後、私はPERSONからEMPLOYER_ID列を削除すると思います。

私はデータベースをバックアップして、この操作をスクリプトで行うだけでよいですか?

ありがとうございました。

+0

あなたの 'person'テーブルにはすでに新しい' person_employee'テーブルを設定するために必要な両方のID値がありますので、あなたが必要と思うものは何か分かりません。バックアップする - または少なくともエクスポートするか、テーブルのコピーを作成する - 良い考えのようだ... –

答えて

0

バックアップを取ることは常に良い考えです。 しかし、私の意見では、あるテーブルから別のテーブルにデータを転送することは、かなり信頼性の高い操作です。スクリプトを作成する必要はありません。ステップバイステップで行い、変更を確認してください。

  1. PERSON_EMPLOYERテーブルにデータを既存の
  2. コピーを新しいPERSON_EMPLOYERテーブルを作成します。
  3. COMMITデータが変更されます。
  4. PERSON_EMPLOYERテーブルのデータを確認してください。
  5. PERSONテーブルからEMPLOYER_IDカラムを削除してください。 (あなたはすべてがあなたのデータと罰金であることを確認するだろうとき、すぐに列を削除する必要はあり、それは後で実行することはできません。)

PERSON_EMPLOYERテーブルにPERSONテーブルからデータを転送するためには、あなたは、単純なINSERT

を使用することができます
INSERT INTO employer_person (employer_id, person_id) 
    SELECT employer_id, person_id FROM person; 

この操作を忘れないでください!

関連する問題