﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-thought persistence</title><link>http://www.cnblogs.com/progame/</link><description>简单，再简单一点</description><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 12:30:49 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 12:30:49 GMT</pubDate><ttl>60</ttl><item><title>未来会更好 (在tastysoft陪伴ShippingWise走过的这些年)</title><link>http://www.cnblogs.com/progame/archive/2009/02/08/tastysoft_shippingwise.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Sat, 07 Feb 2009 17:40:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2009/02/08/tastysoft_shippingwise.html</guid><description><![CDATA[<P>太专注于一件事, 则容易健忘, 我已经记不清是什么时候进品味网络的, 应该有快五年了吧<BR><BR>最近3年多, 一直在专注地开发<A href="http://tastysoft.com/products/shippingwise/">ShippingWise</A>产品, 从最开始和客户交流的只能旁听业务, 到现在可以很自如自信地和客户畅谈业务流程改造, 业务财务对接<BR>慢慢地明白了, 在中国, 一个纯粹的程序员是很难发展的, 除非在很大的大公司, 连端茶倒水扫地都有专门的人, 那么可能可以去完全去专注技术<BR>否则的话, 不明白业务的话是无法和客户沟通的, 产品经理和项目经理是两个不同的职责, 但如果合二为一, 却能够开发出更适合客户的软件产品<BR><BR>在 <A href="http://www.tastysoft.com/">TastySoft </A>这几年, 失去的是青春, 但得到的也很多, 有非常好的同事, 也有非常好的客户<BR>有时候最开始我们和客户是由争执开始的, 但最终彼此都能成为非常好的朋友<BR>一直认为, 客户服务的最高境界就是把客户不当客户<BR><BR>时间长了, 虽然偶尔会厌烦, 但自己一手呵护出来的产品就像自己的孩子一样, 是有感情的<BR><A href="http://tastysoft.com/solutions/shippingwise360/">ShippingWise</A>的功能和特性也在不断地增加, 商业智能, 数据分析, cargo tracking, 自动订舱... <BR>依然能够享受技术上的乐趣, 也能加深业务的领会, 幸好我们的客户满意度非常高<BR>和客户一起发展, 这是我们一直奉承的宗旨<BR>既然身在服务行业, 那么做口碑是我们不二的选择<BR><BR>2009年, 牛年了, 新的一年有新的计划, 有新的任务<BR>ShippingWise决定为了更适应现在日益发展的物流行业需要, 将推出全新的全程可视化整合供应链管理解决方案<BR>这是一个挑战, 也将会是一次新的跨越式的成长, 不管是对公司还是对个人<BR>我喜欢说, 干一行爱一行, 我们做软件的, 能够带来最大乐趣的就是客户的认可带来的成就感<BR><BR><BR></P><img src ="http://www.cnblogs.com/progame/aggbug/1386109.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48008/" target="_blank">IBM发布全球首款开源智能编译器</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>vs2008beta2 使用几天以来碰到的一些问题</title><link>http://www.cnblogs.com/progame/archive/2007/09/02/vs2008beta2_bug.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Sun, 02 Sep 2007 08:31:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2007/09/02/vs2008beta2_bug.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/878966.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2007/09/02/vs2008beta2_bug.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/878966.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/878966.html</trackback:ping><description><![CDATA[摘要: 方法名称为"As" 会导致整个IDE崩溃&nbsp;&nbsp;<a href='http://www.cnblogs.com/progame/archive/2007/09/02/vs2008beta2_bug.html'>阅读全文</a><img src ="http://www.cnblogs.com/progame/aggbug/878966.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48007/" target="_blank">IE颓势不减 微软下月公布最新浏览器架构</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>.Net 代码混淆的一些注意事项</title><link>http://www.cnblogs.com/progame/archive/2007/08/28/872841.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Tue, 28 Aug 2007 05:20:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2007/08/28/872841.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/872841.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2007/08/28/872841.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/872841.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/872841.html</trackback:ping><description><![CDATA[摘要: XENOCODE使用中的一些心得&nbsp;&nbsp;<a href='http://www.cnblogs.com/progame/archive/2007/08/28/872841.html'>阅读全文</a><img src ="http://www.cnblogs.com/progame/aggbug/872841.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>再续:ORM性能测试用例  </title><link>http://www.cnblogs.com/progame/archive/2007/07/29/orm_performance_unit_test2.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Sun, 29 Jul 2007 09:33:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2007/07/29/orm_performance_unit_test2.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/835534.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2007/07/29/orm_performance_unit_test2.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/835534.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/835534.html</trackback:ping><description><![CDATA[摘要: 既然是ORM的测试, 就得体现这么几点:<br>one-one, many-ony, many-many关系<br>typed query 类型化查询<br>entity crud 实体的crud<br>traverse entity list 实体集合的构造和遍历&nbsp;&nbsp;<a href='http://www.cnblogs.com/progame/archive/2007/07/29/orm_performance_unit_test2.html'>阅读全文</a><img src ="http://www.cnblogs.com/progame/aggbug/835534.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>关于ORM性能测试的一点意见</title><link>http://www.cnblogs.com/progame/archive/2007/07/26/orm_performance_test.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Thu, 26 Jul 2007 01:49:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2007/07/26/orm_performance_test.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/831790.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2007/07/26/orm_performance_test.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/831790.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/831790.html</trackback:ping><description><![CDATA[摘要: 希望ORM性能测试的例子能够更好地反映实际运用情况&nbsp;&nbsp;<a href='http://www.cnblogs.com/progame/archive/2007/07/26/orm_performance_test.html'>阅读全文</a><img src ="http://www.cnblogs.com/progame/aggbug/831790.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>关于分页这点事 -- 如何才能分得准</title><link>http://www.cnblogs.com/progame/archive/2007/07/03/sqlserver_custom_paging.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Tue, 03 Jul 2007 13:44:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2007/07/03/sqlserver_custom_paging.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/804854.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2007/07/03/sqlserver_custom_paging.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/804854.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/804854.html</trackback:ping><description><![CDATA[摘要: 一直以来, 大家热衷于存储过程分页谁分得快, 但是我们搜索一下"通用分页存储过程", 就会发现这个有问题的方法流传得颇广&nbsp;&nbsp;<a href='http://www.cnblogs.com/progame/archive/2007/07/03/sqlserver_custom_paging.html'>阅读全文</a><img src ="http://www.cnblogs.com/progame/aggbug/804854.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47999/" target="_blank">Silverlight打造杰克逊纪念专题</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>对象化查询之OCL vs. OPath</title><link>http://www.cnblogs.com/progame/archive/2005/01/26/97473.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Wed, 26 Jan 2005 02:50:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2005/01/26/97473.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/97473.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2005/01/26/97473.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/97473.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/97473.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">令人心动的对象化查询<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">对象化查询是<span lang="EN-US">O/R Mapping</span>中非常让人心动的一个特性，当所有的表对我们来说不复存在后，我们可以对实体进行<span lang="EN-US">CRUD</span>，可是当我们需要返回多个实体的结果集时，我们怎么办呢？<span lang="EN-US">Dataset</span>做为载体是必然的，可是我们查询过滤数据的方式是怎样的？<span lang="EN-US">sql</span>？<span lang="EN-US">No</span>！我们就是在尽量避免直接使用<span lang="EN-US">sql</span>，因为<span lang="EN-US">sql</span>不便于重构，可移植性太差，拼凑出来的<span lang="EN-US">sql</span>语句对测试覆盖率也有影响。所以大家都期待着可以用对象化查询来根除将<span lang="EN-US">Entity</span>再当做<span lang="EN-US">Table</span>来处理的尴尬。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">.Net</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">下的<span lang="EN-US">O/R Mapper</span>对对象化查询的支持<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">目前为止，<span lang="EN-US">.Net</span>下的<span lang="EN-US">O/R Mapper</span>对对象化查询的支持绝大部分都是非常有限的：<span lang="EN-US">NHibernate</span>用的是<span lang="EN-US">HQL</span>语句，其本质可以说是一种把<span lang="EN-US">Entity</span>看做<span lang="EN-US">Table</span>的改装后的<span lang="EN-US">sql</span>语句，<span lang="EN-US">DataObjects.Net</span>和<span lang="EN-US">NHibernate</span>差不多，也有一套自己的类<span lang="EN-US">sql</span>对象化查询语法，其它很多<span lang="EN-US">O/R Mapper</span>使用的是简单的属性过滤查询，而说到对对象化查询支持得最强大的，要算<span lang="EN-US">ECO</span>Ⅱ和<span lang="EN-US">ObjectSpaces</span>，前者使用的是<span lang="EN-US">OCL</span>语法，后者是<span lang="EN-US">OPath</span>。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OCL</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">起源<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OCL</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">是<span lang="EN-US">OMG</span>组织制订的<span lang="EN-US">UML</span>语言规范的一部分，它的初衷是用来对<span lang="EN-US">UML</span>模型视图中的<span lang="EN-US">Object</span>添加约束描述的，并不是一种编程语言，而<span lang="EN-US">OCL</span>应用到<span lang="EN-US">O/R Mapping</span>中就俨然成了一种对对象进行查询的语言（<span lang="EN-US">OQL</span>）。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OPath</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">起源<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OPath</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">是<span lang="EN-US">MS</span>提出的在<span lang="EN-US">WinFS</span>中准备大量使用的一种对象查询语言，从它的命名上可以看出和<span lang="EN-US">XPath</span>的相似之处，<span lang="EN-US">MS</span>的口号一直是把复杂的东西变简单，把简单的东西变成自动化。所以这个<span lang="EN-US">OPath</span>确实不可小觑。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">简单的例子<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">先我们从一个简单的例子入手，假设有如下的实体关系（画图太麻烦，还浪费空间）：<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Department (code name employees)<o:p></o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Employee(code name department salary)<o:p></o:p></span> 
</p>
<table class="MsoTableGrid" cellSpacing="0" cellPadding="0" border="1" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext">
   <tbody>
       <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">查询<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OCL<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OPath<o:p></o:p></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 1">
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">包含薪水大于<span lang="EN-US">3000</span>的员工所有部门<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Department.allInstances-&gt;select(self.employees.includes(salary &gt; 3000))<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Exists(employees[saleary &gt; 3000])<o:p></o:p></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 2">
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">得到部门<span lang="EN-US">001</span>的所有员工<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Employee.allInstances-&gt;select(self.department.code = &#8216;001&#8217;)<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Department.code = &#8216;001&#8217;<o:p></o:p></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 3">
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">所有员工薪水都大于<span lang="EN-US">3000</span>的部门<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Department.allInstances-&gt;select(self.employees.forAll(salary &gt; 3000))<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes">
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">员工最高薪水大于<span lang="EN-US">3000</span>的部门<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Department.allInstances-&gt;select(self.employees.includes(salary &gt; 3000))<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
   </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">功能比较<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">从这个列表中可以看到<span lang="EN-US">OPath</span>的语法要简洁得多，但<span lang="EN-US">OCL</span>的集合操纵能力却是<span lang="EN-US">OPath</span>无法比拟的，下面是<span lang="EN-US">OCL</span>的一些集合函数：<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<table class="MsoTableGrid" cellSpacing="0" cellPadding="0" border="1" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext">
   <tbody>
       <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">名称<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">功能<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 1">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Collect<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">得到一个属性的集合<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 2">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Exists<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如果存在符合条件的元素为真<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 3">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">forAll<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">只有所有集合元素符合条件时才为真<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 4">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Includes<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">是否包含某个对象<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 5">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Select<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">获取符合条件的一个子集<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 6">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Reject<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">减去符合条件的一个子集<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 7">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">IsEmpty<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">集合为空<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 8; mso-yfti-lastrow: yes">
           <td vAlign="top" width="156" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">NotEmpty<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="396" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 297pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">集合不为空　<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
   </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">此外，<span lang="EN-US">ECO</span>Ⅱ对集合操作还有增强，如提供了<span lang="EN-US">sum</span>、<span lang="EN-US">avg</span>、<span lang="EN-US">max</span>、<span lang="EN-US">min</span>的聚集操作函数，同时它还支持多种非聚集函数，如<span lang="EN-US">concat</span>、<span lang="EN-US">length</span>、<span lang="EN-US">toupper</span>、<span lang="EN-US">tolower</span>等。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">其它的一些特性：<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<table class="MsoTableGrid" cellSpacing="0" cellPadding="0" border="1" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext">
   <tbody>
       <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">特性<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OCL<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">OPath<o:p></o:p></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 1">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">NULL</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">判断<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 2">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Implies(</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">表示如果左边为真，那么右边也要为真<span lang="EN-US">)<o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">A implies B</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">可以转化为<span lang="EN-US">(A and B) or (Not A)<o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 3">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">类型判断和转换<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">无<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 4">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Distinct<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持（通过<span lang="EN-US">Set</span>集合返回）<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不支持（因为只是对象获取和属性过滤，没有集合操作，所以不涉及到子集合，而外部对象集合一般有主键约束）<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 5">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">集合内元素获取<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
       <tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes">
           <td vAlign="top" width="163" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Order By<o:p></o:p></span> 
              </p>
           </td>
           <td vAlign="top" width="168" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">支持<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
           <td vAlign="top" width="228" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 171pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
              <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不支持，但可以通过调用查询对象的方法达到目的<span lang="EN-US"><o:p></o:p></span></span> 
              </p>
           </td>
       </tr>
   </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">假如增强<span lang="EN-US">OPath</span>的话，大概会是什么样子？<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如果要支持集合操作的话，那么现有的<span lang="EN-US">OPath</span>语法的简单性肯定要大打折扣，比如说类似于<span lang="EN-US">OCL</span>中的<span lang="EN-US">forAll</span>，<span lang="EN-US">OPath</span>如果要实现的话，可能的方法就是：<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">(Employees[salary &gt; 3000].Count = Employees.Count)<o:p></o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">性能比较<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">因为现在<span lang="EN-US">ObjectSpaces</span>中的<span lang="EN-US">OPath</span>语句最后都将转为<span lang="EN-US">SQL</span>执行，所以它的性能是非常好的（时这也正是它功能无法强大的弱点），而<span lang="EN-US">OCL</span>的语法只有部分才能转化为<span lang="EN-US">SQL</span>，因此在<span lang="EN-US">ECO</span>Ⅱ中，还有部门的<span lang="EN-US">OCL</span>操作必须针对内存对象来进行，这样也就使得必须装载大量的实体对象到内存中。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">你将选择哪种查询？<span lang="EN-US"><o:p></o:p></span></span></b> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">就我个人而言，我倾向于增强型的<span lang="EN-US">OPath</span>。毕竟更加复杂的查询我们可以通过<span lang="EN-US">view</span>和<span lang="EN-US">store procedure</span>来完成，就算<span lang="EN-US">OCL</span>再强大，也无法涵盖我们需要的查询功能，其内存对象操纵的性能问题不能不让我们谨慎使用，而<span lang="EN-US">ECO</span>Ⅱ可以算是一个<span lang="EN-US">MDA</span>的框架，这也让我对<span lang="EN-US">MDA</span>的将来感到一些担忧，除非<span lang="EN-US">ANSI SQL</span>进化到了可以更加强大的地步，各数据库本身就可以完成<span lang="EN-US">OCL</span>所需要的查询功能，但这个时候，也许<span lang="EN-US">SQL</span>的表达更加直观，那么，我们又为什么需要<span lang="EN-US">OCL</span>来查询呢。当然，<span lang="EN-US">OCL</span>在<span lang="EN-US">UML</span>中的作用我们并不否定，只是直接从模型生成代码的应用似乎只能在不太复杂的场合才生效。<span lang="EN-US"><o:p></o:p></span></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p>&#160;</o:p></span> 
</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><i style="mso-bidi-font-style: normal"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">(</span></i><i style="mso-bidi-font-style: normal"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">注：因为<span lang="EN-US">ECO</span>Ⅱ的资料很少，很多是参考它的前身<span lang="EN-US">bold for delphi</span>的语法，而<span lang="EN-US">OPath</span>的资料也少，很多都是无关痛痒的简单操作，这让人弄不明白到底是它的语法就这么简单还是另有其它的增强。<span lang="EN-US">)<o:p></o:p></span></span></i> 
</p><img src ="http://www.cnblogs.com/progame/aggbug/97473.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47998/" target="_blank">传诺基亚正在开发Android手机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>关于索引，我们可以多知道一些 -- 全表扫描和索引扫描</title><link>http://www.cnblogs.com/progame/archive/2005/01/14/91780.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Fri, 14 Jan 2005 03:40:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2005/01/14/91780.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/91780.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2005/01/14/91780.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/91780.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/91780.html</trackback:ping><description><![CDATA[<p>先建立一个简单的表结构 
<br/>
<br/>
</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #0000ff">create</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">table</span><span style="COLOR: #000000">&#160;test&#160;(a&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">&#160;,b&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">datetime</span><span style="COLOR: #000000">) 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">create</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">index</span><span style="COLOR: #000000">&#160;idx_b&#160;</span><span style="COLOR: #0000ff">on</span><span style="COLOR: #000000">&#160;test(b)</span> 
   </div>
</div>
<br/>再来点测试数据 
<br/>
<br/>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #0000ff">declare</span><span style="COLOR: #000000">&#160;@i&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">declare</span><span style="COLOR: #000000">&#160;@x&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&#160;@i&#160;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">0</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&#160;@x&#160;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">0</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&#160;(@i&#160;</span><span style="COLOR: #808080">&lt;</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1000</span><span style="COLOR: #000000">) 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">begin</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">insert</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">into</span><span style="COLOR: #000000">&#160;test&#160;</span><span style="COLOR: #0000ff">values</span><span style="COLOR: #000000">(@i,</span><span style="COLOR: #ff00ff">dateadd</span><span style="COLOR: #000000">(hour,</span><span style="COLOR: #ff00ff">rand</span><span style="COLOR: #000000">(@x)</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">10000</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff00ff">getdate</span><span style="COLOR: #000000">())) 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&#160;@x&#160;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&#160;@x&#160;</span><span style="COLOR: #808080">+</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #ff00ff">rand</span><span style="COLOR: #000000">()</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1000</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&#160;@i&#160;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&#160;@i&#160;</span><span style="COLOR: #808080">+</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">end</span> 
   </div>
</div>
<p>
<br/>这样两句查询： 
<br/>
</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #808080">a</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000">&#160;test 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000">&#160;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000">&#160;test</span> 
   </div>
</div>
<br/>可以看到前者使用全表扫描，后者使用了索引，这样一来实在是很迷惑，SQLSERVER为什么要对后者使用索引扫描呢？又没有过滤条件。 
<br/>
<br/>其实是有原因的，因为SqlServer知道后者不会取表数据，那么对于索引树的扫描将要快于表的扫描（其实事实上未必如此），因为索引树占用空间一般是要小于表数据空间的，而小的数据读取可以减小I/O读取，要知道这是最耗时的一个操作，但实际上呢，因为当前索引使用的是占数据行空间绝大多数的b字段，所以在这里，第二条语句是要慢于第一条的。 
<br/>
<br/>如果不信，那么继续，先对表加一个a字段的非聚集索引： 
<br/>
<br/>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #0000ff">create</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">index</span><span style="COLOR: #000000">&#160;idx_a&#160;</span><span style="COLOR: #0000ff">on</span><span style="COLOR: #000000">&#160;test(a)</span> 
   </div>
</div>
<br/>然后再执行上面两个查询，这次SQLSERVER很聪明地选择了占用空间更小的idx_a索引扫描来对第二句查询进行执行，但是等等，怎么还是第一个查询执行得更快？？？　其实原因很简单，对索引树的遍历比对表空间的遍历是更复杂的，因为索引树居然有中间节点来存放数据（大家看看B树的结构就明白了，SQLSERVER使用的是B－树），只有叶子节点才指向的是具体的数据（这个指向会因为有没有聚集索引而不同，这个以后会讲到），因此第一句的全表扫描要快一些，这是不是表示SQLSERVER选择了错误的扫描方式呢？非也，现在试着把数据加大到10000条，再执行，看到了吧，索引扫描是要快的（此处忽略对字段a的select操作成本，因为此成本开销实在是非常小的）。 
<br/>
<br/>再来执行两条SQL语句： 
<br/>
<br/>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000">&#160;test&#160;</span><span style="COLOR: #0000ff">where</span><span style="COLOR: #000000">&#160;b&#160;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000">&#160;test&#160;</span><span style="COLOR: #0000ff">where</span><span style="COLOR: #000000">&#160;b&#160;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #808080">not</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">null</span> 
   </div>
</div>
<br/>可以看到，这两个查询都利用了索引，在此更正我上一篇BLOG中的错误，SQLSERVER是会将NULL值存入索引树的，这和它的数据结构有关，通过NULL位图，它可以处理NULL值，而索引叶子节点中的数据存放结构和表数据行的结构是大同小异的，而Oracle是不会存放NULL到索引的。 
<br/>
<br/>好了，先吃饭了，接下来的东西以后再讲。<img src ="http://www.cnblogs.com/progame/aggbug/91780.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47996/" target="_blank">7月编程语言排行榜</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>我们需要什么样的字段类型？</title><link>http://www.cnblogs.com/progame/archive/2005/01/12/90298.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Tue, 11 Jan 2005 16:03:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2005/01/12/90298.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/90298.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2005/01/12/90298.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/90298.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/90298.html</trackback:ping><description><![CDATA[<p dir="ltr" style="MARGIN-RIGHT: 0px">　　数据库定义到char类型的字段时，不知道大家是否会犹豫一下，到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢？结果很可能是两种，一种是节俭人士的选择：最好是用定长的，感觉比变长能省些空间，而且处理起来会快些，无法定长只好选用定长，并且将长度设置尽可能地小<img height="20" src="http://www.cnblogs.com/Emoticons/QQ/bb.gif" width="20" border="0" />；另一种是则是觉得无所谓，尽量用可变类型的，长度尽量放大些<img height="20" src="http://www.cnblogs.com/Emoticons/QQ/47.gif" width="20" border="0" />。 
<br/>
<br/>　　鉴于现在硬件像萝卜一样便宜的大好形势，纠缠这样的小问题实在是没多大意义，不过如果不弄清它，总觉得对不起劳累过度的CPU和硬盘。 
<br/>
<br/>下面开始了(以下说明只针对SqlServer有效)： 
<br/>
<br/>1、当使用非unicode时慎用以下这种查询： 
<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; select f from t where f = N&#39;xx&#39; 
</p>
<p dir="ltr" style="MARGIN-RIGHT: 0px">&#160;&#160;&#160; 原因：无法利用到索引，因为数据库会将f先转换到unicode再和N&#39;xx&#39;比较 
<br/>
<br/>2、char 和相同长度的varchar处理速度差不多（后面还有说明） 
<br/>
<br/>3、varchar的长度不会影响处理速度！！！（看后面解释） 
<br/>
<br/>4、索引中列总长度最多支持总为900字节，所以长度大于900的varchar、char和大于450的nvarchar,nchar将无法创建索引 
<br/>
<br/>5、text、ntext上是无法创建索引的 
<br/>
<br/>6、O/R Mapping中对应实体的属性类型一般是以string居多，用char[]的非常少，所以如果按mapping的合理性来说，可变长度的类型更加吻合 
<br/>
<br/>7、一般基础资料表中的name在实际查询中基本上全部是使用like &#39;%xx%&#39;这种方式，而这种方式是无法利用索引的，所以如果对于此种字段，索引建了也白建 
<br/>
<br/>8、其它一些像remark的字段则是根本不需要查询的，所以不需要索引 
<br/>
<br/>9、varchar的存放和string是一样原理的，即length {block}这种方式，所以varchar的长度和它实际占用空间是无关的 
<br/>
<br/>10、对于固定长度的字段，是需要额外空间来存放NULL标识的，所以如果一个char字段中出现非常多的NULL，那么很不幸，你的占用空间比没有NULL的大（但这个大并不是大太多，因为NULL标识是用bit存放的，可是如果你一行中只有你一个NULL需要标识，那么你就白白浪费1byte空间了，罪过罪过！），这时候，你可以使用特殊标识来存放，如：&#39;NV&#39; 
<br/>
<br/>11、同上，所以对于这种NULL查询，索引是无法生效的，假如你使用了NULL标识替代的话，那么恭喜你，你可以利用到索引了 
<br/>
<br/>12、char和varchar的比较成本是一样的，现在关键就看它们的索引查找的成本了，因为查找策略都一样，因此应该比较谁占用空间小。在存放相同数量的字符情况下，如果数量小，那么char占用长度是小于varchar的，但如果数量稍大，则varchar完全可能小于char，而且要看实际填充数值的充实度，比如说varchar(3)和char(3)，那么理论上应该是char快了，但如果是char(10)和varchar(10)，充实度只有30%的情况下，理论上就应该是varchar快了。因为varchar需要额外空间存放块长度，所以只要length(1-fillfactor)大于这个存放空间（好像是2字节)，那么它就会比相同长度的char快了。 
<br/>
<br/>13、nvarchar比varchar要慢上一些，而且对于非unicode字符它会占用双倍的空间，那么这么一种类型推出来是为什么呢？对，就是为了国际化，对于unicode类型的数据，排序规则对它们是不起作用的，而非unicode字符在处理不同语言的数据时，必须指定排序规则才能正常工作，所以n类型就这么一点好处。 
<br/>
<br/>
<br/>总结陈词： 
<br/>1、如果数据量非常大，又能100%确定长度且保存只是ansi字符，那么char 
<br/>2、能确定长度又不一定是ansi字符或者，那么用nchar； 
<br/>3、不确定长度，要查询且希望利用索引的话，用nvarchar类型吧，将它们设到400； 
<br/>4、不查询的话没什么好说的，用nvarchar(4000) 
<br/>5、性格豪爽的可以只用3和4，偶尔用用1，毕竟这是一种额外说明，等于告诉别人说，我一定需要长度为X位的数据 
<br/>
<br/>这样一来，生活是不是变成美好多了？　如果还有没明白的，那么还是省点钱去买萝卜吧。<img height="18" src="http://www.cnblogs.com/Emoticons/QQ/chris.gif" width="20" border="0" /> 
<br/>
<br/>
</p><img src ="http://www.cnblogs.com/progame/aggbug/90298.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47995/" target="_blank">Google Voice 上手</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>功夫 、Persistore 及其它</title><link>http://www.cnblogs.com/progame/archive/2004/12/26/82133.html</link><dc:creator>progame</dc:creator><author>progame</author><pubDate>Sun, 26 Dec 2004 08:27:00 GMT</pubDate><guid>http://www.cnblogs.com/progame/archive/2004/12/26/82133.html</guid><wfw:comment>http://www.cnblogs.com/progame/comments/82133.html</wfw:comment><comments>http://www.cnblogs.com/progame/archive/2004/12/26/82133.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.cnblogs.com/progame/comments/commentRss/82133.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/progame/services/trackbacks/82133.html</trackback:ping><description><![CDATA[<p>　　功夫看了枪版（为自己汗颜一下，实在是等不及了，而电影院多少年没有进去了已经），然后开始在网上找相关评论，就好像是自己的东西一样，期待着人们有好的反应，结果大家也知道，毁誉参半，或者说批评还要多一些，说星爷放弃了擅长的无厘头，玩起来了特效，失去了自我。 
<br/>
<br/>　　Persistore是什么？　一个我正在开发的for .Net的O/R Mapping框架，大家可能奇怪了，现在成熟半成熟的.Net下的O/RM都已经多得让人眼花缭乱了，为什么还要自己开发一个？！　难道我这么喜欢无意义的重复开发，并且想依靠这个东西来证明自己的能力？ 
<br/>
<br/>　　再回到功夫上来，可以说，我一向欣赏的是香港电影讲故事的能力和星爷无厘头的表演，对于国产大片（以英雄、埋伏为代表）和好莱坞大片却并不感冒，因为我需要的不是视觉的冲击而是看电影时的放松和快乐，哈哈一笑，仅此而已，然而功夫在这方面带给我的这些东西非常少，可以说让我很&#8220;失望&#8221;，但是同时我们应该知道，功夫是星爷的再一次尝试，为了圆一个儿时的梦，用三年时间，换来一部风格迥异的电影，当然他自然也会从票房着想，为了国际化，更多地简化语言，强调动作。 
<br/>
<br/>　　我不喜欢功夫，但是我欣赏星爷的这种尝试和努力，同时Persistore也是我自己的尝试和努力，因为我一直以来就想开发我所希望的O/RM，.Net出现已经4年了，而我现在才正式开始进入.Net开发，然而我这个想法一直以来就没有改变过。 
<br/>
<br/>　　那么Persistore有哪些特性？它凭什么可以让我不选择其它的成熟解决方案？就像黑客帝国、指环王中的特效已经这么好了，为什么功夫还要玩特效？ 
<br/>
<br/><strong>1、纯实体类 
<br/></strong>　　这是我对自己的O/RM最重要的一个要求，纯实体类不仅轻，而且可以便于移植（有人说了，谁会去移植？！），可能是我太偏执的原因吧。 
<br/>
<br/><strong>2、自动映射 
<br/></strong>　　Persistore不需要自定义属性和XML文件的支持便可实现映射。　我们已经有了数据库模型了，我们已经有了实体类了，为什么还需要再去维护映射？！ 
<br/>
<br/><strong>3、关系维护</strong> 
<br/>　　OnetoOne、OnetoMany、ManytoMany、SelfAssociate支持，正如<A href="http://www.cnblogs.com/yyanghhong">yyanghhong</a>所说，不支持关系的O/RM还不如直接用typed-dataset. 
<br/>
<br/><strong>4、自动创建数据库结构</strong>（需要自定义属性支持） 
<br/>　　Class-&gt;Database已经成为潮流了，本来不准备支持的，但同事<A href="http://www.cnblogs.com/adambear/">AdamBear</a>说得很对，在早期的迭代式开发中，难以建立完整的数据库模型，所以实体类是优先考虑的。和其它框架不一样的是，Persistore不需要创建额外的字典信息表，同时可以在主键不改变的情况下动态添加、删除、更新字段的定义。 
<br/>
<br/><strong>5、lazy-loading</strong> 
<br/>　　在支持关系维护后，没有迟加载的话，那么对于性能就是致命的下降。Persistore可以迟加载对象属性、实体集合，并且对于迟加载的实体集合只使用一次查询完成。 
<br/>
<br/><strong>6、实体继承</strong> 
<br/>　　Persistore完全支持实体继承，可以同时支持JoinTable和UnionTable两种持久化方案，即分表保存和单表保存。 
<br/>
<br/><strong>7、对象化查询</strong> 
<br/>　　现有的O/RM中只有极少数的（如ECO）支持真正的对象化查询（即UML2.0中的OCL），hibernate的HQL实际上还是sql的变种，Dataobjects.Net里的也还是sql，不过比sql还难理解，Persistore的OCL支持同样也是有限的（扩充了函数，但减弱了集合操作，因为OCL最终将解析成SQL），它的形式如下： 
</p>
<p>　　　　Department.Employees-&gt;Sum(salary) &gt; 100</p>
<p>　　重要的是对关系的查询，而不仅仅是属性的过滤。 
<br/><strong>
<br/>8、跨数据库平台和SqlBroker</strong> 
<br/>　　从一开始，Persistore的设计就是要支持多数据库平台的，各大数据库厂商对标准SQL的支持越来越好，同时标准SQL本身的功能也在增强，这使得平台无关的SQL语句已经可以完成绝大多数功能。通过Persistore执行的sql只能是被其支持的标准SQL。 
<br/>
<br/><strong>9、View、Store Procedure支持 
<br/></strong>　　这是一个数据库应用程序必不可少的，同时弥补上面SqlBroker的不足。 
<br/>
<br/><strong>10、其它特性</strong> 
<br/>　　Criteria查询构造、NULL处理、事务支持（transaction和savepoint）、不完全实体对象查询、多种&quot;脏&quot;标志获取方法（default value、snapshot value、dynamic proxy）、延迟更新和批量更新。。。 
</p>
<p>
<br/><strong>还需要多久？ 
<br/>
<br/></strong>　　目前差的是OCL和ANSISQL的解析(语法分析已经完成)、Store Procedure的封装以及最重要的实体类自动生成工具(CodeDG已经够灵活了，但它还不能提供Persistore最需要的外键约束信息) 
<br/>
<br/>
</p>
<p><strong>如何使用？ 
<br/></strong>
<br/>　　一个简单的例子： 
<br/>
</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
   <div><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /><span style="COLOR: #000000">&#160;Session&#160;s&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&#160;Session(DB.CONNECTSTRING); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Address&#160;a1&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&#160;Address(); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;a1.id&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">001</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;a1.street&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">any</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Class&#160;c1&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&#160;Class(); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;c1.id&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">01</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;c1.name&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">grade1</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Student&#160;s1&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&#160;Student(); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s1.Class&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;c1; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s1.address&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;a1; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s1.id&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s1.name&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">progame</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Assert.IsTrue(s.Save(s1)); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Student&#160;s2&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;(Student)s.Load(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(Student),&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Assert.AreEqual(s1.name,&#160;s2.name); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Assert.AreEqual(s1.Class.name,&#160;s2.Class.name); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Assert.AreEqual(s1.address.street,&#160;a1.street); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /> 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;Student&#160;s3&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&#160;Student(); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s3.id&#160;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">; 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" />&#160;s.Load(s3); 
<br/><img height="16" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" width="11" align="top" /></span> 
   </div>
</div>
<p>
<br/>　　 
<br/><strong>最后说点什么 
<br/></strong>
<br/>　　写代码真的好累，有时候真的不想写了，但想想星爷，想想功夫，即使做出一个被人批评的东西，但至少事后我可以无悔地说：我做过了！ 
<br/>　　 
</p>
<p>　　</p><img src ="http://www.cnblogs.com/progame/aggbug/82133.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47994/" target="_blank">Google号召社区力量为互联网加速</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>