0

Aというデータベーステーブルがあり、Bという新しいテーブルを作成し、テーブルBにAの列をいくつか作成しました。

例:テーブルの次の列を想定します

テーブルA//すでに存在しているもの

Id, Country Age Firstname, Middlename, Lastname

テーブルB//作成する新しいテーブル

Id Firstname Middlename Lastname

これで、テーブルAは次のようになります。

テーブルA//変更後の新しいテーブルA

Id, Country, Age, Name

この場合、テーブルBにマップされます。

したがって、私の問題は、テーブルを変更する前に生成されたレポートを維持する必要があることです。友人から、データ移行が必要だと言われました。データ移行とは何か、その動作を教えてください。

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

4

2 に答える 2

2

アップデート

OPによって提起された報告の問題に対処するのを忘れました(Mark Ba​​nnisterに感謝します)。これは、報告に対処する方法の刺し傷です。

最初(データ移行前)に、ユーザーの名前、国、年齢を生成するレポートは、次の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 Atable 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悲しいかな、これを達成するには人間の介入が必要です。私が言われた人間であるならば、私は以下に与えられたステップに従うでしょう:

  1. table B列、、、IdおよびをFirstname使用して作成します。これで、2つのテーブルとができました。すべての既存のデータがあり、空です。MiddlenameLastnameABAB
  2. に外部キーを追加しtable Aます。このFKが呼び出され、のフィールドをname参照し ます。idtable B
  3. の各行について、、、およびから取得したフィールドを使用してtable A新しい行を作成します。table BFirstnameMiddlenameLastnametable A
  4. 各行をコピーした後、のnameフィールドをtable Aid新しく作成された行ので更新します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
  1. Firstnameこれで、MiddlenameとのLastname列が不要になり、table Aドロップできるようになります。
  2. voilà、データ移行を実行しました!

上記で説明したプロセスは、データ移行の具体例にすぎません。多くの言語/ツールを使用して、さまざまな方法でそれを実現できます。メカニズムの選択はケースごとに異なります。

于 2010-08-14T19:42:29.223 に答える
2

既存のレポートの保守は、それらのレポートの作成/生成に使用されるツールによって異なります。一般に:

  1. テーブルAを使用した既存のレポートを特定します(おそらく、テーブルAの名前が内部にあるファイルを検索します。ただし、テーブルAの名前がシステムの他の場所で一般的に使用されている[例:ユーザー名]の場合、これは次のようになります。多くの誤検知。)
  2. 表Aから削除された列を使用したレポートを特定します。
  3. 既存のレポートを修正して、テーブルAではなくテーブルBから移動された列を返します。

これを実現する簡単な方法は、テーブルAの古い構造を模倣するデータベースビューを作成し、影響を受けるレポートを修正して、テーブルAの代わりにデータベースビューを使用することです。ただし、これにより、レポートの保守がさらに複雑になります(開発者はデータベースビューとレポートを維持する必要があり、DBAによって非推奨またはブロックされる可能性があるため、このアプローチを使用することをお勧めします。これは、既存のレポートの多くが影響を受ける場合にのみ使用することをお勧めします。

于 2010-08-16T10:30:07.333 に答える