2011-08-19 8 views
1

いくつかのデータベースをマージするPHPスクリプトを作成したいと思います。何かを始める前にそれを回避する方法を確認したいと思います。複数のmySQLデータベースを同等の構造で結合する

私は同じ構造とほぼ同じデータを持つ4つのデータベースを持っています。私は、外部キーを保存(または再リンク)しながら、重複エントリなしでそれらをマージしたい。

例えばので、私は私が唯一の新しい行を挿入することを確認するためにnamedescription列にLIKE比較を使用する必要がと思うほとんどdb2.productsと同じであるdb1.productテーブルがあります。しかし、ordersテーブルをマージするときには、productIDがまだ正しい製品を示していることを確認する必要があります。

だから私は2つのソリューションを考える:

  1. どちらか私は各テーブルinsert into db1.x as select * from db2.xに使用して、新しいリンクを作成し、トリガーを使用して、重複をチェックします。

  2. 重複するエントリを削除し、制約を破棄した後に新しい外部キーを更新してから、メインデータベースに行を挿入します。

  3. mySQLのMySQLデータ比較とToadについて聞いたことがありますが、テーブルをマージするのに役立つでしょうか?

誰かが正しい解決策を提示することができますか?

ご迷惑をおかけして申し訳ありません。

答えて

0

まず、商品が同じかどうかを判断していますか?あなたは名前と説明についてLIKE比較を述べました。あなたは、db1、db2などでその製品が1つで同一であるというルールを確立する必要があります。

ただし、製品の名前と説明がそれを定義する属性であるとします。

ALTER TABLE products ADD UNIQUE('name', 'description');

あなたのすべてのデータベース上でこれを実行します。

INSERT IGNORE INTO db1.products SELECT * FROM db2.products;

繰り返しを残りのデータベースのために:あなたはそれをやった後

、あなたがにインポートし、次のクエリを実行したいデータベースのいずれかを選択します。

当然、製品の比較方法を判断できない場合は、このすべてが失敗します。 注:ワード "name"などのカラム名に予約語を使用しないでください。

0

まず、これで幸運を祈るのは難しい仕事のようです。

第2に、私はこれをPHPでやっていません。これは、一時的な移行タスクであり繰り返しタスクではないと仮定して、SQLを記述して作業を行います。

アプローチとして、私は次のようにします。

  1. 必要なスキーマを使用してデータベースを作成します.4つのデータベースのそれぞれがスキーマのバリエーションが小さいように思えます。今のところスキーマを作成するだけで、データについて心配する必要はありません。

  2. 同じスキーマで、「古い」主キーの列を持つ「作業中の」データベースを作成します。例えば:

    テーブルORDER ORDER_ID int型主キー自動インクリメント old_order_idは ...他の列...

    テーブルORDER_LINE order_line_id int型主キー自動インクリメント old_order_line_idがnull ORDER_IDないint型nullではないint型int外部キー ...他の列...

  3. テーブルごとに、最初のソースデータベースから作業データベースに挿入します。プライマリキーをauto_incrementにしますが、元のプライマリキーを "old_"カラムに置きます。例えば :

    workingdb.ordersに挿入するヌル、ORDER_IDを選択 は、....その他の列... db1.ordersあなたが外部キーを持っている

から 、ことによってそれを移入old_列のレコードを検索します。例えば :

insert into workingdb.order_line 
select null, ol.order_line_id, o.order_id 
from db1.order_line ol, 
     workingdb.order 
where ol.order_id = o.old_order_id 
  1. リンスや他のデータベースのために繰り返します。

  2. 最後に、作業データベースのデータを「適切な」データベースにコピーします。これはオプションです。ルックアップなどのために古いIDを保持するのに役立ちます。

関連する問題