对象关系映射.docx
ORM一、ObjecVRelationMapping对象-关系数据库映射什么是ORM?对象关系映射(ORM)供应了概念性的、易于理解的模型化数据的方法。ORM方法论基于三个核心原则:简洁:以最基本的形式建模数据。传达性:数据库结构被任何人都能理解的语言文档化。精确性:基于数据模型创建正确标准化了的结构。典型地,建模者通过收集来自那些熟识应用程序但不娴熟的数据建模者的人的信息开发信息模型。建模者必需能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必需能以简洁的单元分析信息,对样本数据进行处理。ORM特地被设计为改进这种联系。规章表达式ORM把应用程序世界表示为具有角色(关系中的部分)的一组对象(实体或值)。ORM有时也称为基于事实的建模,由于它把相关数据描述为基本领实。这些事实假如分割为再小的事实就会丢失信息。简洁事实的一些例子包括:人有电话人住在某个地方人生于某个日期人在某个日期被雇佣ORM供应的不只是描述不同对象间关系的一个简洁而直接的方式。ORM还供应了敏捷性。使用ORM创建的模型比使用其它方法创建的模型更有力量适应系统的变化。此外,ORM允许非技术企业专家按样本数据谈论模型,因此他们可以使用真实世界的数据验证模型。由于ORM允许重用对象,数据模型能自动映射到正确标准化的数据库结构。ORM模型的简洁性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。对象关系映射(ObjectRelationalMapping,简称ORM)是种为了解决面对对象与关系数据库存在的互不匹配的现象的技术。简洁的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动长久化到关系数据库中。本质上就是将数据从一种形式转换到此外一种形式。这也同时示意者额外的执行开销;然而,假如ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的长久层并不存在。更重要的是用于掌握转换的元数据需要供应和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG法律规范的对象数据库依旧需要类级别的元数据。对象-关系映射(ObjectZReIationMapping,简称ORM),是随着面对对象的软件开发方法进展而产生的。面对对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。面对对象是从软件工程基本原则(如耦合、聚合、封装)的基础上进展起来的,而关系数据库则是从数学理论进展而来的,两套理论存在显著的区分。为了解决这个不匹配的现象,对象关系映射技术应运而生。让我们从0/R开头。字母0起源于"对象"(Object),而R则来自于“关系”(ReIatiOnal)o几乎全部的程序里面,都存在对象和关系数据库。在业务规律层和用户界面层中,我们是面对对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。当你开发一个应用程序的时候(不使用0/RMaPPing),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,转变状态对象等等任务。而这些代码写起来总是重复的。假如打开你最近的程序,看看DAL代码,你确定会看到很多近似的通用的模式。我们以保存对象的方法为例,你传入一个对象,为SqICOmmand对象添加SqlParameter,把全部属性和对象对应,设置SqICommand的CommandText属性为存储过程,然后运行SqlCOmmand。对于每个对象都要重复的写这些代码。除此之外,还有更好的方法吗?有,引入一个0/RMapping0实质上,一个0/RMaPPing会为你生成DAL。与其自己写DAL代码,不如用0/RMapping。你用。/RMaPPing保存,删除,读取对象,0/RMaPPing负责生成SQL,你只需要关怀对象就好。对象关系映射胜利运用在不同的面对对象长久层产品中,如:TOrqUeQJB,Hibernate,TopLink,CastorJDO,TJDO等。一般的ORM包括以下四部分:一个对长久类对象进行CRUD操作的API;一个语言或API用来规定与类和类属性相关的查询;一个规定mappingmetadata的工具;种技术可以让ORM的实现同事务对象起进行dirtychecking,lazyassociationfetching以及其他的优化操作。一、目前流行的ORM产品目前众多厂商和开源社区都供应了长久层框架的实现,常见的有:ApacheOJB()Cayenne(http:/objectstyle.org/cayenne/)Jaxor()Hibernate()iBatis()jRelationalFramework()mirage()SMYLEOTopLinkO其中TopLink是Oracle的商业产品,其他均为开源项目。其中Hibernate的轻量级ORM模型逐步确立了在JaVaORM架构中领导地位,甚至取代简单而又繁琐的EJB模型而成为事实上的JaVaORM工业标准。而且其中的很多设计均被J2EE标准组织吸纳而成为最新EJB3.0法律规范的标准,这也是开源项目影响工业领域标准的有力见证。二、对象一关系映射模式从公共仓库元模型:开发指南一书第8章CWM元仓库中摘录出来的内容,实现了公共仓库元模型(CWM)的UML图到MiCrOSOftSQLSerVer数据库的映射,是种将对象层次结构映射成关系型结构的方法。个人认为可以作为将本体(OntoIOgy)文件存储到关系型数据库中的一种可借鉴方法。基本状况:公共仓库元模型(CWM)是对象管理组织(C)MG)的种和数据仓库相关的元模型标准,采纳UML表示的对象层次结构,在保存到数据库中时由于面对对象的数据库技术的不完善(理论讨论和商业应用都不是主流),所以该书的作者倾向于使用成熟的关系型数据库来保存一这也是存储本体时所遇到的问题。采纳方法:将UML模型中的各种元素通过转换,保存为数据库模式。由于CWM是一种元模型,因此模型的实例也是一种模型,将这种实例以数据库数据的形式保存。使用数据库中比较成熟的存储过程技术提高开发和执行效率。1、数据类型映射模式1.1 简洁数据类型模式:建立UML和关系型数据库中简洁数据类型的映射表以指导映射。1.2 枚举数据类型模式:每种枚举类型对应一个表,只有一个列JEnumLiteraI)表示枚举值。1.3 基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。2、类映射模型每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。2.1 单值属性模式:是Cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必需有的属性),列属性为NOTNULLo2.2 多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。2.3 继承模式:每加入一个类的实例时,依据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应纪录的主键)。删除对象实例时,自底向上删除数据。遇到从中间删的状况怎么办?多重继承怎么处理?(金龙飞)3、关联映射模式3.1 一对一关联模式:在关联两端各加一列。3.2 一对多关联模式:和3.1一样。假如多这端是有序的,还需加入一列表示序号。3.3 多对多关联模式:将关联单独作个表。3.4 组合关联模式:留意级联式删除。3.5 反演关联模式:关联两端指向相关的类型,和一般关联一样。3.6 成对关联模式:关联纪录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对应一个表,用外键表示它们间的关系。3.7 关联上的OCL需要分析成对应的存储过程代码。3.8 保证关联的CardinaIity也需要分析成对应的存储过程代码。4、引用映射模式在UML中不存在的MoF特征,指属性是声明为引用类型的实例。用存储过程实现。二、OperationalRiskManagement操作风险管理一、操作风险的界定与基本特点通常,银行的风险管理一般将信用风险管理、市场风险管理、操作风险管理并列为三大领域。与信用风险管理、市场风险管理相比,操作风险的管理应说还处于起步阶段,目前甚至还没有形成一个统一的、国际认可的定义。不过,随着操作风险的影响不断增大,国际银行界已经越来越将巴塞尔银行委员会的定义作为标准化的界定:“操作风险就是指由于内部程序、人员、系统不充分或者运行失当、以及由于外部大事的冲击等导致直接或者间接损失的可能性的风险巴塞尔委员会同时指出,这一界定包含了法律风险,但是并不包含策略性风险和声誉风险。当前,操作风险已经成为全球银行业风险管理日趋重要的领域之,实际上,操作风险并不仅仅与银行的“操作”(如后线支持、信息系统消失故障、业务流程上的问题等等)相关,而且也与银行业务操作之外的领域相关,如欺诈交易(roguetrading)、模型的风险、报告和会计体系消失问题等。从广义来说,操作风险可以划分为操作性杠杆风险(OPeratiOnalleveragerisk)和操作性失误风险(OPeratiOnalfailurerisk)。操作性杠杆风险主要是指外部因素引起的操作风险,如由于外部冲击导致金融机构收益的削减、这些外部冲击包括税制和政治方面的变动、监管和法律环境的调整、竞争者的行为和特性的变化等,通常衡量这个操作风险的方法是运用情景分析(SCenarioanalysis)o操作性失误风险主要是指由于金融机构的内部因素引起的操作风险,这些内部因素主要包括处理流程、信息系统、人事等方面的失误。总体来看,操作性失误风险在整个操作风险中所占据的比重近年来明显提升。假如对操作失误风险作进一步细分,我们还可以划分为:(1)执行风险:即执行人员不能证券理解管理人员的意图或者有意错误操作等;(2)信息风险,即信息在机构内部、或者机构内外之间的产生、接收、处理、储存、转移等环节消失故障;(3)关系风险,即由于产品和服务、管理等方面的问题影响到客户与金融机构的关系;(4)法律风险,即金融机构的经营管理活动不符合所在地的法律和监管要求所导致的风险;(5)人员风险,即缺乏足够合格的员工、缺乏对员工表现的恰当评估和考核等导致的风险;(6)系统大事风险,即电脑系统等消失故障所可能导致的风险。依据巴塞尔新资本合同的要求和不同金融机构的实际状况,还可以提出更为具体的操作风险的细分。(一)操作风险的特点1与市场风险和信用风险不同的是,操作风险中的风险因素是内在于银行的业务操作的,而且单个的操作风险因素与操作性损失之间并不存在清楚的、可以定量界定的数量关系。因此,对于操作风险的管理,具体的业务部门应担当第一位的作用,董事会则应担当最终的责任。2在业务规模大、交易量大、结构变化快速的业务领域,受到操作风险冲击的可能性最大。3由于通常可以监测和识别的操作风险因素同由此可能导致的损失规模、频率之间不存在直接的关系,因而银行的风险管理部门难以确定哪些因素对于操作风险管理来说是最为重要的。4从掩盖范围看,操作风险管理实际上掩盖了几乎银行经营管理的全部方面的不同风险(acatch-alltitleforasetofverydiffentrisks),从一个极端看,操作风险既包括那些发生频率高、但是可能造成的损失相对较低的日常业务流程处理上的小错误;在此外一个极端,操作风险也包括那些发生频率低、但是可能导致的损失相对高的自然灾难、大规模舞弊等。因此,试图用一种方法来掩盖操作风险的全部领域几乎是不行能的。(二)操作风险应包含的内容目前,国际金融界关于操作性风险应包含那些内容,也依旧存在相当明显的争辩和分歧。大致来说,可以归结为以下几个方面:基本认同的内容1清算失误2交易纪录错误3火灾和洪灾等灾难4系统故障部分认同的内容1内部舞弊2外部舞弊3虚假交易4不适当的销售技术5战略决策失误(如进入边际收益已经很低的业务领域)少数认同的内容1市场逆转时导致的损失2交易对手违约同时,从金融几个的不同业务领域看,投资银行业务、市场交易业务、公司业务等被视为市场风险和信用风险主导的业务(marketandcreditriskdominates),零售业务、资产管理业务、信托业务、服务性收费业务则被视为操作风险主导的业务(operationalriskdomonates)。二操作风险衡量的主要方法在2001年巴塞尔新资本合同中,操作风险被赐予了一个明确的定义,同时,这份新资本合同还确定了比较宽泛的资本要求,即配置到操作风险的资本为当前金融机构最低资本金水平的20%,明显这是一个相当高的水平,大多数银行看来不情愿配置如此高水平的资本金到操作风险方面。为此,新的资本合同供应了多种可供选择的衡量操作风险、及其所需配置的资本金的方法,这主要包括:(1)基本指标方法:对于业务活动范围有限的小型银行,掩盖操作风险的资本为总收入的一个比率(目前这个比率临时确定为30%)。(2)标准法,这种方法将金融机构划分为不同的业务线,对于每种业务线,其所需的资本为beta乘以敞口系数,beta由监管当局依据样本银行的基本数据进行测算和确定。(3)内部衡量方法,这种方法要对每种业务线和每种类型的损失分别从内部采集数据进行计算,每种业务线的预期损失为敞口系数、损失概率和给定大事的根失等共同确定的,所需配置的资本则是gama系数与预期损失的乘积。目前,很少有银行能够采纳内部衡量方法,由于当前很少有银行能够积累足够充分的内部损失数据来建立相关的模型,当然其中部分数据也可以向外部采集。从目前金融机构在风险管理方面的实践看,当前正在被采纳的衡量操作风险的主要方法主要包括:1监测主要指标。这主要是运用不同业务线最能代表其操作风险的指标(如成本、收益、资产、交易量等)进行衡量。其主要优点是简洁易行,但是这种方法不能留意到不同业务线、不同领域的操作风险的差异。金融机构在着手监测操作风险时,值得关注的指标主要包括:(1)交易失误的纪录,包括失误的汇总分析、趋势分析、前台、中台和后天之间的合作状况等;(2)保管业务和仓库等的报告;(3)不同系统之间的整合状况;(4)清算系统、外汇交易系统、交易代理业务的状况等。2参考外部指标。运用外部机构在不同业务领域管理操作风险时所采纳的范围、方法及其测算的结果,作为自身的参照。在运用这种方法时,假如选取的外部指标得当,实施起来也相对简洁,便于不同金融机构之间的对比,而且也可以作为对其他测算方法的有效性的检测(sanitycheck)o但是,这种方法一般被视为只是一种对比性的测量,而不是基于不同金融机构自身特点的定量化分析;同时,这种测量方法不能鼓舞金融机构实行乐观的缓释操作风险的方法。3统计分析。通过采集内部的历史损失数据建立统计模型,测算在不同的业务部门和整个金融机构范围内所需要配置的资本水平。这种方法为很多金融机构和询问公司所采纳。这种方法实施的实际效果取决于内部历史损失数据的质量和数量,而且不能灵敏地反映金融机构动态的风险变动状况。4计分卡方法。这主要是包括多项前瞻性的关于操作风险的指标。通常金融机构运用这种方法来安排其他方法测算出来的所需的资本金。采纳这种方法能够对前线的业务人员形成乐观的激励机制,促使其乐观监控操作风险。不过,这种方法得出的结果是否牢靠,关键取决于设计这种方法的专家,由于计分卡所选取的指标、以及不同指标所占的权重都是有专家来确定的。5体现风险及其影响的因果关系的简单模型。这主要是指金融机构在对操作风险及其可能导致的损失的因果推断的基础上,通过采集历史数据建立自身的关于操作风险的模型。这种方法测量的效果应说是最好的,假如金融机构能够胜利实施的话,这种方法能够促使前线的业务人员乐观参加操作风险的管理,由于这种方法不仅考虑了操作风险所可能导致的损失,而且还考虑了可能导致这种损失的预警性指标和因素。但是,这种方法对于内部数据采集的要求最高(Clataavailability),开发整个模型所需要投入的资源最多,在整个金融机构范围内统实施的难度自然也较大。正如我们的分析所指出的,由于不同的衡量方法之间存在的优劣各有不同,因而综合运用不同的方法进行推断和相互引证,可能是效果最好的方法。目前,关于操作风险的模型还存在相当大的分歧和争辩,不过其基本目标应是全都的,就是测算操作风险所可能带来的损失,并相应配置资本,提出管理操作风险的方法。在这个测算过程中,重点要确定不同类型的操作风险发生的部门和领域、这种风险发生的可能性、以及发生这种大事所可能导致的损失。从具体的定量衡量的角度看,描述操作风险常常采纳的函数外形是浴缸型的(bathtubshape),即:-个操作性的系统在引入初期,员工缺乏阅历,管理上存在漏洞,因而消失操作风险的概率较高;随着系统的运行正常,风险频率较低,主要是一些随机性的故障;最终,随着系统的老化、以及环境的变化,消失操作风险的概率重新提升。在早期阶段,运用有阅历的员工、强化对员工的培训、系统在投产之前进行多方位的测试等都可以降低操作风险消失的概率;此外,常用的模型还包括VAR的测算等。在实行操作风险管理的早期阶段,不少金融机构采纳一些便于实施的方法,其中主要是偏于主观的操作风险衡量技术。这种方法主要依靠大量动员人力在机构内部采集数据、进而进行损失的分析,在分析中主要是确定三个方面的因素,即处理失误的数量、榻失的规模、不同部门的审核评分。操作风险的管理人员在这三个因素的基础上确定不同业务部门、不同部门的不同环节在操作风险管理中的相对重要性。总体上看,在金融机构的风险管理实践中,与信用风险和市场风险相比,操作风险的定量衡量应说还处于婴儿阶段。三操作风险管理在金融机构的引入和管理框架的建立目前国际范围内在操作风险管理方面水平相对较高的金融机构,通常都建立罗强有力的操作风险管理流程和框架,并将操作风险与管理其他风险所采纳的方法和框架有机整合起来,而且通过有效管理操作风险削减了收入的波动性,其中有些机构还改进了自身的外部评级水平。巴塞尔新资本合同的颁布及其实施,就促使操作风险进一步向更多的金融机构扩展。立足于国际金融界的阅历,金融机构在引入操作风险管理、建立操作风险管理框架时,需要重点留意以下几个方面的问题:1在建立基本运作程序的同时,从简洁衡量的领域着手。从具体的实施过程看,国际金融界的阅历是,首先建立一套相对简略的、但是比较完整的操作风险的管理体系,这个体系应基本掩盖操作风险的识别、评估、缓释、监控、报告等环节,在此基础上建立掩盖整个机构的操作风险管理战略和政策,从相对简略的领域动身,在实际运作中逐步完善,扩大其掩盖的操作风险的领域。2金融机构在着手管理操作风险时,重点要建立与信用风险和市场风险相全都的操作风险的管理框架,确定不同职位的人员在操作风险管理中的责任(如业务管理人员,其中特殊是零售业务部门的操作人员;中台人员;稽核部门;风险管理部门等)在此基础上,风险管理委员会等高层机构应确定准备选用的风险管理方法,业务部门应据此采集关于操作风险的各种数据,向市场寻求专业的询问和支持,逐步建立初步的操作风险管理体系。严格地说,整个金融机构范围内管理不同风险的基本原则和方法应全都,这意味着新建立的操作风险管理框架必需要整合到与信用风险和市场风险管理相全都的框架中去,操作风险所运用的方法和原理也应与整个企业在风险管理方面运用的相协调。3风险管理部门并不是操作风险管理的唯一部门,具体的业务部门、法律部门、稽核部门都担当着进行操作风险管理的责任。假如说市场风险和信用风险的管理日趋强调集中化(CentraliZation)的话,那么,操作风险的管理则必需强调分散化(decentralized).严格地说,具体的业务部门在操作风险管理方面应担当第一位的责任。这是由操作风险的特征所打算的,当然关于操作风险管理的具体原则应由风险管理部门供应。4操作风险的报告体系。操作风险的报告系统应独立于业务部门,并且应能够敏感地反映操作风险的变动,主要数据自动生成,在整个机构来采纳的采集方法保持全都。5操作风险体系中的激励和考核机制。在具体的管理人员介入操作风险系统的运行时,就存在着其机会主义式地运用这一系统的可能性,因此,建立完善的激励机制和绩效考核制度在操作风险管理中同样非常重要。同时,即使一个机构中建立了相当自动化的操作风险报告体系,但是假如高级管理人员不能动态地介入整个管理过程、不能将报告的结果与员工和部门的绩效考核有机结合起来,这个系统的运作效果也会大打折扣。6董事会和高级管理层在操作风险的管理中应担当更大的责任,包括建立清楚的管理结构、明确的责任分工,并且保证操作风险的管理框架能够掩盖全部的相关领域,还应建立清楚的关于操作风险的管理和报告程序。7全部的业务部门和支持性部门都应整合在整个操作风险的管理框架中。8寻求合格的、充分的操作风险管理人员。从人员构成看,目前的一些国际性金融机构中的操作风险管理人员主要有不同业务部门的管理经受、法律或者稽核人员、业务方案人员、信息平安人员等。较之信用风险和市场风险,操作风险管理方面有实际阅历的人员相对较少,大部分需要金融机构结合自身的实际状况进行培训,还有一部分需要向外部聘请。9建立恰当的操作风险管理架构。目前,全球范围内管理操作风险主要实行三种方法:总部集中管理型;总部集中管理与分散化支持的类型;稽核部门占据主导作用的类型。选择其中任何一种类型,主要取决于各自的企业文化和董事会的风险偏好、自身的风险管理力量等。