ORM 对象 - 关系映射(Object / Relational Mapping)
- 它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将这些对象组织起来,实现系统业务逻辑的过程。在 ORM 过程中最重要的概念是映射(Mapping),通过这种映射可以使业务对象与数据库分离。从面向对象来说,数据库不应该和业务逻辑绑定到一起,ORM 则起到这样的分离作用,使数据库层透明,开发人员真正的面向对象。
- 对象关系映射是一种使用面向对象程序设计语言在不兼容的类型系统之间转换数据的编程技术。
- 在面向对象的程序设计中,操作的对象是对象,对象是非标量值;在关系型数据库中,操作的对象是整数、字符串,等标量值;
- 对象 - 关系映射在非标量值得对象和基于关系模型的标量值之间自动映射
- 通过操作对象,操作关系型数据库
对象和关系的映射:
- 数据库的表(table)-> 类(class)
- 记录(record)-> 对象(object)
- 字段(field)-> 对象的属性(attribute)
ORM 的三个核心原则:
- 简单:以最基本的形式建模数据。
- 传达性:数据库结构被任何人都能理解的语言文档化。
- 精确性:基于数据模型创建正确标准化了的结构。
ORM 的优点:
- 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
- ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
- 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
- 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
- 你不必编写性能不佳的 SQL。
ORM 的缺点:
- ORM 库不是轻量级工具,需要花很多精力学习和设置。
- 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
- ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。
命名规定:
- 一个类对应一张表。类名是单数,且首字母大写;表名是复数,且全部是小写。比如,表 books 对应类 Book。
- 如果名字是不规则复数,则类名依照英语习惯命名,比如,表 mice 对应类 Mouse,表 people 对应类 Person。
- 如果名字包含多个单词,那么类名使用首字母全部大写的骆驼拼写法,而表名使用下划线分隔的小写单词。比如,表 book_clubs 对应类 BookClub,表 line_items 对应类 LineItem。
- 每个表都必须有一个主键字段,通常是叫做 id 的整数字段。外键字段名约定为单数的表名 + 下划线 + id,比如 item_id 表示该字段对应 items 表的 id 字段。