更新
我忘了解决 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 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
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
因此您可以删除它们。
- 瞧,您已执行数据迁移!
我刚才描述的过程只是数据迁移的一个具体示例。您可以使用多种语言/工具以多种方式完成它。机制的选择会因情况而异。