本书第1版自2014年出版以来,先后多次印刷,深受广大读者的欢迎,被多所高等学校选为教材,并获得2015年度河南省教育科学研究优秀成果二等奖(豫教〔2015〕04744号)、2015年度河南省信息技术教育优秀成果二等奖(豫教〔2015〕10366号)。在使用过程中,也有不少教师和读者提出了一些很好的意见与建议,为适应技术发展,结合教学实践、读者意见和建议,我们对本教材进行了修订,推出第2版。本次修订保持了第1版的写作风格和特色,侧重MIS系统开发,采用实用案例,坚持实际应用需求引入技术要点分析关键代码剖析技术经验总结的学习路线,突出应用性和实践性。本版修订的主要内容有:(1)升级开发环境与工具。开发环境由第1版的Visual Studio .NET 2010升级为Visual Studio .NET 2012,数据库采用SQL Server 2012,所有案例都是在Visual Studio .NET 2012下完成。第2章中的数据库访问技术LINQ更新为目前更为流行的EntityFramework,第7章中的数据库操作也相应地改为采用EntityFramework,保持技术先进性。(2)优化调整了部分章节内容。删减了非主流工具介绍,第4章中删减了Crystal Report报表,第5章中删减了Visual SourceSafe,第9章缩减了部分用例规约及顺序图,为压缩篇幅,缩减了部分非关键案例代码(出版社网站可下载全部代码)。全书共9章,可分为以下三部分:(1)第一部分:第1章,介绍MIS基础知识。(2)第二部分:第2~5章,主要介绍C#语言的高级特性和常用开发设计工具。其中,第2章介绍利用C#进行数据库操作的高级特性;第3章介绍常用系统架构;第4章介绍如何创建报表;第5章介绍建模工具PowerDesigner在数据库设计中的应用。(3)第三部分:第6~9章,为典型的MIS实际案例开发详解。其中,第6章为图书管理系统开发案例;第7章为超市商品进销存管理系统开发案例;第8章为在线考试系统开发案例;第9章为高校实践课题管理系统开发案例。这些实际案例,在解决方案、架构和实现技术上,由浅入深、循序渐进。本书以典型实例为引导,解决实际问题、剖析解决过程、拓展解题思路,读者可结合每章的技术经验总结,快速提高C#应用开发实践能力。限于篇幅,案例讲解在书中只给出了主要功能的源代码,完整系统的代码和数据库等相关资料可在清华大学出版社网站下载。本书可作为高等院校计算机软件相关专业C#应用程序开发类课程的教材,也可供软件开发人员参考。相信此次修订后的教材,更适合教师的教学和读者的学习。本次修订由郭基凤、高亮担任主编,韩玉民、赵冬担任副主编,第1章由韩玉民编著,第2章2.1节、2.2节及第9章由赵冬编著,第2章2.3节、2.4节及第7章由余雨萍编著,第3章由郭基凤编著,第4章和第6章由朱彦松编著,第5章由缑西梅编著,第8章由高亮编著,全书由郭基凤、高亮负责统稿。本书修订过程中,得到了中原工学院车战斌教授的指导和帮助,本书的出版得到了中原工学院教材建设基金资助,另外也吸取了许多相关专著和文献的优点,在此一并表示感谢。虽然我们力求完美,但限于水平,不当之处在所难免,敬请广大读者不吝赐教。
第5章建模工具PowerDesigner本章将介绍在实际项目开发过程中常用的一款工具软件Sybase公司的计算机辅助软件工程工具集PowerDesigner,本章中只介绍利用该工具软件设计数据库的方法和操作步骤。5.1 PowerDesigner简介PowerDesigner是Sybase公司的CASE(Computer Aided(or Assisted)Software Engineering)工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型(Conceptual Data Model,CDM)、物理数据模型(Physical Data Model,PDM),还可以为数据仓库制作结构模型,也能对团队设计模型进行控制。它可以集成到目前流行的许多集成开发环境中,例如Microsoft Visual Studio、Eclipse等,用来缩短开发时间和使系统设计更优化。PowerDesigner是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具。使用它可以分别从概念数据模型和物理数据模型两个层次对数据库进行设计。概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义;物理数据模型是在概念数据模型的基础上针对目标数据库管理系统的具体化。PowerDesigner还可优化PDM,产生为特定DBMS创建数据库的SQL语句,并可以文件形式存储,以便在其他时刻运行这些SQL语句创建数据库。另外,PowerDesigner 还可根据已存在的数据库反向生成PDM、CDM及创建数据库的SQL脚本。要做好系统的分析设计工作,需要深厚的项目实践功底。本章的目的是帮助分析设计人员更快熟练掌握PowerDesigner的使用方法,而不是过多讲解分析设计方面的理论。本章的操作都是在PowerDesigner 16.5下完成的,版本信息如图5-1所示。首先,对当前的工作空间(Workspace)进行简单介绍。一般将欲构建的目标系统的各种模型、文档及报告放在同一个Workspace中,以便于模型设计与管理。启动PowerDesigner后将默认打开一个工作空间(Workspace),如图5-2所示。窗体左侧的Browser区域提供当前的Workspace层次结构:根节点为Workspace,Workspace中可以包含模型(Model)、目录(Folder),图表(Diagram)及其他子项,其中模型包括各种系统支持的模型类型。
图5-1 Sybase PowerDesigner版本
图5-2 当前工作空间Workspace定义了使用PowerDesigner建模时的信息集合。PowerDesigner工作时只能有一个Workspace处于打开状态,要新建Workspace必须先将当前Workspace关闭,操作方式为:右击当前Workspace,在弹出的快捷菜单中选择Close,这样即完成了原Workspace的关闭,同时也自动创建了新的Workspace,只是新Workspace中还没有内容。接下来就可以在其中添加自己想要新建的模型了。本章首先介绍使用PowerDesigner,从概念数据模型出发设计数据库,以及从物理数据模型出发设计数据库的方法,然后介绍为现有的物理数据模型生成数据库脚本,最后对一个设计优秀的数据库进行反向工程,以获取其物理数据模型。
5.2 从概念数据模型出发设计数据库5.2.1 问题描述以下简要描述使用PowerDesigner设计概念数据模型(CDM)的过程。设计概念数据模型时,要用到三个实体,分别为课题类别、教师和课题实体。要设计的这三个实体如表5-1所示。表5-1 CDM包含实体实体名称(Name)实体编码(Code)实体说明(Comment)课题类别Topic_Type课题类别实体教师Teacher教师实体课题Topic课题实体上述3个实体的属性说明分别如表5-2、表5-3及表5-4所示。表5-2 课题类别实体属性说明属性名(Name)编码(Code)数 据 类 型长度标识符课题类别编号topic_Type_IDInteger
是课题类别名称topic_Type_NameVariablecharacters20否专业类别profession_TypeCharacters2否学期termCharacters1否表5-3 教师实体属性说明属性名(Name)编码(Code)数 据 类 型长度标识符教师用户名teacher_User_NameVariablecharacters5是教师姓名teacher_NameVariablecharacters5否教师学历teacher_DegreeVariablecharacters10否教师职称teacher_PositionVariablecharacters10否教师联系电话teacher_PhoneCharacters11否表5-4 课题实体属性说明属性名(Name)编码(Code)数 据 类 型长度标识符课题编号topic_IDInteger
是课题名称topic_NameVariablecharacters50否课题描述topic_DescriptionVariablecharacters2000否年级gradeCharacters4否其中课题类别实体和课题实体之间存在包含联系,其联系类型为1︰n;教师实体和课题实体之间也存在包含联系,其联系类型也为1︰n。
5.2.2 创建概念数据模型1.新建概念数据模型(1)单击File(文件)New Model(新建模型)菜单项,弹出如图5-3所示的New Model(新建模型)对话框,选择Conceptual Data Model(概念数据模型),输入模型名称PDSample,单击OK按钮建立模型。 图5-3 New Model(新建模型)对话框(2)从主界面左侧的资源浏览窗口找到新创建的CDM,右击该模型,在弹出的快捷菜单中选择Properties(属性)菜单项,弹出如图5-4所示的对话框。在General(常规)选项卡里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等信息。在Notes(说明)选项卡里可以输入相关描述及说明信息。当然还有更多的选项卡,可以单击窗体左下角的More按钮,这里就不再详细介绍。2. 创建新实体(1)在 CDM 的图形对话框中,单击Toolbox(工具箱)上的Entity(实体)工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号。单击Pointer(指针)工具或右击鼠标,释放实体工具,如图5-5所示。(2)双击刚创建的实体图符,打开Entity Properties(实体属性)对话框,如图5-6所示。在此对话框的General(常规)选项卡中可以输入实体的名称、代码、描述等信息。
图5-4 概念模型属性窗口
图5-5 工具箱及实体工具
图5-6Entity Properties(实体属性)对话框(3)选中实体后单击Symbol(符号)Format(格式)菜单项,将弹出Symbol Format(符号格式)对话框,如图5-7所示。在该对话框中可对PowerDesigner中的图形字体、填充颜色、阴影等属性进行设置,为用户提供更友好的图形化界面。如应用系统的实体数目较多时,用户可按模块为实体选择不同的背景色填充,这样就可以在数十个甚至是数百个实体中迅速定位到用户想编辑的实体。
图5-7 Symbol Format(符号格式)对话框3. 添加实体属性(1)在实体属性对话框的Attributes(属性)选项卡上可以为实体添加属性,如图5-8所示。图5-8 实体属性对话框(2)输入属性的Name和Code之后,单击某属性的Data Type(数据类型)列,可以直接选择或输入数据类型及长度,也可以单击列后面出现的 按钮,弹出如图5-9所示的Standard Data Types(标准数据类型)对话框。标准数据类型可以分成4类:数字型、字符型、日期时间型和其他数据类型。
图5-9 Standard Data Types对话框CDM中为属性定义的数据类型是概念数据类型,当CDM生成PDM时,将根据所选DBMS的不同,把这些数据类型转换成相应DBMS的数据类型,它们所能容纳的字符、数字、日期时间、文本、图形的精度和范围将随着DBMS的不同而不同,实际上,在PowerDesigner内部已经定义了从CDM各数据类型到各类DBMS数据类型之间的转换关系。图5-8中P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的,即该列是否可为空值。 如果一个实体属性为强制的,那么,这个属性在每条记录中都必须被赋值,不能为空。课题类别实体的标识符是课题类别编号,因此在该属性后的P列进行勾选,此时M列被自动勾选上,因为主标识符不能为空,而D列都是默认被勾选的。重复上述步骤,按照表5-3和表5-4创建教师和课题实体。5.2.3 定义属性的标准检查约束标准检查约束即Check约束,是一组确保属性有效的表达式。双击课题实体的图符,在弹出的实体属性的特性对话框中切换至Attributes选项卡,双击年级属性前面的选择列,或在年级属性行中右击,选择Properties(特性)菜单项,将弹出Attributes Properties(属性的特性)对话框,切换至Standard Checks(标准检查)选项卡,如图5-10所示。在这个选项卡中可以定义属性的标准检查约束,如将课题实体的年级属性最小值设置为2010,最大值设置为2022。对话框中每项的参数的含义请参阅相关资料。也可以使用Rules(规则)选项卡来完成同样的检查约束,此处不再详细介绍。
图5-10 Standard Checks选项卡5.2.4 定义实体的主、次标识符选择某个实体双击,弹出实体的属性对话框。在 Identifiers 选项卡上可以进行实体标识符的定义,如图5-11所示。图5-11 实体标识符5.2.5 联系的定义及使用1. 联系按照实体类型中实例之间的数量对应关系,通常可将联系分为 4 类:即一对一(one to one)联系、一对多(one to many)联系、多对一(many to one)联系和多对多(many to many)联系。2. 建立联系在图形窗口中创建两个实体后,单击工具箱上的Relationship工具,再单击一个实体(此处选择课题实体),并按下鼠标左键不放,把光标拖至别一个实体上(此处选择课题类别实体)并释放鼠标左键,这样就在两个实体间创建了联系,如图5-12所示。右击图形窗口,释放 Relationship工具。
图5-12 实体间的联系3. 其他几类特殊联系除了4种基本的联系之外,实体与实体之间还存在标定联系(Identify Relationship)、非标定联系(Non-Identify Relationship)和递归联系(Recursive Relationship),此处不再详细介绍。4. 定义联系的特性在两个实体间建立了联系后,双击联系线,打开联系特性对话框,如图5-13所示。
图5-13 联系特性对话框的General选项卡选择Cardinalities(基数)选项卡,如图5-14所示。
图5-14 联系特性对话框的Cardinalities选项卡在联系的两个方向上各自包含有一个分组框,其中的各项参数只对这个方向起作用,Role Name 为角色名,描述该方向联系的作用,一般用一个动词或动宾组合。如:课题 to 课题类别 组框中应该填写属于,而在课题类别 to 课题组框中填写包含。5.2.6 CDM转换为PDMPowerDesigner在将CDM转换为PDM时,对象的转换对应关系如表5-5所示。表5-5 概念对象与物理对象的对应关系CDM对象在PDM中生成的对象实体(Entity)表(Table)实体属性(Entity Attribute)列(Table Column)主标识符(Primary Identifier)根据是否为依赖关系确定是主键或外键标识符(Identifier)候选键(Alternate key)关系(Relationship)引用(Reference)同一个表中的两列不能有相同的名称,如果因为外键迁移而导致列名冲突,PowerDesigner会自动对迁移列重命名,新列名由原始实体名的前三个字母加属性的代码名组成。主标识符生成PDM中的主键和外键,非主标识符则对应生成候选键。生成PDM过程中有关生成主键、外键等问题比较复杂,读者可以对一些设计得比较优秀的开源系统进行反向工程,然后慢慢研究借鉴,才能逐步提高自己的数据库分析设计能力。对已有数据库进行反向工程将在5.4节介绍。