开始大型数据库的团队开发

在使用 Visual Studio 管理对数据库架构所做的更改之前,需要首先创建数据库项目、服务器项目或数据层应用程序项目,然后从要管理的数据库中导入对象和设置。 如果您要管理对非常大的数据库的更改,可能需要将这些对象划分到多个数据库项目中。 这样做可以控制哪些团队或开发人员可以添加、修改或删除不同数据库部分中的代码。

可以通过两种方法将数据库分为多个较小的部分:

  • 复合项目 - 可以在两个或更多通过数据库项目引用链接在一起的数据库项目中(或者,可以在同一解决方案中引用已编译的 .dbschema 文件)对您的数据库的各个部分进行定义。 在部署包含数据库项目引用的项目时,将同时部署该项目所引用的所有项目。 复合项目中的项目之间不能存在循环引用。

  • 分部项目 - 可以通过 .files 文件的形式导出数据库项目的一部分。 然后可创建另一个数据库项目,并包括该分部项目(.files 文件)。 然后,您可以设置对原始文件的写权限,以限制对这些文件进行更改。 因此,处理第二个项目的开发人员创建的其他对象可以引用这些只读对象,但不能修改它们。 在生成和部署第二个项目时,会生成数据库的完整副本,包括只读部分。 分部项目中可以存在循环引用。

每种方法都有限制,本主题后面将进行详细介绍。

指定数据库项目的类型

在创建数据库项目时,需要指定与 SQL Server 版本对应的项目类型。 例如,如果要管理的数据库基于 SQL Server 2005,则需指定**“SQL Server 2005 数据库项目”“SQL Server 2005 向导”**。 如果使用向导,则不仅能创建项目,同时还能配置某些生成和部署设置,并导入数据库对象和设置。

导入数据库对象和设置

创建项目之后,可以从数据库实例或脚本导入对象和设置。 从脚本导入数据库时,将验证其对象定义,并将无法分析的语句放入 ScriptsIgnoredOnImport.sql 文件中。 如果导入的对象定义引用了不再存在的对象,则必须先解决这些错误,然后才可以生成和部署项目。 例如,您导入的存储过程可能引用了不再存在的表。 若要解决该错误,可以删除该存储过程。

导入大型架构时,可能需要花费大量时间来解决这类错误。 然而,团队成员在 Visual Studio 高级专业版 中更新架构时,不能在不知情的情况下引入其他同类错误。 在他们修改和保存任何对象定义时,需验证所有更改,以便团队成员可以立即修复错误,避免将这些错误部署到实时数据库中。 解决对象定义中的警告之后,还应考虑分析数据库代码是否存在设计问题、命名问题和性能问题。 有关更多信息,请参见分析数据库代码以提高代码质量

常规任务

常规任务

支持内容

了解有关数据库项目以及分部和复合项目限制的更多信息:您可以了解有关如何使用数据库项目管理架构更改的基本概念。

进行动手练习:可以按照介绍性演练操作,熟悉如何使用分部项目或复合项目对数据库项目进行分区。

将现有数据库架构置于版本控制之下:可以使用数据库项目向导创建项目、配置项目设置以及导入架构。 如果希望以后导入架构,或是如果无权访问要从中导入架构的数据库,则还可以创建空项目。 导入架构之后,可以将项目添加到版本控制。

对数据库项目进行分区以共享对象定义:可以从一个数据库项目导出对象定义并在其他项目中重用这些定义。 团队成员即使可以访问向其中导入分部项目定义的项目,也不能修改导入的对象。 因此,您可以将更改控制到数据库代码的子集。

添加引用以创建复合项目:通过添加对数据库项目的引用但不指定服务器和数据库变量的值,可以创建复合项目。 在部署项目时,将会同时部署该项目所引用的所有项目。

分部项目的用法和限制

下图演示了使用分部项目的典型方案:

在 Database Edition 中使用分部项目

Database Edition 中的分部项目

此示例中的项目包含两组对象。 您希望其他开发人员或团队向项目添加存储过程,但要防止他们无意中更改其他对象。 若要使用分部项目实现此目标,必须执行下列步骤:

  1. 按架构或按对象类型将对象组导出到 A.files 和 B.files 中。

  2. 创建第二个数据库项目,其他开发人员或团队将在其中创建存储过程(有时称为“sproc”)。

  3. 将导出的分部项目 A.files 和 B.files 导入到第二个数据库项目中。

  4. 限制对导入的分部项目中的对象的源代码管理权限,使之仅允许只读访问。

此时,其他开发人员或团队可以添加对象,生成并部署他们的项目以测试他们所做的更改。

如果您的数据库包含具有长名称的对象,或是用于创建数据库项目的路径过长,则您可能无法将分部项目(.files 文件)导入另一个数据库项目。 如果遵循以下建议,则可以避免这些问题:

  • 在具有较短路径名称的文件夹中创建数据库项目。 例如“D:\MyProjects”可能要好于“C:\Documents and Settings\UserName\My Documents\Visual Studio 2008\Projects”。

  • 避免使用很长的数据库对象名称。 外键是最常见的具有长名称的对象类型。 如果外键的名称为“FK_ReferencingTable_ReferencedTable_ReferencedColumn1_ReferencedColumn2”,则在尝试导入包含该键定义的分部项目时可能会出现错误。

复合项目的用法和限制

下图演示了使用复合项目的典型方案:

在 Database Edition 中使用复合项目

Database Edition 中的复合项目

在此示例中,您可以创建一个包含架构定义的数据库项目。 然后创建包含表和视图定义的第二个数据库项目,以及包含所有存储过程定义的第三个数据库项目。 第三个项目(数据库项目 C)引用另外两个数据库项目。 在生成和部署第三个项目时,也会自动部署另外两个项目。

如果使用复合项目,则必须能够独立生成和部署每个项目。 在复合项目中的项目之间不能存在循环依赖关系。 可以使用复合项目按对象类型对数据库进行分区。 例如,可以将架构放入一个项目,将表和视图放入另一个项目,而将存储过程放入第三个项目。

相关方案