0

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

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

表A // 已经存在

Id, Country Age Firstname, Middlename, Lastname

Table B // 我创建的新表

Id Firstname Middlename Lastname

现在表 A 看起来像,

表A //修改后的新表A

Id, Country, Age, Name

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

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

谢谢你。

4

2 回答 2

2

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

  1. 识别使用表 A 的现有报告。(可能通过搜索其中包含表 A 名称的文件 - 但是,如果表 A 具有系统其他地方常用的名称 [例如用户名],则可能会返回很多误报。)
  2. 确定哪些报告使用了已从表 A 中删除的列。
  3. 修改现有报告以返回表 B 而不是表 A 中移动的列。

实现此目的的一种快速方法是创建一个模仿表 A 的旧结构的数据库视图,并修改受影响的报告以使用数据库视图而不是表 A。但是,这为维护报告增加了一层额外的复杂性(因为开发人员可能需要维护数据库视图和报告)并且可能会被 DBA 弃用甚至阻止 - 因此,我只建议在许多现有报告受到影响时使用这种方法。

于 2010-08-16T10:30:07.333 回答
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;  

我不知道您究竟是如何生成报告的,但这是您必须进行的更改的本质,以使您的报告再次工作。

原始答案

考虑一下只有一张桌子(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 B列创建。您现在有两个表和. 拥有所有现有数据,为空。IdFirstnameMiddlenameLastnameABAB
  2. 将外键添加到table A. 此 FK 将被调用name并将引用 的 id字段table B
  3. 对于中的每一行,使用,和取自的字段table A​​创建一个新行。table BFirstnameMiddlenameLastnametable A
  4. 复制每一行后,用中新创建的行的name字段更新。table Aidtable 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,MiddlenameLastname列,table A因此您可以删除它们。
  2. 瞧,您已执行数据迁移!

我刚才描述的过程只是数据迁移的一个具体示例。您可以使用多种语言/工具以多种方式完成它。机制的选择会因情况而异。

于 2010-08-14T19:42:29.223 回答