4

Rails アプリケーションの 2 つのインスタンスがあり、それぞれが独自のデータベースと通信します。それらを単一のデータベースを備えた単一のアプリケーションに変換している最中です。特定のドメインに固有である必要がある部分は、既に正常に動作するようにしています。あとはデータベースをマージするだけです。1 つのインスタンスから別のデータベースにデータをコピーし、重複しないように ID を修正します。多くの外部キーを持つテーブルがたくさんあります。外部キーが新しいデータベースの正しい行を指し続けるように、これを行う良い方法は何ですか?

これが不明な場合は、悪いアスキー アートで問題を複雑にさせていただきます。

4

2 に答える 2

3

ほとんどのリレーショナルデータベースでは、指定されたテーブルの主キーが変更されたときに監視するように制約される外部キーに注釈を付けることができます。を使用して、これが発生したときに外部キーを「自動更新」するように設定できますON UPDATE CASCADE。両方のデータベースのすべての外部キーに対してこれを実行してから、両方のデータベースのすべての主キーを更新すると、すべての外部キーが自動的に変換されます。

于 2011-01-12T16:39:44.247 に答える
2

すべての id 列 (外部キーを含む) を元の値の 10 倍になるように更新してから、最初のデータベースに 1 を追加し、2 番目のデータベースに 2 を追加します。

そうすれば、id 1 は db 1 では 11 になり、db 2 では 12 になります。主キーと外部キーの両方が同じ変更を受けるため、レコードがどのように関連するかを心配する必要はありません。同じ式で更新するだけです。 .

だから、それは次のようになります

データベース 1:

UPDATE user SET id = id * 10 + 1;
UPDATE privilege SET id = id * 10 + 1, user_id = user_id * 10 + 1;

データベース 2:

UPDATE user SET id = id * 10 + 2;
UPDATE privilege SET id = id * 10 + 2, user_id = user_id * 10 + 2;
于 2011-01-12T16:19:27.943 に答える