
UML模型到关系数据库的映射
UML模型到关系数据库的映射

主键的生成(1) 将UML模型中的类映射成数据库中的表时,有两 种方法定义其对应的主键: ■第一种方法是将对象标识符映射为主键:在将UML 中的类映射为关系数据库中的表时,每张表中都增加一 个对象标识符列,该对象标识符列作为表的主键 ■第二种方法是将对象的某些属性映射为主键:也即 将类的某些属性映射为关系数据库中表的主键。这种方 法得到的主键具有一定的内在含义,从而为数据库的调 试和维护提供了方便。但这种主键的修改比较困难,它 们的修改可能要涉及到许多外键的修改 把 2
2 将UML模型中的类映射成数据库中的表时, 有两 种方法定义其对应的主键 : ◼ 第一种方法是将对象标识符映射为主键:在将UML 中的类映射为关系数据库中的表时,每张表中都增加一 个对象标识符列,该对象标识符列作为表的主键 ◼ 第二种方法是将对象的某些属性映射为主键:也即 将类的某些属性映射为关系数据库中表的主键。这种方 法得到的主键具有一定的内在含义,从而为数据库的调 试和维护提供了方便。但这种主键的修改比较困难,它 们的修改可能要涉及到许多外键的修改 主键的生成(1)

主键的生成(2) ■如果一个数据库应用程序的UML模型中有30个 以上的类,那么最好使用第一种方法得到关系 数据库中表的主键。对较小的数据库应用而言, 两种映射方案都可以
3 ◼ 如果一个数据库应用程序的UML模型中有30个 以上的类,那么最好使用第一种方法得到关系 数据库中表的主键。对较小的数据库应用而言, 两种映射方案都可以 主键的生成(2)

属性到列的映射 ■UML模型中类的属性映射为关系数据库表中的零 列或几列,但并不是所有的属性都需要映射 当UL类的一个属性本身就是对象时(如类 Customer中包含一个作为其属性的Address对 象),就要将它映射为数据库表中的几列 ■也可将几个属性映射成数据库表中的一个列
4 ◼ UML模型中类的属性映射为关系数据库表中的零 列或几列,但并不是所有的属性都需要映射 ◼ 当UML类的一个属性本身就是对象时(如类 Customer中包含一个作为其属性的Address对 象),就要将它映射为数据库表中的几列 ◼ 也可将几个属性映射成数据库表中的一个列 属性到列的映射

类到表的映射(1) 在将类映射为关系数据库中的表时,可采 取如下四种方法来处理类之间的继承关系: 所有的类均映射为数据库中的表 1■ 除无属性的类外的所有类均映射为数 据库表 将超类的属性下移 将子类的属性上移
5 在将类映射为关系数据库中的表时,可采 取如下四种方法来处理类之间的继承关系: ◼ 所有的类均映射为数据库中的表 ◼ 除无属性的类外的所有类均映射为数 据库表 ◼ 将超类的属性下移 ◼ 将子类的属性上移 类到表的映射(1)

结构映射:类到表的映射 所有的类均映射为数据库中的表(1) 为每个超类和子类都创建一张表,这些表共 享一个公共的主键。这种方法很好地体现了面向 对象的概念,能很好地支持多态性。对于对象可 能充当的每个角色,只需要在合适的表中保存相 应的记录。修改超类和添加新的子类也非常容易 6
6 为每个超类和子类都创建一张表,这些表共 享一个公共的主键。这种方法很好地体现了面向 对象的概念,能很好地支持多态性。对于对象可 能充当的每个角色,只需要在合适的表中保存相 应的记录。修改超类和添加新的子类也非常容易 结构映射:类到表的映射 所有的类均映射为数据库中的表(1)

:所有的类均映射为数据库中的表(2) Employee name taxpay erNumber A Pilot FlightAttendant flight Rating Employee table employeelD name taxpayer Number employeeType Pilot table FlightAttendant table pilotID flightAttendantID (references flight Rating (references Employee) Employee) 7
7 Employee name taxpayerNumber Pilot flightRating FlightAttendant employeeID name taxpayer Number employeeType Employee table pilotID (references Employee) flightRating flightAttendantID (references Employee) Pilot table FlightAttendant table 所有的类均映射为数据库中的表(2)

类到表的映射 所有的类均映射为数据库中的表(③) 由于每个类都被映射为一张表,从而导致数据 库中包含有大量的表 ■由于经常需要访问多张表,因此数据的读取和 写入时间比较长。如果通过将类层次结构中的 每个表存放在不同物理磁盘中来智能地组织数 据库,那么可缓解这个问题 除非添加一些视图来模拟所需的表,否则数据 库的报表生成会很困难 8
8 ◼ 由于每个类都被映射为一张表,从而导致数据 库中包含有大量的表 ◼ 由于经常需要访问多张表,因此数据的读取和 写入时间比较长。如果通过将类层次结构中的 每个表存放在不同物理磁盘中来智能地组织数 据库,那么可缓解这个问题 ◼ 除非添加一些视图来模拟所需的表,否则数据 库的报表生成会很困难 类到表的映射 所有的类均映射为数据库中的表(3)

类到表的映射 除无属性的类外的所有类均映射为数据库表(1) 在这种方法中,具有属性的类才映射为数据 库表,无属性的类不进行映射。这种方法减少 了数据库表的数量,其它方面与上一种方法大 致相同。因此,也具有上一种方法所存在的问 题
9 除无属性的类外的所有类均映射为数据库表 (1) 在这种方法中,具有属性的类才映射为数据 库表,无属性的类不进行映射。这种方法减少 了数据库表的数量,其它方面与上一种方法大 致相同。因此,也具有上一种方法所存在的问 题 类到表的映射

:除无属性的类外的所有类均映射为数据库表(2) Employee name taxpayerNumber A Pilot FlightAttendant flightRating Employee table employeelD name taxpayer Number employeeType Pilot table pilotID (referencesEmployee) flightRating 10
10 Employee name taxpayerNumber Pilot flightRating FlightAttendant employeeID name taxpayer Number employeeType Employee table pilotID (referencesEmployee) flightRating Pilot table 除无属性的类外的所有类均映射为数据库表 (2)