﻿<?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>BlogJava-semovy-文章分类-数据库方面</title><link>http://www.blogjava.net/WshmAndLily/category/9419.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 07 May 2008 11:58:42 GMT</lastBuildDate><pubDate>Wed, 07 May 2008 11:58:42 GMT</pubDate><ttl>60</ttl><item><title>数据库设计范式</title><link>http://www.blogjava.net/WshmAndLily/articles/198746.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Tue, 06 May 2008 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/198746.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/198746.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/198746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/198746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/198746.html</trackback:ping><description><![CDATA[关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式。现简单介绍1NF（第一范式），2NF（第二范式），3NF（第三范式）和BCNF，另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时，若能符合这几个范式，你就是数据库设计的高手。 <br />
<br />
第一范式（1NF）：在关系模式R中的每一个具体关系r中，如果每个属性值 都是不可再分的最小数据单位，则称R是第一范式的关系。<br />
<br />
例：如职工号，姓名，电话号码组成一个表（一个人可能有一个办公室电话 和一个家里电话号码） 规范成为1NF有三种方法： <br />
一是重复存储职工号和姓名。这样，关键字只能是电话号码。 <br />
二是职工号为关键字，电话号码分为单位电话和住宅电话两个属性 <br />
三是职工号为关键字，但强制每条记录只能有一个电话号码。 <br />
以上三个方法，第一种方法最不可取，按实际情况选取后两种情况。 <br />
<br />
第二范式（2NF）：如果关系模式R（U，F）中的所有非主属性都完全依赖于任意一个候选关键字，则称关系R 是属于第二范式的。 <br />
<br />
例：选课关系 SCI（SNO，CNO，GRADE，CREDIT）其中SNO为学号， CNO为课程号，GRADE 为成绩，CREDIT 为学分。 由以上条件，关键字为组合关键字（SNO，CNO） <br />
在应用中使用以上关系模式有以下问题： <br />
a.数据冗余，假设同一门课由40个学生选修，学分就重复40次。 <br />
b.更新异常，若调整了某课程的学分，相应的元组CREDIT值都要更新，有可能会出现同一门课学分不同。 <br />
c.插入异常，如计划开新课，由于没人选修，没有学号关键字，只能等有人选修才能把课程和学分存入。 <br />
d.删除异常，若学生已经结业，从当前数据库删除选修记录。某些门课程新生尚未选修，则此门课程及学分记录无法保存。 <br />
原因：非关键字属性CREDIT仅函数依赖于CNO，也就是CREDIT部分依赖组合关键字（SNO，CNO）而不是完全依赖。 <br />
解决方法：分成两个关系模式 SC1（SNO，CNO，GRADE），C2（CNO，CREDIT）。新关系包括两个关系模式，它们之间通过SC1中的外关键字CNO相联系，需要时再进行自然联接，恢复了原来的关系 <br />
<br />
第三范式（3NF）：如果关系模式R（U，F）中的所有非主属性对任何候选关键字都不存在传递信赖，则称关系R是属于第三范式的。 <br />
<br />
例：如S1（SNO，SNAME，DNO，DNAME，LOCATION） 各属性分别代表学号， <br />
姓名，所在系，系名称，系地址。 <br />
关键字SNO决定各个属性。由于是单个关键字，没有部分依赖的问题，肯定是2NF。但这关系肯定有大量的冗余，有关学生所在的几个属性DNO，DNAME，LOCATION将重复存储，插入，删除和修改时也将产生类似以上例的情况。 <br />
原因：关系中存在传递依赖造成的。即SNO -&gt; DNO。 而DNO -&gt; SNO却不存在，DNO -&gt; LOCATION, 因此关键字 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -&gt; LOCATION 实现的。也就是说，SNO不直接决定非主属性LOCATION。 <br />
解决目地：每个关系模式中不能留有传递依赖。 <br />
解决方法：分为两个关系 S（SNO，SNAME，DNO），D（DNO，DNAME，LOCATION） <br />
注意：关系S中不能没有外关键字DNO。否则两个关系之间失去联系。<br />
<br />
BCNF：如果关系模式R（U，F）的所有属性（包括主属性和非主属性）都不传递依赖于R的任何候选关键字，那么称关系R是属于BCNF的。或是关系模式R，如果每个决定因素都包含关键字（而不是被关键字所包含），则RCNF的关系模式。 <br />
<br />
例：配件管理关系模式 WPE（WNO，PNO，ENO，QNT）分别表示仓库号，配件号，职工号，数量。有以下条件 <br />
a.一个仓库有多个职工。 <br />
b.一个职工仅在一个仓库工作。 <br />
c.每个仓库里一种型号的配件由专人负责，但一个人可以管理几种配件。 <br />
d.同一种型号的配件可以分放在几个仓库中。 <br />
分析：由以上得 PNO 不能确定QNT，由组合属性（WNO，PNO）来决定，存在函数依赖（WNO，PNO） -&gt; ENO。由于每个仓库里的一种配件由专人负责，而一个人可以管理几种配件，所以有组合属性（WNO，PNO）才能确定负责人，有（WNO，PNO）- &gt; ENO。因为一个职工仅在一个仓库工作，有ENO -&gt; WNO。由于每个仓库里的一种配件由专人负责，而一个职工仅在一个仓库工作，有 （ENO，PNO）-&gt; QNT。 <br />
找一下候选关键字， 因为（WNO，PNO） -&gt; QNT，（WNO，PNO）-&gt; ENO ，因此 （WNO，PNO）可以决定整个元组，是一个候选关键字。根据ENO-&gt;WNO，（ENO，PNO）-&gt;QNT，故（ENO，PNO）也能决 定整个元组，为另一个候选关键字。属性ENO，WNO，PNO 均为主属性，只有一个非主属性QNT。它对任何一个候选关键字都是完全函数依赖的，并且是直接依赖，所以该关系模式是3NF。 <br />
分析一下主属 性。因为ENO-&gt;WNO，主属性ENO是WNO的决定因素，但是它本身不是关键字，只是组合关键字的一部分。这就造成主属性WNO对另外一个候选 关键字（ENO，PNO）的部分依赖，因为（ENO，PNO）-&gt; ENO但反过来不成立，而ENO-&gt;WNO，故（ENO，PNO）-&gt; WNO 也是传递依赖。 <br />
虽然没有非主属性对候选关键子的传递依赖，但存在主属性对候选关键字的传递依赖，同样也会带来麻烦。如一个新职工分配到仓库工作，但暂时处于实习阶段，没有独立负责对某些配件的管理任务。由于缺少关键字的一部分PNO而无法插入到该关系中去。又如某个人改成不管配件了去负责安全，则在删除配件的同时该职工也会被删除。 <br />
解决办法：分成管理EP（ENO，PNO，QNT），关键字是（ENO，PNO）工作EW（ENO，WNO）其关键字是ENO <br />
缺点：分解后函数依赖的保持性较差。如此例中，由于分解,函数依赖（WNO，PNO）-&gt; ENO 丢失了, 因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现一部件由两个人或两个以上的人来同时管理。因此，分解之后的关系模式降低了部分完整性约束。 <br />
<br />
一个关系分解成多个关系，要使得分解有意义，起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据本身，而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度，但是分解的同时必须考虑两个问题：无损联接性和保持函数依赖。有时往往不可能做到既有无损联接性，又完全保持函数依赖。需要根据需要进行权衡。 <br />
<br />
1NF直到BCNF的四种范式之间有如下关系： <br />
BCNF包含了3NF包含2NF包含1NF <br />
<br />
小结： <br />
目地：规范化目的是使结构更合理，消除存储异常，使数据冗余尽量小，便于插入、删除和更新 <br />
原则：遵从概念单一化 "一事一地"原则，即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。 <br />
方法：将关系模式投影分解成两个或两个以上的关系模式。 <br />
要求：分解后的关系模式集合应当与原关系模式"等价"，即经过自然联接可以恢复原关系而不丢失信息，并保持属性间合理的联系。 <br />
<br />
注意：一个关系模式结这分解可以得到不同关系模式集合，也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间，避免数据不一致性，提高对关系的操作效率，同时满足应用需求。实际上，并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高，查询频度极高的数据库系统更是如此。 <br />
<br />
在关系数据库中，除了函数依赖之外还有多值依赖，联接依赖的问题，从而提出了第四范式，第五范式等更高一级的规范化要求。在此，以后再谈。<br />
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/198746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-05-06 16:59 <a href="http://www.blogjava.net/WshmAndLily/articles/198746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java连接池</title><link>http://www.blogjava.net/WshmAndLily/articles/195374.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 24 Apr 2008 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/195374.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/195374.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/195374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/195374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/195374.html</trackback:ping><description><![CDATA[连接池的基本工作原理
<p>　　1、基本概念及原理</p>
<p>　　由上面的分析可以看出，问题的根源就在于对数据库连接资源的低效管理。我们知道，对于共享资源，有一个很著名的设计模式：资源池(Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题，可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个&#8220;缓冲池&#8221;。预先在缓冲池中放入一定数量的连接，当需要建立数据库连接时，只需从&#8220;缓冲池&#8221;中取出一个，使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况，为系统开发?测试及性能调整提供依据。</p>
<p>　　2、服务器自带的连接池</p>
<p>　　JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制，但是必须有其第三方的专用类方法支持连接池的用法。</p>
<p>　　连接池关键问题分析</p>
<p>　　1、并发问题</p>
<p>　　为了使连接管理服务具有最大的通用性，必须考虑多线程环境，即并发问题。这个问题相对比较好解决，因为Java语言自身提供了对并发管理的支持，使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字，如：</p>
<p>　　public synchronized Connection getConnection()</p>
<p>　　2、多数据库服务器和多用户</p>
<p>　　对于大型的企业级应用，常常需要同时连接不同的数据库(如连接Oracle和Sybase)。如何连接不同的数据库呢?我们采用的策略是：设计一个符合单例模式的连接池管理类，在连接池管理类的唯一实例被创建时读取一个资源文件，其中资源文件中存放着多个数据库的url地址()?用户名()?密码()等信息。如tx.url=172.21.15.123：5000/tx_it，tx.user=yang，tx.password=yang321。根据资源文件提供的信息，创建多个连接池类的实例，每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字，通过不同的名字来管理不同的连接池。</p>
<p>　　对于同一个数据库有多个用户使用不同的名称和密码访问的情况，也可以通过资源文件处理，即在资源文件中设置多个具有相同url地址，但具有不同用户名和密码的数据库连接信息。</p>
<p>　　3、事务处理</p>
<p>　　我们知道，事务具有原子性，此时要求对数据库的操作符合&#8220;ALL-ALL-NOTHING&#8221;原则,即对于一组SQL语句要么全做，要么全不做。</p>
<p>　　在Java语言中，Connection类本身提供了对事务的支持，可以通过设置Connection的AutoCommit属性为false,然后显式的调用commit或rollback方法来实现。但要高效的进行Connection复用，就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现，这种方法可以大大降低事务管理的复杂性。</p>
<p>　　4、连接池的分配与释放</p>
<p>　　连接池的分配与释放，对系统的性能有很大的影响。合理的分配与释放，可以提高连接的复用度，从而降低建立新连接的开销，同时还可以加快用户的访问速度。</p>
<p>　　对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时，系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断，如果可用就分配给用户，如不可用就把这个连接从空闲池删掉，重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到，就新建一个连接，如果已经达到，就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户，如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数，当使用完后再返还给空闲池。对于空闲连接的状态，可开辟专门的线程定时检测，这样会花费一定的系统开销，但可以保证较快的响应速度。也可采取不开辟专门线程，只是在分配前检测的方法。</p>
<p>　　5、连接池的配置与维护</p>
<p>　　连接池中到底应该放置多少连接，才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多，则系统启动就慢，但创建后系统的响应速度会很快;如果创建过少，则系统启动的很快，响应起来却慢。这样，可以在开发时，设置较小的最小连接数，开发起来会快，而在系统实际使用时设置较大的，因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目，具体设置多少，要看系统的访问量，可通过反复测试，找到最佳点。</p>
<p>　　如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测，如果发现连接数量小于最小连接数，则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。</p>
<p>　　连接池的实现</p>
<p>　　1、连接池模型</p>
<p>　　本文讨论的连接池包括一个连接池类(DBConnectionPool)和一个连接池管理类(DBConnetionPoolManager)。连接池类是对某一数据库所有连接的&#8220;缓冲池&#8221;，主要实现以下功能：①从连接池获取或创建可用连接;②使用完毕之后，把连接返还给连接池;③在系统关闭前，断开所有连接并释放连接占用的系统资源;④还能够处理无效连接(原来登记为可用的连接，由于某种原因不再可用，如超时，通讯问题)，并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值。</p>
<p>　　连接池管理类是连接池类的外覆类(wrapper),符合单例模式，即系统中只能有一个连接池管理类的实例。其主要用于对多个连接池对象的管理，具有以下功能：①装载并注册特定数据库的JDBC驱动程序;②根据属性文件给定的信息，创建连接池对象;③为方便管理多个连接池对象，为每一个连接池对象取一个名字，实现连接池名字与其实例之间的映射;④跟踪客户使用连接情况，以便需要是关闭连接释放资源。连接池管理类的引入主要是为了方便对多个连接池的使用和管理，如系统需要连接不同的数据库，或连接相同的数据库但由于安全性问题，需要不同的用户使用不同的名称和密码。</p>
<p>　　2、连接池实现</p>
<p>　　下面给出连接池类和连接池管理类的主要属性及所要实现的基本接口：</p>
<p>　　public class DBConnectionPool implements TimerListener{</p>
<p>　　private int checkedOut;//已被分配出去的连接数</p>
<p>　　private ArrayList freeConnections=new ArrayList();</p>
<p>　　//容器，空闲池，根据//创建时间顺序存放已创建但尚未分配出去的连接</p>
<p>　　private int minConn;//连接池里连接的最小数量</p>
<p>　　private int maxConn;//连接池里允许存在的最大连接数</p>
<p>　　private String name;//为这个连接池取个名字，方便管理</p>
<p>　　private String password;//连接数据库时需要的密码</p>
<p>　　private String url;//所要创建连接的数据库的地址</p>
<p>　　private String user;//连接数据库时需要的用户名</p>
<p>　　public Timer timer;//定时器</p>
<p>　　public DBConnectionPool(String name,String URL,String user,</p>
<p>　　String password,int maxConn)//公开的构造函数</p>
<p>　　public synchronized void freeConnection(Connection con)</p>
<p>　　//使用完毕之后，把连接返还给空闲池</p>
<p>　　public synchronized Connection getConnection(long timeout)</p>
<p>　　//得到一个连接，timeout是等待时间</p>
<p>　　public synchronized void release()</p>
<p>　　//断开所有连接，释放占用的系统资源</p>
<p>　　private Connection newConnection()</p>
<p>　　//新建一个数据库连接</p>
<p>　　public synchronized void TimerEvent()</p>
<p>　　//定时器事件处理函数</p>
<p>　　}</p>
<p>　　public class DBConnectionManager {</p>
<p>　　static private DBConnectionManager instance;</p>
<p>　　//连接池管理类的唯一实例</p>
<p>　　static private int clients;//客户数量</p>
<p>　　private ArrayList drivers=new ArrayList();</p>
<p>　　//容器，存放数据库驱动程序</p>
<p>　　private HashMap pools = new HashMap();</p>
<p>　　//以name/value的形式存取连接池对象的名字及连接池对象</p>
<p>　　static synchronized public DBConnectionManager getInstance()</p>
<p>　　/**如果唯一的实例instance已经创建，直接返回这个实例;否则，调用私有构造函数，</p>
<p>　　创建连接池管理类的唯一实例*/</p>
<p>　　private DBConnectionManager()</p>
<p>　　//私有构造函数,在其中调用初始化函数init()</p>
<p>　　public void freeConnection(String name,Connection con)</p>
<p>　　//释放一个连接，name是一个连接池对象的名字</p>
<p>　　public Connection getConnection(String name)</p>
<p>　　//从名字为name的连接池对象中得到一个连接</p>
<p>　　public Connection getConnection(String name,long time)</p>
<p>　　//从名字为name的连接池对象中取得一个连接，time是等待时间</p>
<p>　　public synchronized void release()//释放所有资源</p>
<p>　　private void createPools(Properties props)</p>
<p>　　//根据属性文件提供的信息，创建一个或多个连接池</p>
<p>　　private void init()//初始化连接池管理类的唯一实例，由私有构造函数调用</p>
<p>　　private void loadDrivers(Properties props)//装载数据库驱动程序</p>
<p>　　}</p>
<p>　　3、连接池使用</p>
<p>　　上面所实现的连接池在程序开发时如何应用到系统中呢?下面以Servlet为例说明连接池的使用。</p>
<p>　　Servlet的生命周期是：在开始建立servlet时，调用其初始化(init)方法。之后每个用户请求都导致一个调用前面建立的实例的service方法的线程。最后，当服务器决定卸载一个servlet时，它首先调用该servlet的destroy方法。</p>
<p>　　根据servlet的特点，我们可以在初始化函数中生成连接池管理类的唯一实例(其中包括创建一个或多个连接池)。如：</p>
<p>　　public void init() throws ServletException</p>
<p>　　{</p>
<p>　　connMgr=DBConnectionManager.getInstance();</p>
<p>　　}</p>
<p>　　然后就可以在service方法中通过连接池名称使用连接池，执行数据库操作。最后在destroy方法中释放占用的系统资源，如：</p>
<p>　　public void destroy(){</p>
<p>　　connMgr.release();</p>
<p>　　super.destroy();</p>
<p>　　}</p>
<p>　　结束语</p>
<p>　　在使用JDBC进行与数据库有关的应用开发中，数据库连接的管理是一个难点。很多时候，连接的混乱管理所造成的系统资源开销过大成为制约大型企业级应用效率的瓶颈。对于众多用户访问的Web应用，采用数据库连接技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。本文阐述了使用JDBC访问数据库的技术?讨论了基于连接池技术的数据库连接管理的关键问题并给出了一个实现模型。文章所给出的是连接池管理程序的一种基本模式，为提高系统的整体性能，在此基础上还可以进行很多有意义的扩展。</p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/195374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-04-24 09:35 <a href="http://www.blogjava.net/WshmAndLily/articles/195374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL-92</title><link>http://www.blogjava.net/WshmAndLily/articles/186021.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 13 Mar 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/186021.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/186021.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/186021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/186021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/186021.html</trackback:ping><description><![CDATA[SQL-92(Strutured Query Language)<br />
1.数据查询语言.DQL select 最常用,最灵活.<br />
2.数据定义语言.DDL create drop<br />
3.事务控制语言.TCL commit rollback savepoint.<br />
4.数据控制语言.DCL grant revoke.<br />
5.数据操纵语言.DML update insert delete
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/186021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-03-13 14:03 <a href="http://www.blogjava.net/WshmAndLily/articles/186021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据挖掘</title><link>http://www.blogjava.net/WshmAndLily/articles/152167.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Thu, 11 Oct 2007 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/152167.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/152167.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/152167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/152167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/152167.html</trackback:ping><description><![CDATA[<span class="Tit"><br />
<strong>什么是数据挖掘</strong><br />
<br />
&nbsp; &nbsp; 数据挖掘(Data Mining)，又称为数据库中的知识发现(Knowledge Discovery in Database, KDD)，就是从大量数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程，简单的说，数据挖掘就是从大量数据中提取或&#8220;挖掘&#8221;知识。 <br />
<br />
&nbsp; &nbsp; 并非所有的信息发现任务都被视为数据挖掘。例如，使用数据库管理系统查找个别的记录，或通过因特网的搜索引擎查找特定的Web页面，则是信息检索（information retrieval）领域的任务。虽然这些任务是重要的，可能涉及使用复杂的算法和数据结构，但是它们主要依赖传统的计算机科学技术和数据的明显特征来创建索引结构，从而有效地组织和检索信息。尽管如此，数据挖掘技术也已用来增强信息检索系统的能力。<br />
<br />
<strong>数据挖掘的起源</strong><br />
<br />
&nbsp; &nbsp; 为迎接前一节中的这些挑战，来自不同学科的研究者汇集到一起，开始着手开发可以处理不同数据类型的更有效的、可伸缩的工具。这些工作建立在研究者先前使用的方法学和算法之上，在数据挖掘领域达到高潮。特别地，数据挖掘利用了来自如下一些领域的思想：(1) 来自统计学的抽样、估计和假设检验，(2) 人工智能、模式识别和机器学习的搜索算法、建模技术和学习理论。数据挖掘也迅速地接纳了来自其他领域的思想，这些领域包括最优化、进化计算、信息论、信号处理、可视化和信息检索。<br />
<br />
&nbsp; &nbsp; 一些其他领域也起到重要的支撑作用。特别地，需要数据库系统提供有效的存储、索引和查询处理支持。源于高性能（并行）计算的技术在处理海量数据集方面常常是重要的。分布式技术也能帮助处理海量数据，并且当数据不能集中到一起处理时更是至关重要。<br />
<br />
<strong>数据挖掘能做什么</strong><br />
<br />
1)数据挖掘能做以下六种不同事情（分析方法）： <br />
<br />
&#183; 分类 （Classification） <br />
&#183; 估值（Estimation）<br />
&#183; 预言（Prediction） <br />
&#183; 相关性分组或关联规则（Affinity grouping or association rules） <br />
&#183; 聚集（Clustering） <br />
&#183; 描述和可视化（Des cription and Visualization） <br />
&#183; 复杂数据类型挖掘(Text, Web ,图形图像，视频，音频等)<br />
<br />
2)数据挖掘分类 <br />
<br />
&nbsp; &nbsp; 以上六种数据挖掘的分析方法可以分为两类：直接数据挖掘；间接数据挖掘 <br />
<br />
&#183; 直接数据挖掘 <br />
&nbsp; &nbsp; 目标是利用可用的数据建立一个模型，这个模型对剩余的数据，对一个特定的变量（可以理解成数据库中表的属性，即列）进行描述。 <br />
<br />
&#183; 间接数据挖掘 <br />
&nbsp; &nbsp;目标中没有选出某一具体的变量，用模型进行描述；而是在所有的变量中建立起某种关系 。<br />
<br />
&#183; 分类、估值、预言属于直接数据挖掘；后三种属于间接数据挖掘 <br />
<br />
3)各种分析方法的简介 <br />
<br />
&#183; 分类 （Classification） <br />
<br />
&nbsp; &nbsp; 首先从数据中选出已经分好类的训练集，在该训练集上运用数据挖掘分类的技术，建立分类模型，对于没有分类的数据进行分类。<br />
例子：<br />
a. 信用卡申请者，分类为低、中、高风险 <br />
b. 分配客户到预先定义的客户分片 <br />
注意： 类的个数是确定的，预先定义好的 <br />
<br />
&#183; 估值（Estimation） <br />
<br />
&nbsp; &nbsp;估值与分类类似，不同之处在于，分类描述的是离散型变量的输出，而估值处理连续值的输出；分类的类别是确定数目的，估值的量是不确定的。<br />
例子： <br />
a. 根据购买模式，估计一个家庭的孩子个数 <br />
b. 根据购买模式，估计一个家庭的收入 <br />
c. 估计real estate的价值 <br />
&nbsp; &nbsp; 一般来说，估值可以作为分类的前一步工作。给定一些输入数据，通过估值，得到未知的连续变量的值，然后，根据预先设定的阈值，进行分类。例如：银行对家庭贷款业务，运用估值，给各个客户记分（Score 0~1）。然后，根据阈值，将贷款级别分类。 <br />
<br />
&#183; 预言（Prediction） <br />
<br />
&nbsp; &nbsp; 通常，预言是通过分类或估值起作用的，也就是说，通过分类或估值得出模型，该模型用于对未知变量的预言。从这种意义上说，预言其实没有必要分为一个单独的类。预言其目的是对未来未知变量的预测，这种预测是需要时间来验证的，即必须经过一定时间后，才知道预言准确性是多少。<br />
<br />
&#183; 相关性分组或关联规则（Affinity grouping or association rules） <br />
<br />
&nbsp; &nbsp; 决定哪些事情将一起发生。 <br />
例子：<br />
a. 超市中客户在购买A的同时，经常会购买B，即A =&gt; B(关联规则) <br />
b. 客户在购买A后，隔一段时间，会购买B （序列分析） <br />
<br />
&#183; 聚集（Clustering） <br />
<br />
&nbsp; &nbsp; 聚集是对记录分组，把相似的记录在一个聚集里。聚集和分类的区别是聚集不依赖于预先定义好的类，不需要训练集。 <br />
例子：<br />
a. 一些特定症状的聚集可能预示了一个特定的疾病<br />
b. 租VCD类型不相似的客户聚集，可能暗示成员属于不同的亚文化群 <br />
&nbsp; &nbsp; 聚集通常作为数据挖掘的第一步。例如，"哪一种类的促销对客户响应最好？"，对于这一 类问题，首先对整个客户做聚集，将客户分组在各自的聚集里，然后对每个不同的聚集，回答问题，可能效果更好。 <br />
<br />
&#183; 描述和可视化（Des cription and Visualization）<br />
&nbsp; &nbsp; 是对数据挖掘结果的表示方式。 <br />
<br />
<strong>数据挖掘的商业背景</strong> <br />
<br />
&nbsp; &nbsp; 数据挖掘首先是需要商业环境中收集了大量的数据，然后要求挖掘的知识是有价值的。有 价值对商业而言，不外乎三种情况：降低开销；提高收入；增加股票价格。<br />
<br />
<strong>数据挖掘技术实现</strong><br />
<br />
&nbsp; &nbsp; 在技术上可以根据它的工作过程分为：数据的抽取、数据的存储和管理、数据的展现等关键技术。 <br />
<br />
　　&#183;数据的抽取 <br />
<br />
　　数据的抽取是数据进入仓库的入口。由于数据仓库是一个独立的数据环境，它需要通过抽取过程将数据从联机事务处理系统、外部数据源、脱机的数据存储介质中导入数据仓库。数据抽取在技术上主要涉及互连、复制、增量、转换、调度和监控等几个方面的处理。在数据抽取方面，未来的技术发展将集中在系统功能集成化方面，以适应数据仓库本身或数据源的变化，使系统更便于管理和维护。 <br />
<br />
　　&#183;数据的存储和管理 <br />
<br />
　　数据仓库的组织管理方式决定了它有别于传统数据库的特性，也决定了其对外部数据的表现形式。数据仓库管理所涉及的数据量比传统事务处理大得多，且随时间的推移而快速累积。在数据仓库的数据存储和管理中需要解决的是如何管理大量的数据、如何并行处理大量的数据、如何优化查询等。目前，许多数据库厂家提供的技术解决方案是扩展关系型数据库的功能，将普通关系数据库改造成适合担当数据仓库的服务器。 <br />
<br />
　　&#183;数据的展现 <br />
<br />
　　在数据展现方面主要的方式有： <br />
<br />
　　查询：实现预定义查询、动态查询、OLAP查询与决策支持智能查询；报表：产生关系数据表格、复杂表格、OLAP表格、报告以及各种综合报表；可视化：用易于理解的点线图、直方图、饼图、网状图、交互式可视化、动态模拟、计算机动画技术表现复杂数据及其相互关系；统计：进行平均值、最大值、最小值、期望、方差、汇总、排序等各种统计分析；挖掘：利用数据挖掘等方法，从数据中得到关于数据关系和模式的知识。 <br />
<br />
　　<br />
<strong>数据挖掘与数据仓库融合发展</strong><br />
<br />
<br />
　　数据挖掘和数据仓库的协同工作，一方面，可以迎合和简化数据挖掘过程中的重要步骤，提高数据挖掘的效率和能力，确保数据挖掘中数据来源的广泛性和完整性。另一方面，数据挖掘技术已经成为数据仓库应用中极为重要和相对独立的方面和工具。 <br />
<br />
　　数据挖掘和数据仓库是融合与互动发展的，其学术研究价值和应用研究前景将是令人振奋的。它是数据挖掘专家、数据仓库技术人员和行业专家共同努力的成果，更是广大渴望从数据库&#8220;奴隶&#8221;到数据库&#8220;主人&#8221;转变的企业最终用户的通途。<br />
</span>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/152167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-10-11 22:44 <a href="http://www.blogjava.net/WshmAndLily/articles/152167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>collate chinese_prc_ci_as </title><link>http://www.blogjava.net/WshmAndLily/articles/134370.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sat, 04 Aug 2007 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/134370.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/134370.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/134370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/134370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/134370.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>我们在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">create table</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>时经常会碰到这样的语句，例如：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: Verdana">CityName nvarchar(10)collate chinese_prc_ci_as null</span><font face=宋体><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，那它到底是什么意思呢？不妨看看下面：</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>首先，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">collate</span><font face=宋体><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是一个子句，可应用于数据库定义或列定义以定义排序规则，或应用于字符串表达式以应用排序规则投影。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>语法是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">collate collation_name</span></p>
<p><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">collation_name<collate_name></collate_name><collation_name></collation_name> </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>：：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">={windows_collation_name}|{sql_collation_name}</span></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>参数</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">collate_name</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是应用于表达式、列定义或数据库定义的排序规则的名称。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">collation_name </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>可以只是指定的</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows_collation_name </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>或</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> SQL_collation_name</span><font face=宋体><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Windows_collation_name </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则的排序规则名称。参见</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Windows </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则名称。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br>SQL_collation_name </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> SQL </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则的排序规则名称。参见</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> SQL </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则名称。</font></span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">&nbsp;</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></p>
<p><span style="FONT-SIZE: 10pt; COLOR: red; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>下面简单介绍一下</font></span><font face=宋体><span style="FONT-SIZE: 10pt; COLOR: red; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">排序规则：</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>什么叫排序规则呢？</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">MS</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是这样描述的：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">"</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>在</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> Microsoft SQL Server 2000 </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>中，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>字符串的<a href="http://www.itfensi.com/doc/nature" target=_blank><u><font color=#0000ff>物理</font></u></a>存储由排序规则控制。排序规则指定表示每个字符的位模式以及存</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>储和比较字符所使用的规则。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">"<br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　<span style="COLOR: red">在查询分析器内执行下面语句，可以得到</span></font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: Verdana">SQL</span><span style="FONT-SIZE: 9pt; COLOR: red; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: Verdana">SERVER</span><font face=宋体><span style="FONT-SIZE: 9pt; COLOR: red; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">支持的所有排序规则。</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span style="FONT-SIZE: 9pt; COLOR: red; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: Verdana">select * from ::fn_helpcollations() </span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则名称由两部份构成，前半部份是指本排序规则所支持的字符集。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>如：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Chinese_PRC_CS_AI_WS <br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>前半部份：指</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">UNICODE</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>字符集，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">Chinese_PRC_</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>指针对大陆简体字</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">UNICODE</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>的排序规则。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>排序规则的后半部份即后缀</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>含义：</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">_BIN </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>二进制排序</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> <br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">_CI(CS) </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是否区分大小写，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">CI</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>不区分，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">CS</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">_AI(AS) </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是否区分重音，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">AI</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>不区分，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">AS</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分　　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>　　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">_KI(KS) </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是否区分假名类型</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">,KI</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>不区分，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">KS</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分　</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br>&nbsp;&nbsp;&nbsp; _WI(WS) </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>是否区分宽度</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"> WI</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>不区分，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WS</span><font face=宋体><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">区分　</span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"></span></font></p>
<p><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分大小写</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">:</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>如果想让比较将大写字母和小写字母视为不等，请选择该选项。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分重音</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">:</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>如果想让比较将重音和非重音字母视为不等，请选择该选项。如果选择该选项，</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>比较还将重音不同的字母视为不等。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分假名</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">:</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>如果想让比较将片假名和平假名日语音节视为不等，请选择该选项。</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana"><br></span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>区分宽度</font></span><span lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">:</span><span style="FONT-SIZE: 9pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=宋体>如果想让比较将半角字符和全角字符视为不等，请选择该选项</font></span></p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/134370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-08-04 08:59 <a href="http://www.blogjava.net/WshmAndLily/articles/134370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MS SQLServer 与 Oracle分页的sql语句</title><link>http://www.blogjava.net/WshmAndLily/articles/131784.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 23 Jul 2007 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/131784.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/131784.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/131784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/131784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/131784.html</trackback:ping><description><![CDATA[select &nbsp; * &nbsp; from &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select &nbsp; top(pagesize) &nbsp; * &nbsp; from &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select &nbsp; top &nbsp; (pagesize &nbsp; * &nbsp; pageindex) &nbsp; * &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from &nbsp; articles &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order &nbsp; by &nbsp; id &nbsp; desc &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; order &nbsp; by &nbsp; id &nbsp; asc &nbsp; &nbsp; <br>&nbsp; ) &nbsp; &nbsp; <br>&nbsp; order &nbsp; by &nbsp; id &nbsp; desc &nbsp; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; oracle: &nbsp; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; select &nbsp; * &nbsp; from &nbsp; ( &nbsp; &nbsp; <br>&nbsp; &nbsp; select &nbsp; rownum &nbsp; num,t1.* &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; from &nbsp; table &nbsp; t1 &nbsp; where &nbsp; fast=0 &nbsp; &nbsp; <br>&nbsp; ) &nbsp; where &nbsp; num&gt;=intposition &nbsp; and &nbsp; num&lt;=intendposition
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/131784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-07-23 08:47 <a href="http://www.blogjava.net/WshmAndLily/articles/131784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inner join , left  join /left outer join,right  join/right outer join</title><link>http://www.blogjava.net/WshmAndLily/articles/128476.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 06 Jul 2007 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/128476.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/128476.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/128476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/128476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/128476.html</trackback:ping><description><![CDATA[给个通俗的解释吧. <br>例表a <br>aid adate <br>1 a1 <br>2 a2 <br>3 a3 <br>表b <br>bid bdate <br>1 b1 <br>2 b2 <br>4 b4 <br>两个表a,b相连接,要取出id相同的字段 <br>select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据. <br>此时的取出的是: <br>1 a1 b1 <br>2 a2 b2 <br>那么left join 指: <br>select * from a left join b on a.aid = b.bid <br>首先取出a表中所有数据,然后再加上与a,b匹配的的数据 <br>此时的取出的是: <br>1 a1 b1 <br>2 a2 b2 <br>3 a3 空字符 <br>同样的也有right join <br>指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 <br>此时的取出的是: <br>1 a1 b1 <br>2 a2 b2 <br>4 空字符 b4
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/128476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-07-06 08:42 <a href="http://www.blogjava.net/WshmAndLily/articles/128476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Access日期比较</title><link>http://www.blogjava.net/WshmAndLily/articles/116147.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 09 May 2007 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/116147.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/116147.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/116147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/116147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/116147.html</trackback:ping><description><![CDATA[datediff('d','" + StartDateTimePicker-&gt;Date.DateString() + "',format(CHECKTIME,'YYYY-MM-DD'))&gt;=0 <br><br>datediff('d','2007-2-9',format(datetime,'YYYY-MM-DD'))&gt;0<br>是'2007-2-9'与datetime字段的日期部分相比,后者大于前者
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/116147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-05-09 11:51 <a href="http://www.blogjava.net/WshmAndLily/articles/116147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句基础</title><link>http://www.blogjava.net/WshmAndLily/articles/103701.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 14 Mar 2007 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/103701.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/103701.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/103701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/103701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/103701.html</trackback:ping><description><![CDATA[
		<ol>
				<li>
						<strong>数据定义语言（DDL）：</strong>
				</li>
		</ol>
		<p>           1）<strong>创建数据库（create）：</strong>create database database-name;</p>
		<p>           eg. create database test;</p>
		<p>          2）<strong>删除数据库：</strong>drop database dbname;</p>
		<p>          eg.drop database test;</p>
		<p>         3）<strong>创建新表：</strong>create table tabname(col1 type1 [not null] [primary key],col2 type2 [<strong>not</strong> null],..);</p>
		<p>         eg.根据已有的表创建新表的例子：create table tab_new like tab_old；create table tab_new as select col1,col2… from tab_old definition only;</p>
		<p>       4）<strong>删除表：</strong>drop table tabname;</p>
		<p>      5）<strong>增加列：</strong>alter table tabname add column col type;</p>
		<p>      6）<strong>添加主键</strong>： alter table tabname add primary key(col) ;</p>
		<p>      7）<strong>删除主键</strong>：alter table tabname drop primary key(col) ;</p>
		<p>      8）<strong>创建索引</strong>：create [unique] index idxname on tabname(col….) ;</p>
		<p>      9）<strong>删除索引</strong>：drop index idxname;  注：索引是不可更改的，想更改必须删除重新建；</p>
		<p>     10）<strong>创建视图</strong>：create view viewname as select statement;</p>
		<p>
				<strong>2. 数据操纵语言（DML）</strong>
		</p>
		<p>    <strong>1）查询语句（select）</strong></p>
		<p>   eg1. select * from table1 where field1 like '%value1%';</p>
		<p>   eg2. select * from table1 order by field1,field2 [desc];</p>
		<p>   eg3. select count as totalcount from table1;</p>
		<p>  eg4. select sum(field1) as sumvalue from table1;</p>
		<p>  eg5. select avg(field1) as avgvalue from table1;</p>
		<p>  eg6. select max(field1) as maxvalue from table1;</p>
		<p>  eg7. select min(field1) as minvalue from table1;</p>
		<p>  eg8. select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c;（注：此为左外连接，结果集中包括连接表的匹配行，也包括左连接表的所有行）</p>
		<p>   <strong>2）插入语句（insert）</strong></p>
		<p>  insert into table1(field1,field2) values(value1,value2);</p>
		<p>  <strong>3）删除语句（delete）</strong></p>
		<p>   delete from table1 where 范围;</p>
		<p>  <strong>4）更新语句（update）</strong></p>
		<p>   update table1 set field1=value1 where 范围;</p>
		<p>
				<strong>3. 数据控制语言（DCL）</strong>
		</p>
		<p>   <strong>1）授予权限语句（GRANT）</strong></p>
		<p>
				<strong>   </strong>GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION;</p>
		<p>   其中：privileges可为如下限定符：ALTER 修改表和索引、CREATE （创建数据库和表）、DELETE（ 删除表中已有的记录）、DROP （删除数据库和表）、INDEX （创建或删除索引）、INSERT（ 向表中插入新行）、REFERENCE（ 未用）、SELECT （检索表中的记录）、UPDATE （修改现存表记录）、FILE （读或写服务器上的文件）、PROCESS（ 查看服务器中执行的线程信息或杀死线程）、RELOAD （重载授权表或清空日志、主机缓存或表缓存）、SHUTDOWN（ 关闭服务器）、ALL 所有；ALL PRIVILEGES同义词、USAGE （特殊的“无权限”权限）</p>
		<p>  columns：权限运用的列，它是可选的，并且你只能设置列特定的权限。如果命令有多于一个列，应该用逗号分开它们；</p>
		<p>  what：权限运用的级别。权限可以是全局的（适用于所有数据库和所有表）、特定数据库（适用于一个数据库中的所有表）或特定表的。可以通过指定一个columns字句是权限是列特定的。</p>
		<p>   user ：权限授予的用户，它由一个用户名和主机名组成。MySQL中的一个用户名就?悄懔臃衿魇敝付ǖ挠没?该名字不必与你的Unix登录名或Windows名联系起来。缺省地，如果你不明确指定一个名字，客户程序将使用<br />你的登录名作为MySQL用户名。这只是一个约定。你可以在授权表中将该名字改为nobody，然后以nobody连接<br />执行需要超级用户权限的操作。</p>
		<p>   password：赋予用户的口令，它是可选的。如果你对新用户没有指定IDENTIFIED BY子句，该用户不赋给口令（不安全）。对现有用户，任何你指定的口令将代替老口令。如果你不指定口令，老口令保持不变，当你用IDENTIFIED BY<br />时，口令字符串用改用口令的字面含义，GRANT将为你编码口令，不要象你用SET PASSWORD 那样使用password()<br />函数。</p>
		<p>    WITH GRANT OPTION子句是可选的。如果你包含它，用户可以授予权限通过GRANT语句授权给其它用户。你可以用该子句给与其它用户授权的能力。</p>
		<p>   用户名、口令、数据库和表名在授权表记录中是大小写敏感的，主机名和列名不是。<br />   eg1. 创建一个超级用户test1</p>
		<p>     grant all privilleges on *.* to test1@localhost identified by '123456' with grant option;<br />   eg2.  创建一个只能查询的用户 test2<br />mysql&gt; grant select on *.* to test2@localhost identified by '9876543';</p>
		<p>
				<strong>     2) 撤权并删除用户（revoke）</strong>
				<br />     要取消一个用户的权限，使用REVOKE语句。REVOKE的语法非常类似于GRANT语句，除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句：<br /><br />     revoke privileges (columns) ON what FROM user<br /><br />     user部分必须匹配原来GRANT语句的你想撤权的用户的user部分。privileges部分不需匹配，你可以用GRANT<br />语句授权，然后用REVOKE语句只撤销部分权限。REVOKE语句只删除权限，而不删除用户。即使你撤销了所有<br />权限，在user表中的用户记录依然保留，这意味着用户仍然可以连接服务器。要完全删除一个用户，你必须<br />用一条DELETE语句明确从user表中删除用户记录：<br /><br />    #mysql -u root mysql<br />    DELETE FROM user WHERE User="user_name" and Host="host_name";</p>
		<p>    FLUSH PRIVILEGES;　<br />   DELETE语句删除用户记录，而FLUSH语句告诉服务器重载授权表。（当你使用GRANT和REVOKE语句时，表自动重载，而你直接修改授权表时不是。）</p>
		<p>     eg. 删除用户test1<br />     revoke all on *.* from <a href="mailto:test2@localhost">test2@localhost</a>;</p>
		<p>     use mysql;<br />     delete from user where user='test' and host='localhost';<br />     flush privileges;<br /><br />  <strong>   3）提交语句（commit）</strong></p>
		<p>     <strong>4）回滚语句（rollback）</strong></p>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/103701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-03-14 09:58 <a href="http://www.blogjava.net/WshmAndLily/articles/103701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库连接池概述</title><link>http://www.blogjava.net/WshmAndLily/articles/102408.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 07 Mar 2007 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/102408.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/102408.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/102408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/102408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/102408.html</trackback:ping><description><![CDATA[数据库连接池概述： <br />数据库连接是一种关键的有限的昂贵的资源，这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性，影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 <br />数据库连接池负责分配、管理和释放数据库连接，它允许应用程序重复使用一个现有的数据库连接，而再不是重新建立一个；释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 <br />数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中，这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用，连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数，当应用程序向连接池请求的连接数超过最大连接数量时，这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素： <br />1) 最小连接数是连接池一直保持的数据库连接，所以如果应用程序对数据库连接的使用量不大，将会有大量的数据库连接资源被浪费； <br />2) 最大连接数是连接池能申请的最大连接数，如果数据库连接请求超过此数，后面的数据库连接请求将被加入到等待队列中，这会影响之后的数据库操作。 <br />3) 如果最小连接数与最大连接数相差太大，那么最先的连接请求将会获利，之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过，这些大于最小连接数的数据库连接在使用完不会马上被释放，它将被放到连接池中等待重复使用或是空闲超时后被释放。<img src ="http://www.blogjava.net/WshmAndLily/aggbug/102408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-03-07 14:55 <a href="http://www.blogjava.net/WshmAndLily/articles/102408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>