资源描述
UML进行数据库设计的步骤步骤1:基于UML中的类图生成数据库1 12 2对象标识映射为主键对象标识映射为主键 属性类型映射为域属性类型映射为域 类模式是UML建模技术的核心,数据库的逻辑视图由UML类图衍生。类图是面向对象系统的建模中最常见的图之一。类图显示了一组类、接口、协作以及它们之间的关系,主要用于对系统静态设计视图建模。其中,类是面向对象系统组织结构的核心,表示被建模的应用领域中的离散概念,是具有相同结构、行为和关系的一组对象的描述符号。步骤步骤1.11.1:对象标识映射为主键:对象标识映射为主键l设计数据库模型,合理选择主键是一个关键的问题。一般定义主键可以有两种方法:l(1)为每个类增加一个对象标识符(OID)属性,将其映射为数据库中相应类表的主键。EmployeeOIDEmployeeOIDNameNameSalarySalaryPhonePhone其中其中(primary key)表示主键。对象标志表示主键。对象标志符作为单独属性,所占空间较小而且大小相同,符作为单独属性,所占空间较小而且大小相同,简化了主键选择方案,使得数据库更新时不会简化了主键选择方案,使得数据库更新时不会产生完整性问题,同时方便了数据库操作。产生完整性问题,同时方便了数据库操作。l(2)根据客观事实,将某个属性或属性的组合作为主键。该主键具有实际意义,容易进行维护;缺点在于涉及到外键,一旦其他类发生变化,更改比较困难。步骤1.2:属性类型映射为域l属性类型对应于数据库中的域,域的使用可使数据库设计更具一致性,优化了数据库应用的移植性。一般来说,实现简单域比较方便,只须定义相应的数据类型和空间大小 l类的属性描述了其所有对象共有的特性。属性的类型可以是基本数据类型,如整数、实数、布尔型等,也可以是用户自定义类型。总结:类映射为表l 通常,一个类映射为一张类表,类的属性映射为表的各列,类的对象则映射为表中的各个记录。值得注意的是存在以下两种特殊情况:(1)类的属性中某些属性只是暂时性使用,不需要在数据库中永久保存,则该类属性无须映射。(2)类的属性如果是多值,则该属性映射为多个列。另外,由于附加对象标志符OID或附加关联关系等原因,需要在表中增加一些新的列。步骤2:类关系的映射1 12 2 关联关系映射关联关系映射 泛化关系映射泛化关系映射3 34 4聚集关系映射聚集关系映射组合关系映组合关系映射射l类图由一系列类、接口和它们之间的关系(依赖、泛化、关联和实现等)所组成。l在将UML模型向关系数据库转换时,不仅需要转换模型中的类,还需要转换类与类之间的关系,例如,关联关系、泛化关系等。聚合关系和组合关系是特殊的关联。l在设计数据库之前,对UML类图进行简化,去除一些冗余的关系。步骤2.1:关联关系映射lUML中的关联关系描述了系统中对象或实例之间的离散连接,是一种结构关系,规定了一种事物的对象可以与另一事物的对象相关联。当类参与关联时,类在关联关系中扮演一个特定的角色l(1)一对一关联:AB11表示表示A的一个对象与的一个对象与B的一个对象关联。在这种情的一个对象关联。在这种情况下,可在两个类中任意选择一方,在其所对应况下,可在两个类中任意选择一方,在其所对应的类表中添加一个外键的类表中添加一个外键(foreign key),指向,指向另一方所对应类表中的主键,从而实现两张类表另一方所对应类表中的主键,从而实现两张类表之间的连接,将关联关系成功映射到数据库中。之间的连接,将关联关系成功映射到数据库中。需要注意的是,不要在两个表中均放置对方的主需要注意的是,不要在两个表中均放置对方的主键,这样会造成冗余。键,这样会造成冗余。l(2)零或一对一关联:AB0.1*这表明B的一个对象可与0个或1个A对象发生关联,一般在A类(即对象个数为零或一的那一方)所对应的表中添加一个外键,指向另一方B类所对应的类表中的主键,建立两表之间的连接。projectOIDprojectOID(main Keymain Key)Project_NameProject_NameStartdateStartdatecontactpersonOIDcontactpersonOID(foreign Key)(foreign Key)contactpersonOIDcontactpersonOID(main Keymain Key)PhonePhoneFaxFaxemailemail(3)一对多关联:一对多关联:表示表示A的一个对象与的一个对象与B的多个对象关联,这种关联关系可的多个对象关联,这种关联关系可以通过在以通过在B类类(即具有多个对象的类即具有多个对象的类)所对应的类表中增加所对应的类表中增加一个外键,指向另一方一个外键,指向另一方A类的主键,从而建立两个表之类的主键,从而建立两个表之间的关联。间的关联。AB1*3、UML中类关系的映射策略projectOIDprojectOID(main Keymain Key)Project_NameProject_NameStartdateStartdateTaskOIDTaskOID(main Keymain Key)Task_nameTask_nameStartdateStartdateenddateenddateprojectOIDprojectOID(foeign Key)(foeign Key)(4)多对多关联:多对多关联:AB*实现多对多关联,通常需要建立一个关联表,映射关联对实现多对多关联,通常需要建立一个关联表,映射关联对象,从而将多对多关联转化为两个一对多关联。实现时,象,从而将多对多关联转化为两个一对多关联。实现时,在新建的关联表中设置一个对象标志符在新建的关联表中设置一个对象标志符OID,同时增加两,同时增加两个外键,分别指向初始关联的两个类对应表的主键。个外键,分别指向初始关联的两个类对应表的主键。studentOIDstudentOID(main Keymain Key)student_Namestudent_NameenroldateenroldatecourseOIDcourseOID(main Keymain Key)Course_nameCourse_nameTextbookTextbookStu&CouOIDStu&CouOID(main Keymain Key)studentOIDstudentOID(foreign Key)(foreign Key)courseOIDcourseOID(foreign Key)(foreign Key)步骤2.2:泛化关系映射l泛化关系是一种存在于一般元素和特殊元素之间的分类关系,它只使用在类型上,而不是实例上。在类中,一般元素被称为超类或父类,而特殊元素被称为子类。l从实现的角度来看,UML的泛化体现了分类与继承原则,与面向对象程序设计语言中的继承性概念相关。一个子类继承超类的全部属性和方法,一个子类本身又可以有自己的子类,从而构成复杂的一般特殊结构。在关系数据库模型中没有直接的方法实现泛化,可以通过3种方法实现其映射。l(1)类层次映射为单个表 通过这种方法,将泛化关系中所有类都映射在单个表中,所有类的属性都保存在该表中;同时在表中增加一个对象标志符OID,以及一个对象类型,用以标识角色类型l(2)每个子类映射为单张表 将超类属性分别复制到各个子类中,这样每个子类既包含自身属性,又包含超类属性,同时在各个子类中增设各自的对象标志符OID,从而实现映射。在这个过程中,超类不需要参与映射。l(3)每个类映射为单张表 为每个类都建一张表,但每张表中的对象标志符OID都设为超类的类表中的OID。在子类的类表中,OID既是主键又是外键,各自属性不变。步骤2.3:聚集关系映射聚集是一种特别类型的关联,用于描述聚集是一种特别类型的关联,用于描述“总体到局部总体到局部”的关的关系。在基本的聚集关系中,系。在基本的聚集关系中,部分类的生命周期独立于整体部分类的生命周期独立于整体类的生命周期。属于类的生命周期。属于“has a”关系较弱的情况。关系较弱的情况。将这种关系映射到关系数据库中,可分为两种情况:一种将这种关系映射到关系数据库中,可分为两种情况:一种是聚集关系较为紧密的情况下,可将其映射在一张表中;是聚集关系较为紧密的情况下,可将其映射在一张表中;另一种是聚集关系较为松散的情况下,可以用一对多关联另一种是聚集关系较为松散的情况下,可以用一对多关联的映射方法实现,须在子类的类表中增设一个外键指向超的映射方法实现,须在子类的类表中增设一个外键指向超类的类表的主键。类的类表的主键。组成指聚合关系的另一种形式,但是子类实例的生命周组成指聚合关系的另一种形式,但是子类实例的生命周组成指聚合关系的另一种形式,但是子类实例的生命周组成指聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期期依赖于父类实例的生命周期期依赖于父类实例的生命周期期依赖于父类实例的生命周期 。属于。属于。属于。属于“contains a”contains a”关系关系关系关系较弱的情况。较弱的情况。较弱的情况。较弱的情况。具体的映射策略与聚集类似,由于组合关系中整体和部具体的映射策略与聚集类似,由于组合关系中整体和部具体的映射策略与聚集类似,由于组合关系中整体和部具体的映射策略与聚集类似,由于组合关系中整体和部分间存在很强的所有关系和一致的生命周期,所以子类所分间存在很强的所有关系和一致的生命周期,所以子类所分间存在很强的所有关系和一致的生命周期,所以子类所分间存在很强的所有关系和一致的生命周期,所以子类所对应的子表中的外键不能为空。对应的子表中的外键不能为空。对应的子表中的外键不能为空。对应的子表中的外键不能为空。步骤步骤2.4:组合关系映射组合关系映射
展开阅读全文