アップデート
OPによって提起された報告の問題に対処するのを忘れました(Mark Bannisterに感謝します)。これは、報告に対処する方法の刺し傷です。
最初(データ移行前)に、ユーザーの名前、国、年齢を生成するレポートは、次のSQLを使用します(多かれ少なかれ):
-- This query orders users by their Lastname
SELECT Lastname, Firstname, Age, Country FROM tableA order by Lastname;
tableA
名前関連フィールドは、データ移行後には存在しなくなりました。情報を取得するには、との結合を実行する必要tableB
があります。クエリは次のように変更されます。
SELECT b.Lastname, b.Firstname, a.Country, a.Age FROM tableA a, tableB b
WHERE a.name = b.id ORDER BY b.Lastname;
レポートをどのように正確に生成するかはわかりませんが、これが、レポートを再び機能させるために行う必要のある変更の本質です。
元の回答
テーブルが1つしかない状況を考えてみましょう(table A
)。テーブルのいくつかの行は次のようになります。
# Picture 1
# Table A
------------------------------------------------------
Id | Country | Age | Firstname | Middlename | Lastname
1 | US | 45 | John | Fuller | Doe
2 | UK | 32 | Jane | Margaret | Smith
2番目のテーブル()を追加するとtable B
、名前に関連するフィールドがからに移動table A
しtable B
ます。各行Table A
に対応するものを指す外部キーがあります。table B
# Picture 2
# Table A
------------------------------------------------------
Id | Country | Age | Name
1 | US | 45 | 10
2 | UK | 32 | 11
# Table B
------------------------------------------------------
Id | Firstname | Middlename | Lastname
10 | John | Fuller | Doe
11 | Jane | Margaret | Smit
これが最終的な写真です。欠点は、データがそれ自体でからtable A
に移動しないことです。table B
悲しいかな、これを達成するには人間の介入が必要です。私が言われた人間であるならば、私は以下に与えられたステップに従うでしょう:
table B
列、、、Id
およびをFirstname
使用して作成します。これで、2つのテーブルとができました。すべての既存のデータがあり、空です。Middlename
Lastname
A
B
A
B
- に外部キーを追加し
table A
ます。このFKが呼び出され、のフィールドをname
参照し ます。id
table B
- の各行について、、、およびから取得したフィールドを使用して
table A
新しい行を作成します。table B
Firstname
Middlename
Lastname
table A
- 各行をコピーした後、の
name
フィールドをtable A
にid
新しく作成された行ので更新しますtable B
。
データベースは次のようになります。
# Table A
-------------------------------------------------------------
Id | Country | Age | Firstname | Middlename | Lastname | Name
1 | US | 45 | John | Fuller | Doe | 10
2 | UK | 32 | Jane | Margaret | Smith | 11
# Table B
------------------------------------------------------
Id | Firstname | Middlename | Lastname
10 | John | Fuller | Doe
11 | Jane | Margaret | Smith
Firstname
これで、Middlename
とのLastname
列が不要になり、table A
ドロップできるようになります。
- voilà、データ移行を実行しました!
上記で説明したプロセスは、データ移行の具体例にすぎません。多くの言語/ツールを使用して、さまざまな方法でそれを実現できます。メカニズムの選択はケースごとに異なります。