我有一个名为A的数据库表,现在我创建了一个名为B的新表,并在表B中创建了一些A列。
例如:假设表格中有以下列
表A //已存在的
Id, Country Age Firstname, Middlename, Lastname
表B //我创建的新表
Id Firstname Middlename Lastname
现在表A看起来像,
表A //修改后的新表A
Id, Country, Age, Name
在这种情况下,它将映射表B ..
所以我的问题是现在我需要维护在表修改之前生成的报告,我的朋友告诉我你需要进行数据迁移。所以我可能知道什么是数据迁移以及它的工作原理
谢谢。
答案 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 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
的{{1}}字段。 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
列,因此您可以删除它们。 我刚才描述的过程只是数据迁移的一个具体示例。您可以使用多种语言/工具以多种方式完成此任务。机制的选择因具体情况而异。
答案 1 :(得分:2)
现有报告的维护将取决于用于编写/生成这些报告的工具。一般来说:
实现此目的的一种快速方法是创建一个模拟表A旧结构的数据库视图,并修改受影响的报告以使用数据库视图而不是表A.但是,这会增加维护的额外层次报告(因为开发人员可能需要维护数据库视图以及报告),并且可能会被DBA弃用甚至阻止 - 因此,如果现有批次,我建议使用此方法报告受到影响。