概念
对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
由于对象和关系处理连接的方式不同,因而引发若干问题
- 表现方法:对象是通过在运行时保存引用的方式来处理连接,而关系数据库则通过创建到另外一个表的键值来处理连接。
- 结构颠倒:在数据库系统中,所有关系的关联都必须是单值的,比如每个订单项都拥有一个外键引用订单,因为订单不能存在多值域。在对象系统中,一个订单很容易通过集合结构,如List表示所有订单项,而每个订单项对象不需要持有一个订单的引用。
- 继承关系的标识:对象的继承关系在SQL中没有相应的表达方法,因此还需要一种机制
几种对象-关系结构映射模式
(1)数据类型映射模式
- 简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。
- 枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。
- 基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。
(2)类映射模型
每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。
- 单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。
- 多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。
- 继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。删除对象实例时,自底向上删除数据。
(3)关联映射模式
- 一对一关联模式:在关联两端各加一列。
- 一对多关联模式:如果多这端是有序的,还需加入一列表示序号。
- 多对多关联模式:将关联单独作一个表。
- 组合关联模式:注意级联式删除。
- 反演关联模式:关联两端指向相关的类型,和普通关联一样。
- 成对关联模式:关联记录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对应一个表,用外键表示它们间的关系。
- 关联上的OCL需要分析成对应的存储过程代码。
- 保证关联的cardinality也需要分析成对应的存储过程代码。
(4)引用映射模式
- 在UML中不存在的MOF特征,指属性是声明为引用类型的实例。用存储过程实现。