代码之家  ›  专栏  ›  技术社区  ›  Harshana

数据库数据迁移

  •  0
  • Harshana  · 技术社区  · 14 年前

    我有一个名为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 回复  |  直到 7 年前
        1
  •  2
  •   Community dbr    7 年前

    更新

    我忘了处理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 )与名称相关的字段将从 表A 表B . Table A 将有一个外键指向 表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
    

    这是最后一张照片。关键是数据不会从 表A 表B 独自一人。唉,要做到这一点,需要人为干预。如果我是上述人类,我将遵循以下步骤:

    1. 创造 表B 带柱 Id , Firstname , Middlename Lastname . 你现在有两张桌子 A B . 拥有所有现有数据, 是空的。
    2. 向添加外键 表A . 此FK将被称为 name 并将引用 id 领域 表B .
    3. 对于每一行 表A 在中创建新行 表B 使用 第一名字 , 中间名 姓氏 字段取自 表A .
    4. 复制每一行后,更新 名称 领域 表A 身份证件 中新创建的行的 表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. 现在你不再需要 第一名字 , 中间名 姓氏 表A 所以你可以放下它们。
    2. 喂,您已经执行了数据迁移!

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

        2
  •  2
  •   user359040    14 年前

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

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

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