PHP框架queryphp教程:入门二 ORM

justjavac 发布于 2012/12/11 15:10
阅读 481
收藏 4

在上一章,我们介绍了queryphp框架的hello world,并对queryphp框架有了大致的了解。这一章,我们将解释ORM。对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,php利用__set __get __call等方式使用,这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。

更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。 

数据类型映射模式

      1.1简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。

      1.2枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。

      1.3基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。

类映射模型

每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。

      2.1单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。

      2.2多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。

      2.3继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。

删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?

关联映射模式

      3.1一对一关联模式:在关联两端各加一列。

      3.2一对多关联模式:和3.1一样。如果多这端是有序的,还需加入一列表示序号。

      3.3多对多关联模式:将关联单独作一个表。


一般有人说ORM有什么用,喜欢写sql这类

ORM在数据建模,领域设计方面很有用。

比如:

 echo $supply->get(5)->Books->classname;
 //自动取得supply和books关联中内容

如果用sql怎么写,先取得$supply中的值,先然后再写sql取得books中classname

$result=mysql_query(select * from supply where id=5)
$row=mysql_fetch_array($result);
mysql_query(select * from book where supplyid=$row[supplyid]);
$books=mysql_fetch_array($result);

大概这样子,虽然功能相同,但是在做数据建模时候可以不是这样子想的,这样受到干扰太多了,在做领域设计时候,也很不好看。

目前ORM基设计完成,以后不断在优化程序性能和使用方法尽量避免接触到真实表操作和数据库操作。这些操作将会在模型配置文件中完成这样完成程序后,再改动数据库或表不完影响程序,比如原来由mysql改成sqllite也不会修改程序,程序员只要注重于数据模型操作,不需要知道数据来源。

加载中
0
即将下岗的码农
即将下岗的码农
框架太多了,做成熟的cms尚且不一定有人用,别提半成品框架了
返回顶部
顶部