Alok Mehta和Ricardo Rodriguez
本文假设您熟悉 T-SQL、XML 和 XSL
Level of Difficulty 1 2 3
请下载本文的代码:MetaDataServices.exe(114KB)
摘要SQL Server 2000 Meta Data Services 是一种存储和管理 SQL Server 的元数据的知识库技术。利用 Meta Data Services,您无需反复地构建数据库架构,就可以冻结整个架构,以便在其他项目中使用。您还可以将这些架构用于培训、测试或调试。我们将在本文中讨论 Meta Data Services 的多个组件,说明如何使用 Visual Basic 客户端、XML 和 XSLT 对其进行编程。我们还会说明如何通过使用 SQL Server 知识库生成简单的数据库架构来管理和操作您的元数据。
元数据可以说是无处不在。它是数据库架构、对象模型、项目说明、文件制作、交叉引用、可重用组件、软件/硬件配置、业务规则和知识库的一个组成部分。虽然元数据很常见,但用于管理它的工具和方法却很少。在许多情况下,开发人员发现他们自己在为各种不同的项目重复地设计和实现类似的数据库架构。而且,当应用程序在生产环境中使用时,开发人员常常需要冻结没有数据的数据库架构版本,这样他们就可以将冻结的架构用于其他目的。开发人员可以使用全部冻结或部分冻结的架构来启动一个新项目,也可以将其用于文档管理和培训。他们可能还需要冻结可用来测试、调试和优化不包含生产数据的应用程序的架构。可以通过几种方法来完成这些任务。开发人员可以编写 SQL 语句来创建数据库的备份、从数据库备份中删除所有数据,并通过编写自定义解决方案使用存储过程来获得有关架构的信息。在本文中,我们将讨论 SQL Server? 2000 中隐藏的、未被人们重视的卓越功能中的一个,您可以用它来轻松地创建数据库架构知识库,这个功能就是 Meta Data Services。我们将使用 XML 说明 SQL Server 2000 Meta Data Services 的功能,您可以用它来冻结数据库架构,并将部分已冻结的架构用于其他项目。我们将讨论 Meta Data Services 的组成部分,以及如何使用 Visual Basic? 客户端、XML 和 XSLT 对它们进行编程。我们还要演示一个简单的数据模型,以便说明它的工作原理。
入门SQL Server 2000 Meta Data Services 是一种面向对象的储存库技术,它存储和管理 SQL Server 的元数据及其组件。Meta Data Services 不仅能存储元数据,而且可以与其他工具和应用程序进行集成。它提供了用于存储和管理数据仓库定义、联机分析处理 (OLAP) 定义、开发工具中使用的设计数据以及编程环境中使用的任何其他类型的元数据的解决方案。限于篇幅,本文不可能涵盖 Meta Data Services 提供的所有功能。以下是一些您可以自己研究的功能和服务。
广泛支持开放标准 Meta Data Services 支持各种标准,例如,基于 COM 的接口、XML 编码和开放式信息模型 (OIM)。OIM 支持标准元数据。XML 编码支持 OIM 元数据的导入和导出。有关 Meta Data Services 中的 OIM 以及 Meta Data Services 中的 XML 的更多信息,请参阅Ways to Use XML in Meta Data Services。
各种信息模型 Meta Data Services 通过 OIM 和其他信息模型支持标准元数据和用户定义的元数据。模型设计人员和程序员可以使用 SDK 来创建基于元数据的应用程序、构建或扩展作为共享元数据基础的信息模型。有关更多信息,请参阅 Meta Data Services SDK。 知识库引擎 Meta Data Services 提供知识库引擎,它在知识库数据库中存储、合并和检索元数据。知识库引擎是作为对象模型提供的,您可以使用 Repository API(知识库 API)来访问它。
Repository API 所包括的 Repository API 通过 COM 接口公开知识库引擎功能和信息模型定义。
Meta Data Browser 您可以利用该工具来浏览注册的数据库。可以在 SQL Server 2000 中使用该工具,也可以将它作为 Microsoft? 管理控制台 (MMC) 的管理单元使用。有关更多信息,请参阅"Using Meta Data Browser"。
您应该已经了解到 Meta Data Services 提供了各种功能,已超出了本文的讨论范围。我们重点讨论知识库数据库的功能以及它们在 SQL Server 2000 中与 XML 的集成。我们还将说明如何使用 Microsoft 开发的组件在知识库数据库中创建、浏览、导入和导出信息。首先,您需要安装Meta Data Services SDK 版本 3.0。安装 SDK 后,您将看到在目录 C:\Program Files\Common Files\Microsoft Shared\Repostry\ 中安装了几个 COM 组件。我们将使用该目录中的某些组件。
图 1 转换架构
虽然可以通过几种不同的方式来使用 SQL Server 2000 中的 Meta Data Services,但我们讨论的方法是将它的服务作为转换步骤来使用的,以便帮助您创建转换的架构。例如,当您启动一个新项目时,您可能需要现有项目的架构的子集,而不是整个架构。图 1 显示了该方法的概览。接下来的四个小节将说明这个过程中的每个步骤。
创建知识库数据库
有时,开发人员很希望冻结一个特定版本的数据库的架构。如图 1 所示,应用程序数据模型 1 有许多版本,但我们只需要冻结版本 3。根据我们的方法,应该在此步骤中创建数据库版本 3 的知识库。知识库引擎是一个服务,它提供了存储和检索对象以及维护对象之间的关系的基本功能。在该示例中,数据库架构就是知识库引擎使用的对象。可以通过以下方式创建知识库数据库:使用 Visual Basic 客户端中的 COM 组件 REPODBC.DLL 或使用 SQL Server 2000 中的企业管理器。在本文中,我们将使用企业管理器。
导出元数据
创建知识库以后,您可以使用 Meta Data Services SDK 提供的 COM 接口通过编写代码访问它,以便将架构作为 XML 导出。SQL Server 2000 Meta Data Services 通过对知识库数据库进行编码来支持 XML,以便用 XML 导入、导出和发布元数据。您还可以在两个知识库数据库之间、在知识库数据库和应用程序之间或者在两个可以解释同一 XML 格式的应用程序之间交换元数据。Meta Data Services 使用 COM 接口来支持使用 XML 导出和导入数据。前面已经提到,我们将使用企业管理器中的 Meta Data Services 来导出数据库的架构。虽然该架构有许多用途,但我们的目标是使用 XSLT将此 XML 转换为 SQL 脚本。
转换 XML 文档
实质上,这个步骤自动完成创建数据库和新架构的过程。您还可以使用您的自定义 DLL 或第三方工具来转换在图 1 的步骤 2 中创建的 XML,以创建目标数据库。我们使用 XSLT 来转换 Application 2 的架构。我们已经创建了一个到导出的 XML 的转换,导出的 XML 基于存在的 dbm 命名空间。在此示例中,我们的重点是创建可移植 SQL 脚本,它使用一组一般语言属性。
应该说明的是,元数据知识库是若干个用于软件设计的信息模型的抽象,其创建基于图 2中列出的、支持 OIM 的模型。
因为我们此处的目标是基于数据库模型的属性重新生成数据库模型,所以,为实现这一目标而所做的合理选择是主要处理与数据库架构元素的说明相关的元素。这意味着我们将主要处理 dbm 命名空间中的元素。为此,我们选择了两个基本的数据库元素,利用它们可以重新创建直到某个点的数据库,这两个元素是:表和索引。接着,我们将它们映射到从元素 dbm:DeployedTable 和 dbm:Index 导出的 XML 文档中。为了分隔元信息和数据库本身包含的信息,元数据知识库单独存储每个定义。数据库结构和它使用的数据类型之间的关系关联是使用 ID 来建立的。由于这个原因,当我们从导出的 XML 生成第一个脚本后,它不包含任何特定类型的信息(例如,nvarchar、integer 等),而只包括与其说明相关的 ID。为了生成此数据,我们不得不处理该 XML,并用动态方式来完成它。这意味着,一旦我们定义了脚本的基本布局,那么,我们接下来就需要在转换的页面内填充缺少的部分。为了完成这一即时进行的处理,XSLT 转换创建一个转换的文档,它以一种用户友好的格式提供脚本,在这里,该格式是 HTML。因为 XSLT 转换中的 XPath 表达式可以理解命名空间,并且在这种情况下我们需要匹配其他命名空间中的元素,所以,需要在 XSLT 文件中声明命名空间。综合流程如图 3 所示。
图 3 转换流程
此文档在生成后是由 HTML 标记帧构成的。在此文档的内部,我们将使用 javascript 创建核心文档,该核心文档将创建此文档的最终内容,而且会检索数据库脚本所需的数据类型。这个过程将使用 javascript 中的 ADO、通过创建 ActiveX? 对象来完成。一旦我们能够检索到这些内容,我们将动态地写入 HTML 文档以及页面的其他组成部分,以便提供脚本。我们假设 XML 将获得对样式表的引用。这个步骤是在导出的 XML 文件头中通过在行的开头添加以下内容来完成的:
从 SQL 脚本创建 SQL 架构
在这个步骤中,我们只需执行 SQL 脚本便可在 SQL Server 2000 中创建转换的架构。该 SQL 脚本将自动创建新应用程序 (Application 2) 所需的数据库。执行脚本后,您就可以开始启动新项目了。一旦生成结果产生的文档,您便会看到该文档包含一个用户界面,而脚本就显示在其中的 HTML 标记内。我们可以通过几种方式来使用此脚本。基本上,SQL 脚本的执行取决于用户的喜好,可以通过存储过程、查询处理器或任何其他工具来执行。
我们在开始说明示例项目的具体细节之前,还需要讨论一个问题。在启动新项目后,您可能会发现自己是在重复这个过程。也就是说,Application 2 的数据模型可能演变为几个版本,您可能需要冻结其中的一个版本。这一点如图 1 的步骤 5 所