数据库数据迁移

时间:2010-08-14 19:17:56

标签: database data-migration

我有一个名为A的数据库表,现在我创建了一个名为B的新表,并在表B中创建了一些A列。

例如:假设表格中有以下列

表A //已存在的

Id, Country Age Firstname, Middlename, Lastname

表B //我创建的新表

Id Firstname Middlename Lastname

现在表A看起来像,

表A //修改后的新表A

Id, Country, Age, Name

在这种情况下,它将映射表B ..

所以我的问题是现在我需要维护在表修改之前生成的报告,我的朋友告诉我你需要进行数据迁移。所以我可能知道什么是数据迁移以及它的工作原理

谢谢。

2 个答案:

答案 0 :(得分:2)

更新

我忘了解决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;  

我不知道您是如何生成报告的,但这是为了让您的报告再次运行而必须进行的更改的本质。

原始答案

考虑只有一个表(table A)的情况。表中的几行看起来像这样:

# Picture 1
# Table A
------------------------------------------------------
Id | Country | Age | Firstname | Middlename | Lastname
1  | US      | 45  | John      | Fuller     | Doe
2  | UK      | 32  | Jane      | Margaret   | Smith

添加第二个表格(table B)后,名称相关字段将从table A移至table BTable 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 BIdFirstnameMiddlename列创建Lastname。您现在有两个表ABA包含所有现有数据,B为空。
  2. 将外键添加到table A。此FK将被称为name,并将引用id的{​​{1}}字段。
  3. 对于table B中的每一行,使用table A中的table BFirstnameMiddlename字段在Lastname中创建新行。
  4. 复制每一行后,使用table A中新创建的行的name更新table A id字段。
  5. 现在数据库看起来像这样:

    table B
    1. 现在您不再需要# 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 中的FirstnameMiddlenameLastname列,因此您可以删除它们。
    2. voilà,您已执行数据迁移!
    3. 我刚才描述的过程只是数据迁移的一个具体示例。您可以使用多种语言/工具以多种方式完成此任务。机制的选择因具体情况而异。

答案 1 :(得分:2)

现有报告的维护将取决于用于编写/生成这些报告的工具。一般来说:

  1. 识别使用表A的现有报告。(可能通过搜索其中包含表A名称的文件 - 但是,如果表A具有通常在系统中其他地方使用的名称[例如用户名],这可能会带来许多误报。)
  2. 确定哪些报告使用了从表A中删除的列。
  3. 修改现有报告以从表B而不是表A返回已移动的列。
  4. 实现此目的的一种快速方法是创建一个模拟表A旧结构的数据库视图,并修改受影响的报告以使用数据库视图而不是表A.但是,这会增加维护的额外层次报告(因为开发人员可能需要维护数据库视图以及报告),并且可能会被DBA弃用甚至阻止 - 因此,如果现有批次,我建议使用此方法报告受到影响。