php mysql 持久化_数据库持久层是什么东西?(php+mysql为例)

在我接触这个概念的时候好像是05年,那时候有hibernate出来很流行,各个企业招聘都不在只是j2ee了还要求struts和

hibernate,我当时理解的数据库持久层就是就是数据库长链接,觉得设计的目的就是为了减少数据库服务的链接压力,当然这个理解是完全错误的。数据

库持久层设计就是ORM(Object relationship

map)设计,应该是从java的实体bean中汲取过来的。我们用的数据库大多是关系数据库,建立关系的实体是数据表,所谓的orm设计就是让对象和数

据库表之间建立映射关系,让我们操作数据表就像操作对象一样简单,表与表直接的关系映射成对象于对象之间的关系。可以简单的理解为,对象和数据表之间是一

一对应的,这样设计的好处不仅仅是简单,更重要的是便于移植和维护,让程序和数据库操作分离(远离SQL)。下边我们先说说关系数据库,数据实体之间的关

系。

数据库建模的时候,比如我们用pd9.0,建立概念模型,pd会生成相应的逻辑模型和实体模型,这个也是一个比较复杂的工程,有专门的数据库建模教程,不

管是实体也好,还是概念也好,之间有4种关系:1、一对多;2、多对一;3、多对多;4、内联(这种关系很多教程和书面上都把他抛弃了,但是我个人觉得还

有必要存在),那映射出来的对象同样也是存在这样4种关系。接着说数据表的操作。

我们用Sql操作数据表的时候,有四种操作:1、select;2、insert;3、update;4、delete;这是数据表操作最小四种因子,其

他不管是多复杂的操作都是基于这四种操作的,那同样映射到我们的对象也就是有说有四个基础方法。这个时候大概有个思路,就是ORM设计就是4种关系加上4

重操作构造一个对象实体,这样理解可以说正确也可以说不正确,因为对象不存在关系这么一说,只有方法和属性。

现在讲讲为什么叫做持久层,这个持久并不是数据库资源是持久存在内存或者是cache中进行共享,而是映射的对象持久化,也就是系统只初始化一次映射关

系,以后就不再做映射,在hibernate中要配置hibernate-config.xml来映射,在上次提到的propel有专门的配置生成工具

(generator),在我自己修改后的autoCRUD也有这个工具,只是系统自己识别是不是要初始化(安装),总之一句话就是对象映射数据库表持久

化。

现在我我们心中大概有一个设计框架,下边看看我们的例子,当然是伪代码:

Class Orm_CRUD {

var $table;

var $name;

var $key;

var $fields = array();

var $required = array();

var $numeric = array();

var $indexes = array();

var $where;

var $orderby;

var $_php;

var $_parent;

var $_relationships = array();

var $_joins = array();

var $_aliases = array();

}

上边的这些属性能不能完整的描述一个数据表,表名,主键,字段,非空字段,数字类型,索引,别名,关系,已经完全可以描述一个mysql数据表,其中的

where和orderby这些属性很明显了是为统一sql准备的。数据表描述OK了,每个数据列是不是要单独映射呢?答案是必要的,下边看看我们的每个

列的属性描述:

Class Orm_ColumCRUD {

var $table;

var $name;

var $iskey;

var $isnull;

var $type;

var $size;

var $isrelationship;

var $isindexes ;

var $isunique;

var $description

}

看了这些命名我想基本上清楚了,包含列所有属性,表名,字段名,类型,长度,为空,索引,关系,唯一,描述,主键。到这里

我们属性映射的工作基本上完成了,下边就应该是数据表操作的映射了。实际上在大多数的应用下列的映射基本上是没有的,也可以不要这个环节,把他的一些重要

的属性加入table的映射中,比如主键,是不是为空,等等,像autoCRUD就是这样设计的。

我们对数据表的操作上边已经说过有四种,现在就不重复了,实际在现实情况中还有一种就是alter,修改表的属性,一般系统都不支持这样用,有两个风险,

第一数据库压力,第二就是持久层对象也需要跟着改变,在这里设计的时候我们忽略了这个问题,在设计好的数据库模型上设计ORM,这种经常alert操作在

现在比较时髦的自定义模型中用的比较多,自定义数据表字段,这个时候我们再设计ORM的时候,就应该考虑加上第五种,同时更新我们的对象映射。先就说到这

里,下篇再说方法和操作的映射。

3

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2008-11-05 23:34

浏览 5216

评论

2 楼

OnJavaRoad

2008-11-08

dac4074c17d1cb3cd8fff59f5e99a670.gif  

966903dea4bcb507358d5dcce8b912e5.gif

1 楼

lugreen

2008-11-06

38687d1a1ad71d37c86f287056834d1a.gif 

38687d1a1ad71d37c86f287056834d1a.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值