通常我们使用Java面向对象技术来实现应用程序的开发,而应用程序需要的相关数据我们使用关系型数据库来保存。面向对象技术主要是通过类、属性、关联、继承等手段进行建模;数据库主要通过表、字段、索引、视图等方式进行建模。
面向对象与关系数据库建模主要存在如下的差异:
一、建模的粒度
关系数据库建模只能使用表和字段两个维度;Java提供的数据类型包括基本数据类型、枚举、集合、泛型,而且我们可以很方面的扩展数据类型,类型可以包含其他类型的实例。
二、继承的表达
关系数据库不支持继承;Java可以体现类的继承关系,特别是类与对象之间可以体现多态。
三、同一性
关系数据库通过主键来体现记录的同一性;Java的对象包括同一性和等同性,同一性指两个对象引用同一个对象,等同性则指两个对象的值相同。
四、对象关联的表达
关系数据库通过外键关联或连接表来表达关联;Java使用对象引用或对象引用的集合来体现对象的关联关系,同时引用具有方向性。
五、导航方式
关系数据库通过表连接进行导航;Java通过对象的属性进行导航。
ORM主要是解决面向对象与关系数据库如上的差异,并提供如下的建模特性:
- 标识符的建模
- 可嵌入类型的建模
- 关联关系的建模
- 值类型集合的建模
- 实体集合的建模
- 继承的建模