当前位置:编程学习 > C#/ASP.NET >>

Visual Studio .NET Enterprise Architect 中基于 Visio 的数据库建模:第三部分

答案: 
Terry Halpin
Microsoft Corporation
2001年11月

摘要:本文是介绍 Microsoft Visual Studio .NET Enterprise Architect 中基于 Visio 的数据库建模组件系列文章中的第三篇,第一部分讨论了如何创建基本对象角色建模 (ORM) 源模型,如何将其映射到逻辑数据库模型,以及如何生成物理数据库架构的 DDL 脚本。第二部分讨论了如何使用描述器,将对象类型标记为独立类型、对象化关联以及将其他一些 ORM 约束添加到 ORM 源模型中。第三部分将阐述如何添加集合比较约束(子集约束、等同约束和排斥约束),以及如何通过组合排斥约束和分离性强制约束来获得异或约束。

目录

简介


本文是介绍 Microsoft Visio for Enterprise Architects (VEA) 中数据库建模解决方案系列文章中的第三篇,VEA 包含在 Visual Studio .NET 的 Enterprise Architect 版本中。本文讨论如何将集合比较约束添加到对象角色建模 (ORM) 源模型中,以及如何通过组合排斥约束和分离性强制约束来形成异或约束。假定本文的读者已经熟悉 ORM 和关系数据库建模。ORM 的概述可从网上下载 [参考书目] 1 和参考书目 2],有关 ORM 和数据库建模的处理方式的信息,在我最新出版的书 [参考书目 ]3] 中进行了详细的讨论。有关本系列文章的前两篇,请参阅参考书目 4 和参考书目 5

集合比较约束


如果两个角色由同一对象类型担当,或角色的两个对象类型共享公用的父类型,则可以说它们“相互兼容”,并且比较它们包含的内容是很有意义的。对于角色序列(已排序的角色列表)来说,也同样适用上述规则。对于数据库来说,仅有三个相关的集合比较运算符:子集运算符 ()、等同运算符 (=) 和互斥运算符 ()。
从源角色序列至目标角色序列的子集约束规定:源角色序列中的成员(一组实例)必须始终作为目标角色序列成员的子集。该约束的图形显示为带圈的 "",由虚线箭头连接,从源角色序列指向目标角色序列(示例请参阅图 1)。在以前的 ORM 工具版本中,虚线箭头本身就指定子集约束。在 VEA 中,带圈的子集符号始终显式显示。这便阐明了约束表示法的含义,并支持源角色和目标角色属于同一关联时的极少数情况,还允许在其他直接约束(例如,≤,可能要在以后对其添加图形约束表示法)中使用虚线箭头。

图 1:单一角色间的子集约束
最简单的角色序列就是单一角色。在图 1 中,两个单一角色之间的子集约束意味着拥有第二个名字的一组患者必须是拥有第一个名字的一组患者的子集。换句话说,如果某个患者拥有第二个名字,那么他或她也必须拥有第一个名字。
要在 VEA 中添加该子集约束,首先输入两种事实类型(例如,将它们添加到业务规则编辑器中,然后再拖到绘图窗口中)。在选择相关谓词的同时按住 Shift 键,单击鼠标右键并从快捷菜单中选择 Add Constraints(添加约束)。当显示 Add Constraints(添加约束)对话框时,请在 Constraint type(约束类型)字段中选择 Subset(子集),然后选择该约束的源角色和目标角色。在该对话框中选择多个角色框时,它们会按照选择的顺序编号为 1、2、3 等。如果用户正确执行了该操作,则将显示如图 2 所示的对话框。在该对话框的下部区域自动描述该约束。如果这是您希望立刻应用于那些事实类型的唯一约束,请单击 OK(确定)。如果现在要向这些事实类型的一个或多个类型添加其他约束,请单击 Apply(应用),然后添加其他约束。

图 2:选择子集约束类型,再选择源角色 [1],然后选择目标角色 [2](单击图像以查看大图片)
请注意,谓词“has first-”(拥有第一个)和“has second-”(拥有第二个)中连字符的用法。在描述那些谓词的约束时,连字符将形容词“first”(第一个)和“second”(第二个)绑定到 GivenName(名字),以便用户在形容词之前而不是之后插入关键字(例如,“some”[一些])。例如,如果当前示例中省略了连字符,则描述信息显示为“If Patient p has second some GivenName then Patient p has first some GivenName”(如果病人 p 拥有第二个一些名字则病人 p 拥有第一个一些名字),这种描述令人难以理解。
图 3 说明了角色对之间的子集约束(每一角色序列包含两个角色)。这里,如果一对角色是连续的,则约束将连接到这两个角色的交叉点。该约束意味着,实例化 Chairperson(主席)关联的 Employee-Committee(雇员-委员会)对的集合必须是成员身份关联集合的子集。也就是说,每个担任委员会主席的人必须是所属委员会的成员。

图 3:角色对之间的子集约束
要添加此子集约束,请先在图表窗口中添加两个事实类型,在选择谓词时按住 Shift 键,单击鼠标右键,并从快捷菜单中选择 Add Constraints(添加约束)。当显示 Add Constraints (添加约束)对话框时,在 Constraint type (约束类型)字段中选择 Subset(子集)。请注意对话框下部区域中的提示:如果约束的两端都有多个角色,请添加指示的“Number of roles at each end”(每一端的角色数)以表明这种情况。默认情况下,约束两端的角色数目均设置为 1。由于该约束每端有两个角色,所以将此设置更改为 2(如图 4 所示)。
现在请选择源角色对,然后选择目标角色对,为每一对中的角色排序使其与另一对中的相应角色匹配。在该对话框中选择多个角色框时,它们会按照选择的顺序编号为 1.1、1.2、2.1、2.2。编号的第一部分表示角色序列,第二部分表示在角色序列中的位置。如果上述操作执行正确,将显示如图 4 所示的对话框。在该对话框的下部区域自动描述该约束。单击 OK(确定)接受该约束并将其添加到图表中。

图 4:在角色对之间添加子集约束(单击图像以查看大图片)
角色序列之间的“等同约束”表明它们的集合必须始终相等。等同约束显示为一个带圈的“=”,由一条虚线连接至角色序列。早期的 ORM 工具使用的是两端各带一个箭头的虚线,以此来反映等同约束和一对子集约束的两个方向之间的等同关系,现在不再支持这种旧的表示法。

图 5:两个单一角色之间的等同约束
要添加此等同约束,请先在图表窗口中添加两个事实类型,在选择这两个谓词时按住 Shift 键,单击鼠标右键,并从快捷菜单中选择 Add Constraint(添加约束)。当显示 Add Constraint(添加约束)对话框时,在 Constraint type (约束类型)字段中选择 Equality(等同),然后选择角色序列(在此示例中,每个序列仅包含一个角色)。如果上述操作执行正确,将显示如图 6 所示的对话框。实际上,等同约束中角色序列的顺序并不重要,因为等同是对称的(与子集不同)。在此对话框的下部区域中对该约束进行了描述。使用类似的方法,可以添加较长的角色序列之间的等同约束。

图 6:在角色之间添加简单的等同约束(单击图像以查看大图片)
角色序列之间的“排斥约束”表明它们的集合必须始终不相交(相斥)。排斥约束显示为一个带圈的“X”,由一条虚线连接至角色序列。图 7 包含对排斥约束(没有人可以编写并审阅同一本书)和简单排斥约束(没有书可以同时被推荐阅读和禁止阅读)。

图 7:对排斥约束和简单排斥约束
要快速添加这些排斥约束,请先在绘图窗口中添加四个事实类型,在选择这四个谓词时按住 Shift 键,单击

上一个:多维数祖数据绑定!
下一个:ado.net数据操作全接触一(insert,update,delete)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,