赞
踩
注意:在最终的版本中,除非选择其他版本,否则仅安装适用于用户所在国家/地区的标准单位系统。
通过将 Object Type(对象类型)和 Predicate(谓词)形状从模具拖到 Drawing 窗口,可以将句子类型(事实类型或引用类型)添加到 ORM 模型中。另外,还可以使用 Fact Editor(事实编辑器)添加句子类型。现在,让我们使用 Business Rules 编辑器来进行此操作。将光标移到 Business Rules(业务规则)窗口中的 Fact Types(事实类型)窗格的底端行(在本例中只有一行)。输入事实类型或按 F2 键。显示 Fact Editor(事实编辑器)。还可以通过从屏幕顶部的 Database(数据库)菜单中选择 Database|View|Fact Editor (数据库|视图|事实编辑器)来调用 Fact Editor(事实编辑器)。默认情况下,Fact Editor (事实编辑器)的输入样式是 Guided(导向),如图 3 所示。
图 3:使用 Guided (导向)输入样式窗口的 Fact Editor(事实编辑器)(单击图像以查看大图片)
可以输入二元关系,提供正向阅读(例如,Employee works for Department[雇员就职于部门])和反向阅读(例如,Department employs Employee [部门雇用雇员])方式。如果需要,可以从二元中选择不同的设置更改关系中的数量(角色数目)。Object 窗格允许用户将对象类型分为实体类型、值类型或外部对象类型。如果实体类型具有简单的标识方案,则可以添加其引用模式(例如,雇员编号和部门代码)。
熟悉 Fact Editor(事实编辑器) 后,您可能希望将其输入样式更改为 Freeform(自由绘制),这样就可以通过使用正式语法更加快捷地输入句子类型。要将输入样式更改为 Freeform,可以使用选项按钮,还可以通过以下步骤使 Freeform 成为默认类型:转到屏幕顶部的 Database(数据库) 菜单,选择 Database | Options | Modeling...(数据库 | 选项 | 建模...),然后打开 Fact Editor (事实编辑器)窗格并将首选模式设置为 Freeform,如图 4 所示。在许多语言中,通过首字母大写命名对象类型,将其名称假设为一个词语(例如 Employee [雇员] 和 VicePresident [副总统]),可以很方便地标识对象类型。对于不适于使用这种方法的语言,或当名称由以空格分隔的多个词语组成时,应该选择括号模式:将对象类型名称用方括号括起来(例如,[employee]、[vice president])。
图 4:将 Fact Editor(事实编辑器) 的默认输出样式设置为 Freeform
在 Freeform 模式中,引用模式显示在对象类型名称后面的括号中。如果应用了反向阅读,则使用反斜杠 (/) 来区分正向阅读和反向阅读。
图 5:使用 Freeform 输出样式的 Fact Editor(事实编辑器)(单击图像以查看大图片)
为实体类型提供引用方案后,就不需要在以后指定事实类型时重复引用方案了。与实体类型不同,值类型(例如,EmployeeName [雇员姓名]、RoomNr [房间号])没有引用方案,由于其实例仅为文字常数(例如,用于命名或引用实体的字符串或数字),因此它们可以标识其自身。在 Freeform 模式中,值类型通过附加空括号 [()] 来标识。下面提供了使用正式的、自由绘制语法的某些事实类型的示例:
Employee(empNr) works for / employs Department(code)Employee has EmployeeName()Employee has MobileNr()Employee drives / is driven by Car(regNr)
现在,使用 Fact Editor (事实编辑器)输入这些事实类型(使用 Guided 或 Freeform 输入)。单击前三个事实类型后面的 Apply(应用) 按钮添加事实类型。输入第四个事实类型后,单击 OK(确定)。此操作将添加最后一个事实类型,并关闭 Fact Editor(事实编辑器)。这些事实类型尚未显示在绘图窗口中,但是现在已列在 Business Rules 编辑器中了。如果将光标移到其中一个 Fact Editor (事实编辑器)上,其右侧将显示一个 Edit(编辑) 按钮(参阅图 6)。如果单击 Edit(编辑) 按钮,将弹出 Fact Editor(事实编辑器),显示要编辑的事实类型。此操作提供了一种在 Fact Editor(事实编辑器) 中添加基本约束和示例的方法。
图 6:事实类型列在 Business Rules 编辑器中,并且可以编辑(单击图像以查看大图片)
如果约束仅应用到一个谓词,则为内部约束,否则为外部约束。使用 Fact Editor(事实编辑器) 可以声明以下内部约束:内部唯一性、简单强制、内部频率和环式约束,但不能指定内部集合比较约束(例如,同一谓词的两个角色之间的排斥约束)、外部约束(例如,外部唯一性约束或两个谓词之间的集合比较约束)或值约束(例如,将 Sexcode [性别代码] 值限制为 {M, F})。实际上,Fact Editor(事实编辑器) 中声明的约束最好限制为简单内部唯一性约束和简单强制约束。要声明其他类型的约束,有一个快捷方法(请参阅此系列文章的第二部分)。
要向 Fact Editor(事实编辑器)中显示的事实类型添加约束,请选择 Constraints(约束)选项卡。默认情况下,constraints(约束)窗格将唯一性和强制性约束组合在一起,以便更快地对其做出指定。例如,在图 7 中,选择“exactly one”(恰好为一)表示“at least one”(至少一个,强制)和“at most one”(至多一个,唯一)两种情况。约束符号和描述信息将自动显示,以帮助用户查看选择的结果。如果不想使用默认的快捷方式,请打开 Database Modeling Preferences(数据库建模首选参数)对话框(图 4),并取消选中指示组合了唯一性和强制性的选项 (UM)。
图 7:在 Fact Editor(事实编辑器) 中添加约束(单击图像以查看大图片)
请添加以下约束,练习使用 Fact Editor(事实编辑器)添加约束。在当前版本的工具中,在最终的约束中使用“some”(某些)取代“the same”(同一),表示“drives”(拥有)关系是可选的并且是多对多的关系。
Each Employee works for some DepartmentEach Employee works for at most one DepartmentEach Employee has some EmployeeNameEach Employee has at most one EmployeeNameEach Employee has at most one MobileNrIt is possible that the same Employee drives more than one Car and that the same Car is driven by more than one Employee
最好为所有事实类型包含示例。要向 Fact Editor(事实编辑器) 中显示的事实类型添加约束,请单击 Examples(示例)选项卡,然后输入足够的示例以阐明相关约束。例如,图 8 显示了 Employee works for Department(雇员就职于部门)事实类型的三个事实示例。此处,雇员 101 和 102 就职于销售部门 (SLS),而雇员 103 就职于市场部门 (MKTG)。这种填充与我们的解决方案一致,即每个雇员就职于至多一个部门(第一列中的值是唯一的),但是同一部门可以雇用一些雇员(SLS 在第二列中是重复的)。
图 8:为 Employee works for Department (雇员就职于部门)添加示例事实实例(单击图像以查看大图片)
可以使用 Analyze(分析) 按钮来请求工具,减少示例中的约束,或者检查数据和约束规范之间是否存在不一致。自己试一试。此功能对于验证约束十分有用。
要保存模型,请从 File (文件)菜单中选择 File | Save(文件 | 保存),或单击 Save (保存)图标。将会打开 SaveAs (另存为)对话框。选择要保存模型的文件夹,为模型添加文件名,在对话框中单击 Save(保存)按钮,然后在 properties 对话框中单击 OK(确定)。保存的文件将使用扩展名 .vsd(Visio 文档)。
要在图表中显示使用 Fact Editor(事实编辑器) 输入的句子类型,请在 Business Rules 编辑器中找到感兴趣的事实类型。要选择一系列连续的事实类型,请按住 Shift 键,并选择该系列的第一个和最后一个事实类型。所有事实类型(除第一个类型外)将突出显示。然后,将事实类型拖到绘图页面上所需的位置。
现在,请尝试对模型中的四个事实类型执行此操作。默认情况下,显示的图表如图 9 所示,您可以通过来回移动谓词文本和对象类型来优化显示。
另一种便捷的方法是,打开 Business Rules(业务规则)窗口中的 Object Types(对象类型)窗格,拖出一个或多个相关的对象类型,然后使用 Show Relationships(显示关系)关系选项。例如,如果将 Employee(雇员)对象类型拖到绘图页面上,用鼠标右键单击 Employee (雇员)并从快捷菜单中选择 Show Relationships(显示关系),则在该页上将显示 Employee(雇员)所具有的所有关系。这个 ShowRelationships(显示关系)功能在架构浏览和反向工程中非常有用,它是以前在 VisioModeler 或 Visio Enterprise 中未提供的许多新功能之一。
图 9:通过从 Business Rules(业务规则)编辑器中拖动四种事实类型而形成的图表
要将 ORM 模型映射到逻辑数据库模型,首先将 ORM 模型添加到数据库模型项目中,然后生成它。从 File(文件)菜单中,选择 File | New | Database | Database Model Diagram (US units)(文件 | 新建 | 数据库 | 数据库模型图表 (US 单位)),打开逻辑数据库建模解决方案。如果要使用公制模板,请选择不带 (US units) 的 Database Model Diagram(数据库模型图表)。此时的屏幕如图 10 所示,只是绘图窗口的大小已被我明显缩小了。可以使用 Entity Relationship 模具来从头创建逻辑数据库模型,但是现在,我们将从 ORM 模型中导出数据库模型。
图 10:逻辑数据库建模解决方案(单击图像以查看大图片)
要创建数据库模型项目,请从 Database(数据库)菜单中选择 Database | Project | Add existing document(数据库 | 项目 | 添加现有文档)。将显示 Add Document to Project(将文档添加到项目中)对话框。使用 Look in: 字段浏览到保存的 ORM 模型,然后单击 Open(打开) 按钮。在项目窗口中将列出 ORM 模型(此处的模型名为 JCM1.vsd)。单击主菜单上的 Save(保存) 图标,并给出文件名(我选择了 ProjJCM1)来保存项目文件。项目文件的扩展名也是 .vsd。当前模型的名称和页面始终列在屏幕顶部的标题栏中。图 11 显示了此时应显示的屏幕。
图 11:包含 ORM 源模型的数据库项目(单击图像以查看大图片)
现在,从 Database(数据库) 菜单中选择 Database | Project | Build(数据库 |项目 | 生成),来创建逻辑模型。关系架构自动生成,并且在屏幕左侧的 Tables and Views (“表和视图”)窗口中显示结果表方案(参阅图 12)。
图 12:通过映射 ORM 模型建立的两个表方案(单击图像以查看大图片)
要在图表上查看这些表方案,请将其拖到绘图页面中。结果如图 13 所示,有两个表方案,方案之间由一个外键连接。每个表的名称以阴影标题显示,标题的下方列出了各列。主键带下划线,用“PK”标记,并显示在该列的顶格中。强制(非空)列以粗体表示。外键列标记为 FKn,其中 n 是表外键的编号。本例中只有一个外键,指向 Employee 表的主键。外键连接其实就是从外键到目标键的箭头。
图 13:从 ORM 模型映射的关系架构
在本例中,表和列的名称将在默认情况下自动生成。在实际应用中,通常我们会重命名其中的许多名称,并且更改已选择的许多默认的数据类型。有多种配置选项,可用来控制表和列的名称的生成方式。在实际应用中,最好在 ORM 模型上设置数据类型,在该模型上,对象类型对应于概念上的域。然后,正确的数据类型将自动基于这些域传播所有属性。本文对此类问题不加详述。
在 Database(数据库)菜单中单击 Database | Generate(数据库 | 生成),可以生成所选目标 DBMS 的内部架构。生成架构时,用户可以选择生成 DDL 脚本,而不是使用工具建立表。通常最好先生成 DDL 脚本,以便以后在所选的 DBMS 中执行。请遵循生成向导中的步骤:选择驱动程序(例如 Microsoft® SQL Server 2000),输入数据库名称(例如 mydb),接受下一屏幕中的默认设置,选择 Yes(是) 以查看生成的 DDL 脚本,然后将 DDL 脚本保存为文本文件。
本文简单介绍了有关创建简单 ORM 模型,将其映射到逻辑数据库架构,然后再映射到物理数据库架构的基本信息。在后续的文章中,将阐述如何指定更加强大的 ORM 模型(包括高级约束和嵌套),并更详细地介绍逻辑数据库建模功能。使用随本产品发布的示例文件中包含的 Employee ORM 源模型,可以对更高级的功能有个初步了解。如果您对本文有任何建设性的反馈意见,请给我发送电子邮件(TerryHa@microsoft.com)。
摘要:本文是介绍 Microsoft Visual Studio Enterprise Architect 中基于 Visio 的数据库建模组件系列文章中的第二篇。第一部分讨论了如何创建新的对象角色建模 (ORM) 源模型,如何在 fact editor(事实编辑器)中添加句子类型、基本内部约束及示例,如何将事实类型从 business rules editor(业务规则编辑器)拖到绘图窗口中,以及如何保存模型。还说明了如何通过创建数据库模型项目、添加 ORM 源模型、然后构建逻辑模型,将 ORM 模型映射到逻辑数据库模型。最后介绍了如何通过选择目标 DBMS 和生成 DDL 脚本来从逻辑模型生成物理数据库模型。第二部分将讨论如何使用描述器,将对象类型标记为独立类型、对象化关联以及将其他一些 ORM 约束添加到 ORM 源模型中。
Microsoft® Visio® for Enterprise Architects (VEA) 包含在 Visual Studio® .NET 的 Enterprise Architect 版本中,当前为 Beta 2。发布 Beta 2 后,已经对产品做出了许多增强以及错误修正。VEA 的最终版本将成为 Microsoft Visio Professional 2002 的超集版本。同样,该产品将包含 Visio Professional 中的简单对象角色建模 (ORM) 图形解决方案,以及可以提供到/自物理数据库架构的正向/反向工程的深层 ORM 源模型解决方案。本产品的帮助文件引用简单绘图模具作为 ORM 制图器,引用深层建模解决方案作为 ORM 源模型。ORM 源模型可以用于制图和工程,而且是本系列文章中讨论的唯一 ORM 解决方案。Bate 版中通常不包括帮助文件,不过目前这些文件可以从 Web 上下载。
本系列文章简单介绍了如何在 Visual Studio Enterprise Architect 中使用基于 Visio 的数据库建模解决方案。本文重点介绍 ORM 解决方案中的描述器、对象独立、嵌套以及其他约束。假定本文的读者已经熟悉 ORM 和关系数据库建模。ORM 的概述可从网上下载 [参考书目 ]1 和参考书目 2],有关 ORM 和数据库建模的处理方式,在我最新出版的书 [参考书目 ]3] 中进行了详细的讨论。
上一篇文章讨论了如何创建简单的 ORM 模型,以及如何先将该模型映射到逻辑数据库架构,再将其映射到物理数据库架构 [参考数目 ]4]。我在那篇文章中指出,所有 Visio 模具和模板都具有 U.S. 单位和公制单位两种版本。在最终版本中,默认情况下只安装适用于用户所在地区的版本(U.S. 或公制)。如果要同时安装两个版本,应当选择自定义安装选项并指出还需要其他版本的解决方案。
ORM 源模型和数据库逻辑模型解决方案都能自动描述所选模型的任何部分,包括用户可能输入的任何示例。在与非技术领域专家交流模型的意义时,此功能非常有用。为了说明此功能,请打开随产品提供的 Employee ORM 源模型示例,方法是:选择 File | New | Browse Sample Drawings(文件 | 新建 | 浏览绘图示例),然后选择 Database(数据库)文件夹和 Employee ORM 源示例文件,并单击 Open(打开)按钮(参阅图 1)。
图 1:打开 ORM 源模型示例(单击图像以查看大图片)
此时应显示 Employee 源模型的 Employee 页。完整的模型包括三页:Employee、Project 和 Room。当前显示页的名称显示在绘图窗口下方的选项卡中。默认情况下,在绘图窗口下方仅显示 Database Properties(数据库属性)和 Business Rules(业务规则)窗口。要打开描述器窗口,请从主菜单中选择 Database | View | Verbalizer(数据库 | 视图 | 描述器)。此时,应在绘图窗口下方显示描述器。现在,使用鼠标选择所要描述的模型的一部分。在图 2 中,我选择了主要的外部唯一性约束。在描述器窗口中将显示其描述。
图 2:对主要的外部唯一性约束的描述(单击图像以查看大图片)
要选择单个模型元素,直接单击该元素即可。要选择所要描述的模型区域,请按住鼠标左键,并沿这一区域的对角线拖动光标。描述器将描述该区域中模型的各个方面(如果添加了事实示例,还包含这些示例)。描述器窗口保持打开状态,直到您将它关闭,但我通常开着此窗口。通过选择已显示窗口底部的相关选项卡,可以随时选择在制图器下方显示哪个窗口,例如 Database Properties (数据库属性)窗口、Business Rules(业务规则)窗口或 Verbalizer(描述器)窗口。
在图 2 中,二元关联 Employee took Course(雇员接受培训)已经对象化为 Coursework(培训工作)。由此讨论范围 (UoD),我们可以知道某个雇员接受了给定的培训课程,但她/他不知道在培训中获得的最终等级。因此,无论这些雇员是否扮演 UoD 中的其他角色,培训工作的实例都可以独立存在。因此,培训工作被标记为“independent”(独立),显示时名称后带有“!”。指定该对象类型为独立时,工具将自动输入此标记。
要将某对象类型指定为独立,请选择该对象类型,并在其数据库属性表中输入一个条目。如果当前正在显示数据库属性表,您只需单击对象类型以查看其属性。或者,双击该对象类型显示其属性表。
上一篇文章中讨论了如何使用 Fact Editor(事实编辑器)指定单个句子类型的基本方面。使用数据库属性表可以执行使用 Fact Editor 能够执行的全部操作,还可以执行更多的高级任务。其附加功能之一是带有指定某对象类型是否独立的复选框(参阅图 3)。此处显示此表的 Definition 窗格。只需在 Categories 列表上选择属性表的其他窗格,即可显示该窗格。
图 3:在数据库属性表中指定培训工作的独立性(单击图像以查看大图片)
考虑 Employee took Course(雇员接受培训)关联。为了能够记录某雇员接受给定培训的最终等级(如果有),该关联被对象化为培训工作,并添加事实类型 Coursework resulted in Grade(培训工作结果等级)。由于培训工作对象类型中嵌套了一个关联,所以此对象类型被称为嵌套类型。嵌套是使用 Fact Editor 的 Advanced 窗格指定的。如果您刚刚在 Fact Editor 中输入了新的事实类型(例如,Employee plays Sport [雇员参与运动]),而且编辑器保持打开状态,则可以在关闭编辑器前添加嵌套。相反,如果您将对象类型放在要进行对象化的图表中,则先选择事实类型,再打开 Fact Editor,可使用 Database | View | Fact Editor(数据库 | 视图 | 事实编辑器)。然后选择 Advanced(高级)选项卡,并在“Objectify / Nest fact as:”字段中输入已对象化的关联名称。例如,将 Employee plays Sport(雇员参与运动)对象化为 Play。图 4 显示了模型示例中的培训工作关联的嵌套声明。
图 4:使用 Fact Editor(事实编辑器)的 Advanced(高级)窗格指定 Nesting(嵌套)(单击图像以查看大图片)
如果该关联已在绘图窗口中,则单击 Fact Editor(事实编辑器)中的 OK(确定)按钮将会在该关联的周围显示嵌套外框。也可以将嵌套的对象类型从业务规则编辑器中拖出来,以便显示嵌套的对象类型。对象化关联的名称显示在嵌套外框的外面(参阅图 3)。可以选择嵌套的对象类型,然后拖动其控制手柄(显示为黄色小菱形),来调整此名称的位置。拖动其形状手柄(绿色小矩形)还可以竖直调整外框大小。
当前,ORM 需要每个对象化的关联各具有生成的唯一性约束,或是 1:1 的关联。在执行 model error check(模型错误检查)时强制执行此规则。从主菜单中选择 Database | Model Error Check(数据库 | 模型错误检查),可以随时执行基本的模型错误检查。
在创建嵌套对象类型时,工具自动创建此嵌套的对象类型和其定义谓词中涉及的对象类型之间的派生谓词。这提供了从任意对象类型(嵌套的或未嵌套的)浏览到架构的其余部分的统一方法,主要是为了便于概念查询而设计的。默认情况下,派生的谓词称为“involves”(包括)或“is involved in”(包含于)。要重命名这些谓词,可以双击图表窗口中嵌套的对象类型,显示其数据库属性表,然后选择 Nested Roles(嵌套角色)类别并重命名嵌套的角色名称。
第一部分讨论了如何使用 Fact Editor 将内部唯一性及简单强制角色约束添加到单一事实类型中。要声明其他基于角色的约束,最好从绘图窗口选择相关谓词,然后使用快捷菜单中的 Add Constraint(添加约束)对话框,或者从主菜单中选择 Database | Add Constraints(数据库 | 添加约束)。
使用 Employee 示例练习添加约束。先从模型中删除约束(选择约束,然后单击 Delete 键),然后再使用 Add Constraint(添加约束)对话框将它添加回去。
假设图 3 中的外部主要唯一性约束已被删除,可以按以下步骤再将它添加回去:按下 Shift 键,选择 Room is in Building(房间位于大楼)和 Room has RoomNr(房间具有房间号)事实类型,然后单击鼠标右键并选择 Add Constraint(添加约束)选项。Add Constraint(添加约束)对话框打开,并且约束类型被设置为唯一性。选中 Primary 框,表示此约束提供 Room(房间)的主要参考架构,然后选择 Building(大楼)和 RoomNr(房间号)角色(依次单击它们即可,无需按下 Shift 键)。约束描述显示在框的底部(参阅图 5)。如果外部唯一性约束未用于主要参考,请不要选中 Primary(主要)框。
图 5:在 Add Constraint(添加约束)对话框中添加主要的外部唯一性约束(单击图像以查看大图片)
如果单击 OK(确定)按钮,则对话框关闭并在绘图窗口中显示约束。如果将其他约束应用到一个或多个谓词,可以单击 Apply(应用)按钮应用约束,以保持对话框打开,并添加这些谓词的更多约束。
图 3 中的虚线圆是分离性强制角色(或)约束,表示每个雇员都必须有一个手机号或房间(或两者都有)。例如,一个签约人可能拥有手机号但没有房间,而固定雇员可能拥有房间(可能还拥有手机号)。假设此约束已被删除,可以按照以下步骤将它添加回去:选择 Employee has MobileNr(雇员拥有手机号)和 Employee has Room(雇员拥有房间)事实类型;单击鼠标右键选择 Add Constraint 选项;当显示 Add Constraint(添加约束)对话框时,将约束类型改为 Mandatory(强制);单击两个雇员角色(参阅图 6);单击 OK(确定)或 Apply(应用)按钮。
图 6:在 Add Constraint(“添加约束”)对话框中添加分离性强制角色(或)约束(单击图像以查看大图片)
Add Constraint(添加约束)对话框也可以用于指定子集、排斥、等同、频率、环式和索引约束(请参阅第三部分)。
单击(或双击)绘图窗口中的对象类型以显示其属性列表,选择 Value(值)类别,然后输入相关的值和/或值的范围,从而声明对象类型的值约束。在图 3 中,Grade(等级)对象类型被约束为以下可能的字母集合:{'A', 'B', 'C', 'F'}。假设删除了此约束,可以通过在 Value 字段中输入值 A(不包含引号),单击 Add(添加)按钮,然后对 B、C、F 重复此步骤,将它添加回去(参阅图 7)。可以单击 Remove(删除)按钮来删除值。要调整图表上的值约束,请选择对象类型(不要选择约束),然后移动显示的控制手柄(黄色小菱形)。
图 7:在数据库属性表中添加简单的值约束(单击图像以查看大图片)
默认情况下,一个值约束中最多显示五个条目。要更改此设置,请用鼠标右键单击该对象类型,选择 Shape | Custom Properties(形状 | 自定义属性),然后更改自定义属性表中 Value 列表的大小(参阅图 8)。此对话框也可以引入您自己新创建的自定义属性。
图 8:通过自定义属性控制在值约束中显示的条目的最大数目
如果将此数目设置为小于约束中的条目数目,则该显示列表后会附加一个省略号“...”,表示此列表中还包含其他值,只是没有显示出来。当列表非常大时,此项功能非常有用。无论图表中显示了多少值,您在约束中输入的所有值都包含在用于生成 DDL 的约束中。
现在,已经讲述了足够的信息,用来重新创建 Employee ORM 源模型的 Employee 页。作为一项挑战,您可能希望了解是否能够重新生成 Employee 模型的其他部分(如 Project 和 Room 页所示)。第三部分将对上述操作进行详细讨论。如果您对本文有任何建设性的反馈意见,请给我发送电子邮件(TerryHa@microsoft.com)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。