演练:在独立环境中执行迭代数据库开发

更新:2007 年 11 月

演练:创建独立数据库开发环境 中,您作为数据库管理员创建了一个数据库项目,并从成品服务器中导入了架构和数据库对象定义。在第二个演练中,您创建了数据库单元测试以验证现有功能并确立明确的基线。作为本系列的第三个也是最后一个演练,您将执行一项典型的迭代开发任务:重命名两个数据库列。为了使您的更改给团队其他人员带来的风险降至最低,您将在独立开发环境中进行这些更改,直至您做好了共享更改的一切准备。

本演练涉及以下任务:

  • 如何使用数据库重构重命名列,从而减少更新对列的所有引用所需的时间,以及降低出错几率。

  • 运行数据库单元测试以验证更改未破坏现有功能。

  • 将更改签入版本控制以使其可供其他团队成员使用。

先决条件

必须已安装 Visual Studio Team System Database Edition 并且具有对 Microsoft SQL Server 2005 的 AdventureWorks 示例数据库的访问权限。此外,本演练假定您已经完成了 演练:创建独立数据库开发环境演练:为独立开发环境建立基线

重命名数据库列

通常,一个开发任务会涉及对数据库对象进行重命名。本演练中,您需要将 [HumanResources].[Employee] 表中的 EmployeeID 列重命名为 EmployeeNumber。在多个外键和存储过程中引用了 EmployeeID 列。若要进行手动更改,将不得不修改多个文件。进行修改之前,您应该确保拥有该数据库项目的最新版本。

获取数据库项目的最新版本

  1. 在“团队资源管理器”中,展开包含该数据库项目的“团队项目”节点。

  2. 双击“源代码管理”节点以打开“源代码管理资源管理器”。

  3. 在“源代码管理资源管理器”中,右击您的数据库项目,再单击“获取最新版本”。

    包含该数据库项目的解决方案的最新版本随即被检索到您的计算机中。

将 EmployeeID 重命名为 EmployeeNumber

  1. 如果 AdvWorksSandbox 解决方案已在“解决方案资源管理器”中打开,则转至步骤 4。

  2. 在“文件”菜单上,指向“打开”,然后单击“项目/解决方案”。

    将出现“打开项目”对话框。

  3. 单击 AdvWorksSandbox 解决方案,然后单击“打开”。(默认情况下,此解决方案位于“我的文档\Visual Studio 2005\Projects\AdvWorksSandbox”中。)

    AdvWorksSandbox 解决方案将在“解决方案资源管理器”中打开。

  4. 打开“视图”菜单,然后单击“架构视图”。

  5. 在“架构视图”中,展开 AdvWorksSandbox 节点,然后展开“表”文件夹。

  6. 在“表”文件夹中,展开 HumanResources.Employee 表,然后展开“列”文件夹。

  7. 右击 EmployeeID 文件夹,指向“重构”,然后单击“重命名”。

    “重命名”对话框随即出现,并显示现有列名。

  8. 在“新名称”框中键入 EmployeeNumber。

  9. 如果“预览更改”复选框未选中,则将其选中并单击“确定”。

    “预览更改 - 重命名”对话框随即出现,并显示此项目中引用您正在重命名的列的所有项。

  10. 单击其中一个更改。

    该更改的详细信息将显示在“预览更改”中。

  11. 检查更改之后,单击“应用”以应用更改。

    所有经过修改的文件都将从版本控制中签出。

您可在“挂起的更改”窗口中查看挂起的更改。下列文件应出现在“挂起的更改”窗口中:

  • AWGenPlan.dgen

  • Employee.table.sql

  • Employee.PK_Employee_EmployeeID.sql

  • vSalesPerson.view.sql

  • uspGetManagerEmployees.proc.sql

  • vEmployee.view.sql

  • vEmployeeDepartmentHistory.view.sql

  • uspUpdateEmployeePersonalInfo.proc.sql

  • uspUpdateEmployeeHireInfo.proc.sql

  • uspUpdateEmployeeLogin.proc.sql

  • PurchaseOrderHeader.FK_PurchaseOrderHeader_Employee_EmployeeID.fkey.sql

  • Employee.FK_Employee_Employee_ManagerID.fkey.sql

  • EmployeePayHistory.FK_EmployeePayHistory_Employee_EmployeeID.fkey.sql

  • EmployeeDepartmentHistory.FK_EmploymentDepartmentHistory_Employee_EmployeeID.fkey.sql

  • JobCandidate.FK_JobCandidate_Employee_EmployeeID.fkey.sql

  • EmployeeAddress.FK_EmployeeAddress_Employee_EmployeeID.fkey.sql

  • SalesPerson.FK_SalesPerson_Employee_EmployeeID.fkey.sql

  • Employee.uEmployee.trigger.sql

运行数据库单元测试

在进行任何更改之后并在将其签入版本控制之前,应运行数据库单元测试以确保应用程序仍能正确运行,然后再与团队共享这些更改。

运行数据库单元测试以找出任何潜在问题

  1. 在“测试”菜单上,指向“窗口”,然后单击“测试视图”。

    “测试视图”窗口将列出若干测试。默认情况下,已创建了名为 ManualTest1 和 TestMethod1 的测试。名为 dbo_uspGetManagerEmployeesTest 和 dbo_ufpLeadingZeroTest 的测试是您在前一个演练中创建的。

  2. 选择 dbo_uspGetManagerEmployeesTest 和 dbo_ufpLeadingZeroTest 对应的复选框,右击这两个复选框当中的任意一个,再单击“运行选定内容”。

  3. 在“测试结果”窗口中查看结果。

    至此,已在独立开发环境中部署数据库项目,测试数据已生成,已运行测试并通过。

将数据库项目与成品数据库进行比较

您可以将更新后的数据库项目的架构与成品数据库进行比较,以确定它们之间的差异。因为只是比较两个架构,而不是更新其中的某个架构,所以可指定其中任一个为源或目标进行比较。

将数据库项目架构与成品数据库进行比较

  1. 在“数据”菜单上,指向“架构比较”,然后单击“新建架构比较”。

    将出现“新建架构比较”对话框。

  2. 接受“源架构”的默认值。

    已经指定数据库项目 AdvWorksSandbox。

  3. 在“目标架构”中的 Database 列表中,单击指向最初从中导入数据库架构的 AdventureWorks 数据库的连接,然后单击“确定”。

    将对两个架构进行比较。唯一的差别应为您在本演练中所做的更改。

  4. 查看两个架构之间的差别。完成后,关闭“架构比较”窗口。

    现在即可与团队共享您的更改。

签入更改

在确认所有的更改均可与其他团队成员共享之后,将其签入到版本控制中。您将签入对解决方案的任何更改,这通常包括数据库项目、单元测试项目以及任何关联的应用程序代码和应用程序单元测试。

签入更改并使其可供团队使用

  1. 在“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”。

    将出现“挂起的更改”窗口。

  2. 在“注释”框中键入“重命名的 EmployeeID 列”。

  3. 在“挂起的更改”窗口中,单击工具栏上的“签入”。

    在将数据库项目及其包含的文件签入版本控制中的过程中,将显示“签入进度”对话框。将更新“解决方案资源管理器”中的图标以表示文件已签入版本控制中。

后续步骤

对于您的团队部署到生产环境中的每个数据库版本,这种迭代过程将发生多次。每个开发人员都各自独立进行更改,测试更改以确保它们正确,然后将更新内容签入版本控制中以便与团队共享更改。将数据库部署到生产环境中的过程非常简单:

  1. 构成数据库项目及其测试的文件的版本已加注有版本标签,表明这些文件属于要部署的版本。

  2. 获取加注有标签的源文件并产生一个生成脚本。

  3. 查看生成脚本并根据需要对其进行修改,并执行部署至测试服务器的测试部署。每次部署之后,可将数据库项目与测试服务器上的架构进行比较。

  4. 在反复测试并修改生成脚本直至认为可将其转入生产环境之后,将修改后的生成脚本部署到生产环境中。

  5. 如果必须进行未在数据库项目中反映的更改,则可以从已更新的成品服务器上将这些更新导入到数据库项目中。

若要了解有关 Database Edition 的更多信息,可运行针对每个功能领域的更为深入的演练。

请参见

概念

Database Edition 术语概述

其他资源

重构数据库

运行数据库单元测试

比较数据库架构