<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post/1141/</link>
<title><![CDATA[数据集合]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Fri, 30 Apr 2021 10:11:38 +0000</pubDate> 
<guid>https://atim.cn/post/1141/</guid> 
<description>
<![CDATA[ 
	公司最近一个项目,是将多个数据源合并成一个数据库.<br/>原来有一个类似的项目,只是针对单个数据库迁移.<br/><br/>但这个项目当时弄了很久.如果再用这样的方案来实现.不太划算.<br/>而且这个项目后期维护也不太明确.所以不考虑.<br/><br/>所以我偏向于使用ETL的工具快速的去实现功能.<br/>试用了openfrefine, clouddx 最后发现 Pentaho Data Integration (Kettle) 最适合.<br/>优势:<br/>1.gui编辑数据集成的逻辑<br/>2.命令执行<br/>3.能支持sql server ,mysql等常用数据库<br/>4.支持js调整数据内容<br/>5.分批操作<br/><br/>https://www.jianshu.com/p/6876c204f447<br/>https://blog.csdn.net/romaticjun2011/article/details/40685113<br/>https://www.cnblogs.com/mq0036/p/9372713.html
]]>
</description>
</item><item>
<link>https://atim.cn/tar-batch-compression-and-decompression-batch/</link>
<title><![CDATA[tar 批量压缩和批量解压]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Fri, 23 Dec 2011 02:35:11 +0000</pubDate> 
<guid>https://atim.cn/tar-batch-compression-and-decompression-batch/</guid> 
<description>
<![CDATA[ 
	如果有迁移过大网站的人都知道,如果一次过把所有文件打包成一个文件,经常会出现压缩包损坏的情况.而且传送也很耗时.对于快速迁移不利.<br/>一般网站的最大量的都是附件.所以我操作都把附件分开打包,如:附件目录下有 2010,2011两个目录,我会将目录打包成2010.tar.gz, 2011.tar.gz<br/>以下命令能将当前目录下的所有目录打包成tar.gz文件<br/><div class="code"><br/>ls -F&#124;grep /$&#124;awk -F &#039;/&#039; &#039;&#123;print $1&quot;.tar.gz&quot;&#125;&#039;&#039;&#123;print $1&quot;/&quot;&#125;&#039;&#124;xargs -n2 tar czvf<br/></div><br/>这里迁移就不说了.当移到目录目录后,将指<br/>批量将目录下的tar.gz文件解压到当前目录下.<br/><div class="code"><br/>ls *.tar.gz &#124; xargs -n1 tar xzvf<br/></div><br/>Tags - <a href="https://atim.cn/tags/tar/" rel="tag">tar</a> , <a href="https://atim.cn/tags/%25E7%2594%25A8%25E6%25B3%2595/" rel="tag">用法</a>
]]>
</description>
</item><item>
<link>https://atim.cn/post/463/</link>
<title><![CDATA[北大词性标注版本]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Fri, 21 Nov 2008 04:56:03 +0000</pubDate> 
<guid>https://atim.cn/post/463/</guid> 
<description>
<![CDATA[ 
	<br/>Ag<br/>形语素<br/>形容词性语素。形容词代码为a，语素代码ｇ前面置以A。<br/><br/>a<br/>形容词<br/>取英语形容词adjective的第1个字母。<br/><br/>ad<br/>副形词<br/>直接作状语的形容词。形容词代码a和副词代码d并在一起。<br/><br/>an<br/>名形词<br/>具有名词功能的形容词。形容词代码a和名词代码n并在一起。<br/><br/>b<br/>区别词<br/>取汉字“别”的声母。<br/><br/>c<br/>连词<br/>取英语连词conjunction的第1个字母。<br/><br/>Dg<br/>副语素<br/>副词性语素。副词代码为d，语素代码ｇ前面置以D。<br/><br/>d<br/>副词<br/>取adverb的第2个字母，因其第1个字母已用于形容词。<br/><br/>e<br/>叹词<br/>取英语叹词exclamation的第1个字母。<br/><br/>f<br/>方位词<br/>取汉字“方”<br/><br/>g<br/>语素<br/>绝大多数语素都能作为合成词的“词根”，取汉字“根”的声母。<br/><br/>h<br/>前接成分<br/>取英语head的第1个字母。<br/><br/>i<br/>成语<br/>取英语成语idiom的第1个字母。<br/><br/>j<br/>简称略语<br/>取汉字“简”的声母。<br/><br/>k<br/>后接成分<br/>　<br/>l<br/>习用语<br/>习用语尚未成为成语，有点“临时性”，取“临”的声母。<br/><br/>m<br/>数词<br/>取英语numeral的第3个字母，n，u已有他用。<br/><br/>Ng<br/>名语素<br/>名词性语素。名词代码为n，语素代码ｇ前面置以N。<br/><br/>n<br/>名词<br/>取英语名词noun的第1个字母。<br/><br/>nr<br/>人名<br/>名词代码n和“人(ren)”的声母并在一起。<br/><br/>ns<br/>地名<br/>名词代码n和处所词代码s并在一起。<br/><br/>nt<br/>机构团体<br/>“团”的声母为t，名词代码n和t并在一起。<br/><br/>nz<br/>其他专名<br/>“专”的声母的第1个字母为z，名词代码n和z并在一起。<br/><br/>o<br/>拟声词<br/>取英语拟声词onomatopoeia的第1个字母。<br/><br/>ba 介词 把、将 　<br/>bei 介词 被 　<br/>p<br/>介词<br/>取英语介词prepositional的第1个字母。<br/><br/>q<br/>量词<br/>取英语quantity的第1个字母。<br/><br/>r<br/>代词<br/>取英语代词pronoun的第2个字母,因p已用于介词。<br/><br/>s<br/>处所词<br/>取英语space的第1个字母。<br/><br/>Tg<br/>时语素<br/>时间词性语素。时间词代码为t,在语素的代码g前面置以T。<br/><br/>t<br/>时间词<br/>取英语time的第1个字母。<br/><br/>dec 助词 的、之 　<br/>deg 助词 得 　<br/>di 助词 地 　<br/>etc 助词 等、等等 　<br/>as 助词 了、着、过 　<br/>msp 助词 所 　<br/>u<br/>其他助词<br/>取英语助词auxiliary<br/><br/>Vg<br/>动语素<br/>动词性语素。动词代码为v。在语素的代码g前面置以V。<br/><br/>v<br/>动词<br/>取英语动词verb的第一个字母。<br/><br/>vd<br/>副动词<br/>直接作状语的动词。动词和副词的代码并在一起。<br/><br/>vn<br/>名动词<br/>指具有名词功能的动词。动词和名词的代码并在一起。<br/><br/>w<br/>其他标点符号<br/>　<br/>x<br/>非语素字<br/>非语素字只是一个符号，字母x通常用于代表未知数、符号。<br/><br/>y<br/>语气词<br/>取汉字“语”的声母。<br/><br/>z<br/>状态词<br/>取汉字“状”的声母的前一个字母。
]]>
</description>
</item><item>
<link>https://atim.cn/post/242/</link>
<title><![CDATA[MySQL 的数据类型和建库策略]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Thu, 05 Apr 2007 05:09:15 +0000</pubDate> 
<guid>https://atim.cn/post/242/</guid> 
<description>
<![CDATA[ 
	无论是在小得可怜的免费数据库空间或是大型电子商务网站，合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。<br/><br/>一、数字类型<br/><br/>数字类型按照我的分类方法分为三类：整数类、小数类和数字类。<br/><br/>我所谓的“数字类”，就是指 DECIMAL 和 NUMERIC，它们是同一种类型。它严格的说不是一种数字类型，因为他们实际上是将数字以字符串形式保存的；他的值的每一位 (包括小数点) 占一个字节的存储空间，因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定，在运算中不会“失真”，所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。<br/><br/>小数类，即浮点数类型，根据精度的不同，有 FLOAT 和 DOUBLE 两种。它们的优势是精确度，FLOAT 可以表示绝对值非常小、小到约 1.17E-38 (0.000...0117，小数点后面有 37 个零) 的小数，而 DOUBLE 更是可以表示绝对值小到约 2.22E-308 (0.000...0222，小数点后面有 307 个零) 的小数。FLOAT 类型和 DOUBLE 类型占用存储空间分别是 4 字节和 8 字节。如果需要用到小数的字段，精度要求不高的，当然用 FLOAT 了。可是说句实在话，我们“民用”的数据，哪有要求精度那么高的呢？这两种类型至今我没有用过――我还没有遇到适合于使用它们的事例。<br/><br/>用的最多的，最值得精打细算的，是整数类型。从只占一个字节存储空间的 TINYINT 到占 8 个字节的 BIGINT，挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT 占用存储空间分别为 1 字节、2 字节、3 字节、4 字节和 8 字节，就无符号的整数而言，这些类型能表示的最大整数分别为 255、65535、16777215、4294967295 和 18446744073709551615。如果用来保存用户的年龄 (举例来说，数据库中保存年龄是不可取的)，用 TINYINT 就够了；九城的《纵横》里，各项技能值，用 SMALLINT 也够了；如果要用作一个肯定不会超过 16000000 行的表的 AUTO_INCREMENT 的 IDENTIFY 字段，当然用 MEDIUMINT 不用 INT，试想，每行节约一个字节，16000000 行可以节约 10 兆多呢。<br/><br/>二、日期时间类型<br/><br/>日期和时间类型比较简单，无非是 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等几个类型。只对日期敏感，而对时间没有要求的字段，就用 DATE 而不用 DATETIME 是不用说的了；单独使用时间的情况也时有发生――使用 TIME；但最多用到的还是用 DATETIME。在日期时间类型上没有什么文章可做，这里就不再详述。<br/><br/>三、字符 (串) 类型<br/><br/>不要以为字符类型就是 CHAR，CHAR 和 VARCHAR 的区别在于 CHAR 是固定长度，只要你定义一个字段是 CHAR(10)，那么不论你存储的数据是否达到了 10 个字节，它都要占去 10 个字节的空间；而 VARCHAR 则是可变长度的，如果一个字段可能的值是不固定长度的，我们只知道它不可能超过 10 个字符，把它定义为 VARCHAR(10) 是最合算的，VARCHAR 类型的占用空间是它的值的实际长度 +1。为什么要 +1 呢？这一个字节用于保存实际使用了多大的长度。从这个 +1 中也应该看到，如果一个字段，它的可能值最长是 10 个字符，而多数情况下也就是用到了 10 个字符时，用 VARCHAR 就不合算了：因为在多数情况下，实际占用空间是 11 个字节，比用 CHAR(10) 还多占用一个字节。<br/><br/>举个例子，就是一个存储股票名称和代码的表，股票名称绝大部分是四个字的，即 8 个字节；股票代码，上海的是六位数字，深圳的是四位数字。这些都是固定长度的，股票名称当然要用 CHAR(8)；股票代码虽然是不固定长度，但如果使用 VARCHAR(6)，一个深圳的股票代码实际占用空间是 5 个字节，而一个上海的股票代码要占用 7 个字节！考虑到上海的股票数目比深圳的多，那么用 VARCHAR(6) 就不如 CHAR(6) 合算了。<br/>虽然一个 CHAR 或 VARCHAR 的最大长度可以到 255，我认为大于 20 的 CHAR 是几乎用不到的――很少有大于 20 个字节长度的固定长度的东东吧？不是固定长度的就用 VARCHAR。大于 100 的 VARCHAR 也是几乎用不到的――比这更大的用 TEXT 就好了。TINYTEXT，最大长度为 255，占用空间也是实际长度 +1；TEXT，最大长度 65535，占用空间是实际长度 +2；MEDIUMTEXT，最大长度 16777215，占用空间是实际长度 +3；LONGTEXT，最大长度 4294967295，占用空间是实际长度 +4。为什么 +1、+2、+3、+4？你要是还不知道就该打 PP 了。这些可以用在论坛啊、新闻啊，什么的，用来保存文章的正文。根据实际情况的不同，选择从小到大的不同类型。<br/><br/>四、枚举和集合类型<br/><br/>枚举 (ENUM) 类型，最多可以定义 65535 种不同的字符串从中做出选择，只能并且必须选择其中一种，占用存储空间是一个或两个字节，由枚举值的数目决定；集合 (SET) 类型，最多可以有 64 个成员，可以选择其中的零个到不限定的多个，占用存储空间是一个到八个字节，由集合可能的成员数目决定。<br/><br/>举个例子来说，在 SQLServer 中，你可以节约到用一个 BIT 类型来表示性别 (男/女)，但 MySQL 没有 BIT，用 TINTINT 吗？不，可以用 ENUM('帅哥','美眉')，只有两种选择，所以只需一个字节――跟 TINYINT 一样大，但却可以直接用字符串 '帅哥' 和 '美眉' 来存取。真是太方便啦！<br/><br/>好了，MySQL 的数据类型介绍得差不多，我的建库策略也随着介绍数据类型介绍给大家一些。但这只是其中一部分，篇幅有限，不能再细说；其他的，就靠各人在对数据类型理解的基础上，多多实践、多多讨论。<br/><a href="http://dev.csdn.net/author/grock304/b7715019f84946578fa18d572e3f968f.html" target="_blank">原文</a>
]]>
</description>
</item><item>
<link>https://atim.cn/post/230/</link>
<title><![CDATA[ SQL--JOIN之完全用法(版本2)]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Tue, 27 Mar 2007 07:04:40 +0000</pubDate> 
<guid>https://atim.cn/post/230/</guid> 
<description>
<![CDATA[ 
	在我叙述 JOIN 的用法前，我先引用数据库设计中最常见的范式资料。<br/><br/>第三范式（ 3NF ）：如果关系模式 R （ U ， F ）中的所有非主属性对任何候选关键字都不存在传递信赖，则称关系 R 是属于第三范式的。<br/><br/>例：如 S1 （ SNO ， SNAME ， DNO ， DNAME ， LOCATION ） 各属性分别代表学号，姓名，所在系，系名称，系地址。<br/><br/>关键字 SNO 决定各个属性。由于是单个关键字，没有部分依赖的问题，肯定是 2NF 。但这关系肯定有大量的冗余，有关学生所在的几个属性 DNO ， DNAME ， LOCATION 将重复存储，插入，删除和修改时也将产生类似以上例的情况。<br/><br/>原因：关系中存在传递依赖造成的。由于 SNAME 和 DNO 是依赖 SNO ，而 DNAME 和 LOCATION 是依赖 DNO 的，即通过一个学号可以知道该学生的姓名以及他所在系代码，但无法由学号知道系地址，学号和系地址间是通过学号所对应的学生的所在系关联的， 因此关键字 SNO 对 LOCATION 函数决定是通过传递依赖 DNO -> LOCATION 实现的。也就是说， SNO 不直接决定非主属性 LOCATION 。<br/><br/>解决目地：每个关系模式中不能留有传递依赖。<br/><br/>解决方法：分为两个关系 S （ SNO ， SNAME ， DNO ）， D （ DNO ， DNAME ， LOCATION ）<br/><br/>注意：关系 S 中不能没有外关键字 DNO 。否则两个关系之间失去联系。<br/><br/>在数据库的设计过程中常常按照第三范式来设计数据库，当然在有些场合为优化数据库的性能而增加了相关冗余字段以使表的结构不符合 3NF ，在多数场合中，没有一张表能完整的发挥客户所需要的结果集。这样就需要通过联接多张在逻辑上存在依赖关系的表，选择你所需要的数据。 &nbsp; &nbsp;<br/><br/>在使用 JOIN 前，必须明白是通过联接，根据各个表之间的逻辑关系从相关表中检索数据。通过 SQL Server 自带帮助文件，可以清楚的知道：可在 FROM 或 WHERE 子句中指定联接。<br/><br/>1.1. &nbsp; &nbsp; &nbsp; &nbsp; 在 WHERE 子句中指定联接<br/><br/>下例使用 WHERE 子句进行表之间的<br/><br/>SELECT A.SYMBOL,A.SNAME,B.TDATE,B.CLOSE<br/><br/>FROM SECURITYCODE A,DAYQUOTE B<br/><br/>WHERE A.SYMBOL =B.SYMBOL<br/><br/> &nbsp; &nbsp;AND &nbsp;B.TDATE >= A.LISTDATE<br/><br/> &nbsp; &nbsp;AND A.SYMBOL LIKE &nbsp;'600%'<br/><br/>在上例中联接的表 A 与表 B 通过 A.SYMBOL =B.SYMBOL 这个条件联接，筛选条件为 B.TDATE 不小于 A. LISTDATE 。<br/><br/>在 WHERE 子句中指定联接，对于较简单的联接，使用这种方式可能较方便，但综合来说，不推荐使用该语法联接表。<br/>1.2. &nbsp; &nbsp; &nbsp; &nbsp; 在 FROM 子句中指定联接<br/><br/>拿上面的例子来详细说，表 SECURITYCODE 中主要存放证券代码的基本信息，表中的 SYMBOL 代表股票代码， SNAME 代表股票名称， LISTDATE 代表上市日期；表 DAYQUOTE 中主要存放股票的每日行情。 SYMBOL 代表股票代码， TDATE 代表交易日期， CLOSE 代表收盘价。<br/><br/>我现在的取值逻辑是：取出股票代码以 600 打头的股票自上市日期以来的所有交易日的收盘价。将 SECURITYCODE 与 DAYQUOTE 通过 SYMBOL 联接。<br/><br/>SELECT A.SYMBOL,A.SNAME,B.TDATE,B. CLOSE<br/><br/>FROM SECURITYCODE A<br/><br/>JOIN DAYQUOTE B<br/><br/> &nbsp; &nbsp;ON A.SYMBOL =B.SYMBOL<br/><br/>WHERE &nbsp;B.TDATE >= A.LISTDATE<br/><br/> &nbsp; &nbsp;AND A.SYMBOL LIKE '600%'<br/><br/>ORDER BY A.SYMBOL,B.TDATE<br/><br/>对于使用 FROM 子句方式联接表，可以很清楚的看出表之间的联接条件。就可读性以及后续的可修改性与 WHERE 子句相比有较大的优势。<br/><br/>下面就联接的方式引用帮助文件中的具体介绍，联接可以分为以下几种：<br/>1.3. &nbsp; &nbsp; &nbsp; &nbsp; 内联接<br/><br/>内联接（典型的联接运算，使用像 = 或 <> 之类的比较运算符）。包括相等联接和自然联接。<br/><br/>内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。<br/><br/>在 SQL-92 标准中，内联接可在 FROM 或 WHERE 子句中指定。这是 WHERE 子句中唯一一种 SQL-92 支持的联接类型。 WHERE 子句中指定的内联接称为旧式内联接。<br/><br/>内联接一般常见写法：<br/><br/>SELECT A.COLUMN1,[A.COLUMN2],B.COLUMN1,[B.COLUMN2]<br/><br/>FROM &nbsp;TABLE1 A<br/><br/>[INNER] JOIN TABLE2 B<br/><br/> &nbsp; &nbsp;ON A.COLUMN0 = B.COLUMN0<br/><br/>在查询分析器中使用 INNER JOIN 时常常省略 INNER 。<br/>1.4. &nbsp; &nbsp; &nbsp; &nbsp; 外联接<br/><br/>外联接可以是左向外联接、右向外联接或完整外部联接。<br/><br/>在 FROM 子句中指定外联接时，可以由下列几组关键字中的一组指定：<br/><br/>LEFT JOIN 或 LEFT OUTER JOIN<br/><br/>左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行，而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行，则在相关联的结果集行中右表的所有选择列表列均为空值。<br/><br/>RIGHT JOIN 或 RIGHT OUTER JOIN<br/><br/>右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行，则将为左表返回空值。<br/><br/>FULL JOIN 或 FULL OUTER JOIN<br/><br/>完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时，则另一个表的选择列表列包含空值。如果表之间有匹配行，则整个结果集行包含基表的数据值。<br/><br/>仅当至少有一个同属于两表的行符合联接条件时，内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行，只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行，以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。<br/><br/>外联接的中常见的是 LEFT JOIN ，将 LEFT JOIN 用熟已经可以解决大半问题了。<br/><br/>外联接的一般写法：<br/><br/>SELECT A.COLUMN1,[A.COLUMN2],B.COLUMN1,[B.COLUMN2]<br/><br/>FROM &nbsp;TABLE1 A<br/><br/>LEFT&#124;RIGHT&#124;FULL [OUTER] JOIN TABLE2 B<br/><br/> &nbsp; &nbsp;ON A.COLUMN0 = B.COLUMN0<br/><br/>在查询分析器中使用 OUTER JOIN 时常常省略 OUTER 。 LEFT 和 RIGHT 只是方向问题，在特定场合下， FULL OUTER JOIN 相当于 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的消除重复行的合集。<br/>1.5. &nbsp; &nbsp; &nbsp; &nbsp; 交叉联接<br/><br/>交叉联接返回左表中的所有行，左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。<br/><br/>没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。也就是说在没有 WHERE 子句的情况下，若表 A 有 3 行记录，表 B 有 6 行记录 : ：<br/><br/>SELECT &nbsp;A.*,B.* &nbsp;FROM 表A &nbsp;CROSS &nbsp;JOIN 表B<br/><br/>那以上语句会返回 18 行记录。 
]]>
</description>
</item><item>
<link>https://atim.cn/post/229/</link>
<title><![CDATA[ SQL--JOIN之完全用法(版本1)]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Tue, 27 Mar 2007 07:03:39 +0000</pubDate> 
<guid>https://atim.cn/post/229/</guid> 
<description>
<![CDATA[ 
	外联接。外联接可以是左向外联接、右向外联接或完整外部联接。<br/>在 FROM 子句中指定外联接时，可以由下列几组关键字中的一组指定：<br/><br/>LEFT JOIN 或 LEFT OUTER JOIN。<br/>左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行，而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行，则在相关联的结果集行中右表的所有选择列表列均为空值。<br/><br/>RIGHT JOIN 或 RIGHT OUTER JOIN。<br/>右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行，则将为左表返回空值。<br/><br/>FULL JOIN 或 FULL OUTER JOIN。<br/>完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时，则另一个表的选择列表列包含空值。如果表之间有匹配行，则整个结果集行包含基表的数据值。<br/><br/>仅当至少有一个同属于两表的行符合联接条件时，内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行，只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行，以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。<br/><br/>Microsoft&reg; SQL Server™ 2000 对在 FROM 子句中指定的外联接使用以下 SQL-92 关键字：<br/><br/>LEFT OUTER JOIN 或 LEFT JOIN<br/><br/><br/>RIGHT OUTER JOIN 或 RIGHT JOIN<br/><br/><br/>FULL OUTER JOIN 或 FULL JOIN<br/>SQL Server 支持 SQL-92 外联接语法，以及在 WHERE 子句中使用 *= 和 =* 运算符指定外联接的旧式语法。由于 SQL-92 语法不容易产生歧义，而旧式 Transact-SQL 外联接有时会产生歧义，因此建议使用 SQL-92 语法。<br/><br/>使用左向外联接<br/>假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。<br/><br/>若要在结果中包括所有的作者，而不管出版商是否住在同一个城市，请使用 SQL-92 左向外联接。下面是 Transact-SQL 左向外联接的查询和结果：<br/><br/>USE pubs<br/>SELECT a.au_fname, a.au_lname, p.pub_name<br/>FROM authors a LEFT OUTER JOIN publishers p<br/> &nbsp; ON a.city = p.city<br/>ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br/><br/>下面是结果集：<br/><br/>au_fname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; au_lname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pub_name &nbsp; &nbsp; &nbsp; &nbsp; <br/>-------------------- ------------------------------ -----------------<br/>Reginald &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Blotchet-Halls &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Michel &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DeFrance &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Innes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;del Castillo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Ann &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Dull &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Marjorie &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Green &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Morningstar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Greene &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Burt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Gringlesby &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Sheryl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hunter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Livia &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Karsen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Charlene &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Locksley &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Stearns &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MacFeather &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Heather &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;McBadden &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Michael &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;O'Leary &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Sylvia &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Panteley &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Albert &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Anne &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Meander &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Smith &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Dean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Straight &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Dirk &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Stringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Johnson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;White &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Akiko &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yokomoto &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Abraham &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bennet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/>Cheryl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Carson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/><br/>(23 row(s) affected)<br/><br/>不管是否与 publishers 表中的 city 列匹配，LEFT OUTER JOIN 均会在结果中包含 authors 表的所有行。注意：结果中所列的大多数作者都没有相匹配的数据,因此，这些行的 pub_name 列包含空值。<br/><br/>使用右向外联接<br/>假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。SQL-92 右向外联接运算符 RIGHT OUTER JOIN 指明：不管第一个表中是否有匹配的数据，结果将包含第二个表中的所有行。<br/><br/>若要在结果中包括所有的出版商，而不管城市中是否还有出版商居住，请使用 SQL-92 右向外联接。下面是 Transact-SQL 右向外联接的查询和结果：<br/><br/>USE pubs<br/>SELECT a.au_fname, a.au_lname, p.pub_name<br/>FROM authors AS a RIGHT OUTER JOIN publishers AS p<br/> &nbsp; ON a.city = p.city<br/>ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br/><br/>下面是结果集：<br/><br/>au_fname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; au_lname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pub_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>-------------------- ------------------------ --------------------<br/>Abraham &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bennet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/>Cheryl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Carson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Binnet & Hardley<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Five Lakes Publishing<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GGG&G<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lucerne Publishing<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; New Moon Books<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ramona Publishers<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Scootney Books<br/><br/>(9 row(s) affected)<br/><br/>使用谓词（如将联接与常量比较）可以进一步限制外联接。下例包含相同的右向外联接，但消除销售量低于 50 本的书籍的书名：<br/><br/>USE pubs<br/>SELECT s.stor_id, s.qty, t.title<br/>FROM sales s RIGHT OUTER JOIN titles t<br/> &nbsp; ON s.title_id = t.title_id<br/> &nbsp; AND s.qty > 50<br/>ORDER BY s.stor_id ASC<br/><br/>下面是结果集：<br/><br/>stor_id qty &nbsp; &nbsp;title &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>------- ------ ---------------------------------------------------------<br/>(null) (null) But Is It User Friendly? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>(null) (null) Computer Phobic AND Non-Phobic Individuals: Behavior<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Variations &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Cooking with Computers: Surreptitious Balance Sheets &nbsp; &nbsp; &nbsp;<br/>(null) (null) Emotional Security: A New Algorithm &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Fifty Years in Buckingham Palace Kitchens &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>7066 &nbsp; 75 &nbsp; &nbsp; Is Anger the Enemy? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>(null) (null) Life Without Fear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Net Etiquette &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>(null) (null) Onions, Leeks, and Garlic: Cooking Secrets of the<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Mediterranean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Prolonged Data Deprivation: Four Case Studies &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Secrets of Silicon Valley &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>(null) (null) Silicon Valley Gastronomic Treats &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Straight Talk About Computers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) Sushi, Anyone? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/>(null) (null) The Busy Executive's Database Guide &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) The Gourmet Microwave &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) The Psychology of Computer Cooking &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>(null) (null) You Can Combat Computer Stress! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/><br/>(18 row(s) affected)<br/><br/>有关谓词的更多信息，请参见 WHERE。<br/><br/>使用完整外部联接<br/>若要通过在联接结果中包括不匹配的行保留不匹配信息，请使用完整外部联接。Microsoft&reg; SQL Server™ 2000 提供完整外部联接运算符 FULL OUTER JOIN，不管另一个表是否有匹配的值，此运算符都包括两个表中的所有行。<br/><br/>假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。SQL-92 FULL OUTER JOIN 运算符指明：不管表中是否有匹配的数据，结果将包括两个表中的所有行。<br/><br/>若要在结果中包括所有作者和出版商，而不管城市中是否有出版商或者出版商是否住在同一个城市，请使用完整外部联接。下面是 Transact-SQL 完整外部联接的查询和结果：<br/><br/>USE pubs<br/>SELECT a.au_fname, a.au_lname, p.pub_name<br/>FROM authors a FULL OUTER JOIN publishers p<br/> &nbsp; ON a.city = p.city<br/>ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br/><br/>下面是结果集：<br/><br/>au_fname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; au_lname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pub_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/>-------------------- ---------------------------- --------------------<br/>Reginald &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Blotchet-Halls &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Michel &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DeFrance &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Innes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;del Castillo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Ann &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Dull &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Marjorie &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Green &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Morningstar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Greene &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Burt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Gringlesby &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Sheryl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hunter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Livia &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Karsen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Charlene &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Locksley &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Stearns &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MacFeather &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Heather &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;McBadden &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Michael &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;O'Leary &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Sylvia &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Panteley &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Albert &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Anne &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Meander &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Smith &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Dean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Straight &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Dirk &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Stringer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Johnson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;White &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL<br/>Akiko &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yokomoto &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL<br/>Abraham &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bennet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/>Cheryl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Carson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Algodata Infosystems<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Binnet & Hardley<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Five Lakes Publishing<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GGG&G<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lucerne Publishing<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; New Moon Books<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ramona Publishers<br/>NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Scootney Books<br/><br/>(30 row(s) affected) 
]]>
</description>
</item><item>
<link>https://atim.cn/post/171/</link>
<title><![CDATA[MYSQL数据类型]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sun, 11 Feb 2007 15:22:39 +0000</pubDate> 
<guid>https://atim.cn/post/171/</guid> 
<description>
<![CDATA[ 
	今日上phpchina收集的mysql类型<br/>其实我自己对那个类型都不是很了解<br/>用的太少了<br/><br/>列类型 需要的存储量 &nbsp;<br/>TINYINT 1 字节 <br/>SMALLINT 2 个字节 <br/>MEDIUMINT 3 个字节 <br/>INT 4 个字节 <br/>INTEGER 4 个字节 <br/>BIGINT 8 个字节 <br/>FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53 <br/>FLOAT 4 个字节 <br/>DOUBLE 8 个字节 <br/>DOUBLE PRECISION 8 个字节 <br/>REAL 8 个字节 <br/>DECIMAL(M,D) M字节(D+2 , 如果M < D) &nbsp;<br/>NUMERIC(M,D) M字节(D+2 , 如果M < D) &nbsp;<br/><br/>日期和时间类型 <br/>列类型 需要的存储量 &nbsp;<br/>DATE 3 个字节 <br/>DATETIME 8 个字节 <br/>TIMESTAMP 4 个字节 <br/>TIME 3 个字节 <br/>YEAR 1 字节 <br/><br/>串类型 <br/>列类型 需要的存储量 &nbsp;<br/>CHAR(M) M字节，1 <= M <= 255 &nbsp;<br/>VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255 &nbsp;<br/>TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8 <br/>BLOB, TEXT L+2 字节, 在此L< 2 ^ 16 <br/>MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24 <br/>LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32 <br/>ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535） <br/>SET('value1','value2',...) 1，2，3，4或8个字节, 取决于集合成员的数量(最多64个成员） &nbsp;<br/>Tags - <a href="https://atim.cn/tags/%25E6%2595%25B0%25E6%258D%25AE/" rel="tag">数据</a>
]]>
</description>
</item><item>
<link>https://atim.cn/post/26/</link>
<title><![CDATA[用php给你的editplus增加新功能]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Wed, 02 Aug 2006 14:18:42 +0000</pubDate> 
<guid>https://atim.cn/post/26/</guid> 
<description>
<![CDATA[ 
	用php给你的editplus增加新功能？<br/>就是很多很多人都用来写php的编辑软件？<br/>确实是用php给editplus增加功能<br/>在说怎样做之前，我先说一下editplus的调用editplus外部软件的原理<br/>１）配置用户工具<br/>打开editplus后，在菜单：工具－>配置用户工具<br/><img src="up/1154523986.jpg" /><br/>可以选择的工具主要分类<br/><img src="up/1154524407.jpg" /><br/>现在我们主要用的是程序这一分类<br/>先来配置一个Debug php<br/>其实原来很简单<br/>就是调用php.exe来解释本程序<br/>php是一种解释性语言，是在用的时时候才来解释的。<br/>只要有php.exe能运行，那你的程序就能运行<br/>php运行的方式有几种：当apache的模块来运行，当cgi程序来运行,等等<br/>而editplus运行外部程序就是通过命令行来实现<br/>所以可以调用php来做这个Debug php<br/>如上面的图来填写就可以得到做成一个Debug php<br/><br/>２）用php为editplus增加新功能<br/>在这里我先说一下我为什么去研究这个吧，因为我自己要一个能简单的管理一下每一个程序的cvs，但又不想去配置一个cvs服务器<br/>　　　原因有几个：<br/>　　　第一，占用资源。我的机器已经是老机来了，基本上跑比较大的软件都已经跑不动了。致于cvs与 与客户端对我来说，是难题<br/>　　　第二，功能过强。我想要的功能比较简单，不是太复杂，不要团队开发<br/>　　　第三，我不能修改，主要是我个对比php以外的程序了解不是太多，并不是不让我修改<br/>由于以上原因，我想自己写一个适合我用的版本管理软件<br/>在命令行里用php运行代码的格式是这个<br/>php &nbsp;<file> [args...]<br/><file>是指php的代码文件，就是我们一般写的php代码<br/>[args]是指要传递的参数<br/>这个基本跟editplus里的一样<br/>不过有小许不同<br/>就是editplus会有一些参数可传给php代码来运行<br/><img src="up/1154527904.jpg" /><br/>另外说一样事情，就是所有传递的参数都是通过$_GET方式传递的<br/><br/>３）设计思路<br/>　　　a)通过用户工具调用php程序来记录或收集用相关数据<br/> &nbsp; &nbsp; &nbsp;b)通过web方式来对程序进行管理<br/><br/>４）深入<br/><br/>　　　我自己也没有深入进去，只是试用过一下php_gtk。但没有应用于editplus。就是用php_gtk来运行一个php的gui程序，那样可以做的事情就多了<br/><br/>参考：http://bbs.chinaunix.net/viewthread.php?tid=627339<br/><br/>Tags - <a href="https://atim.cn/tags/php/" rel="tag">php</a>
]]>
</description>
</item><item>
<link>https://atim.cn/post/27/</link>
<title><![CDATA[对于垃圾广告的防止的一个问题分析（二 ）]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Wed, 02 Aug 2006 07:09:29 +0000</pubDate> 
<guid>https://atim.cn/post/27/</guid> 
<description>
<![CDATA[ 
	<p>前几写了那一部分后一直没有时间再去写了</p><p>今天放假，所以有时间再写一下</p><p>六）防止</p><p>一般的防止方法可分为跟风型和领先型</p><p>所为的跟风型，就是按着用别人的思路去找到问题所在，例如广告的特点、发布的方式、使用的是什么技术等。就看名称可能给人的感觉是有一点贬意，确实跟在人家后面走别人出什么怪招他就找出它的特征再来解决这个问题，这样子就是有好处的</p><p>　　　　优点：</p><p>　　　　１）改动小，每次修改的成本低</p><p>            ２）效果显示快</p><p>　　　　缺点：</p><p>　　　　１）长期运行成本高</p><p>　　　　２）容易产生漏动</p><p>　　　　３）有效期短</p><p>　所谓领先型，就是通过广告词的分析过滤，把一个内容综合成一个数值来确定它是不是一个垃圾信息，这种方法，可谓是一个领先的技术来了，包括了分词技术，数学原理、语言学等等多领域</p><p>　　　优点：</p><p>　　　１）长期运行成本低</p><p>　　　２）运行稳定</p><p>　　　缺点：</p><p>　　　１）开发成本高</p><p>　　　２）误报率高</p><p>　　　３）占用资源增多</p><p>（完）</p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/28/</link>
<title><![CDATA[对于垃圾广告的防止的一个问题分析（一）]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Wed, 26 Jul 2006 16:58:58 +0000</pubDate> 
<guid>https://atim.cn/post/28/</guid> 
<description>
<![CDATA[ 
	<p>一、前言</p><p>现在网络上新兴起一群垃圾制造者，整天在制造垃圾，在浪费网络资源</p><p>二、意义</p><p>垃圾制造者与广告者的分别</p><p>这是我个人的想法：</p><p>广告者就是在网站上发布一些带有赢利为目的的服务或产品，所以在我的看法中，在自己的网站发布一些收费服务的人也是在做广告，只是在自己的网站上再通过internet来让别人知道</p><p>垃圾制造者就是制造很多相同或者相似的信息，并且在人家不愿意的情况下让人去看到你的信息，或者是网站不允许发布该内容的情况下发布</p><p>三、个人态度</p><p>对于一般的广告者，我是非分支持的，因为这样可以让交易更容易发生，让别人能找到他们想要的东西，（在一个网站的供求模块里发布自己的供求信息），这是件好事值得支持</p><p>但对于垃圾信息，我持清除态度，因为它浪费了资源</p><p>四、历史与现在情况</p><p>网站的经常有人在发布一些广告性质的信息，这一种情况一直存在。但以前没有现在的情况恶劣，因为以前由是由人手去发布信息所以发布的信息量不是太大，可现在不同了。因为现在有了好多群发软件，记得早几年就开始有那些群发邮件，当时我用邮件的次数不是太多所以没有什么感觉，邮件群发现在已经基本不会收到了，偶儿才会收到一两封，然后上年开始有那些QQ广告群发。</p><p>呵呵。。。。</p><p>刚开始几个月，基本上只要一上Q你就一定会收到那个广告信息，真得好烦，不过QQ的修正速度也很快，不到几个月，已经没有收到QQ广告群发的信息了</p><p>现在，基本上在一些使用通用论坛、CMS、及一些网站的程序时，都有专门的群发程序来完成大规模发布垃圾信息的工作。</p><p>五、情况总结</p><p>总结这三个群发信息的共同特征</p><p>1）由专门的工具来完成</p><p>2）可应用的时间越来越短</p><p>3）阻止方法都是找广告的特征并加以禁止</p><p>4）发布的地方都是人们常去看的地方（换句话来说就是有人的地方就有广告，有广告的地方就有垃圾）</p><p>六、防止</p><p>（现在已经很晚了，明天再写）</p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/35/</link>
<title><![CDATA[数据库设计范式]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sun, 14 May 2006 16:17:26 +0000</pubDate> 
<guid>https://atim.cn/post/35/</guid> 
<description>
<![CDATA[ 
	<font size="2"><font color="#ff0033">关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF（第一范式），2NF（第二范式），3NF（第三范式）和BCNF，另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时，若能符合这几个范式，你就是数据库设计的高手。</font> </font><p /><p><strong>第一范式（1NF）：</strong>在关系模式R中的每一个具体关系r中，如果每个属性值 都是不可再分的最小数据单位，则称R是第一范式的关系。例：如职工号，姓名，电话号码组成一个表（一个人可能有一个办公室电话 和一个家里电话号码） 规范成为1NF有三种方法： <br />一是重复存储职工号和姓名。这样，关键字只能是电话号码。 <br />二是职工号为关键字，电话号码分为单位电话和住宅电话两个属性 <br />三是职工号为关键字，但强制每条记录只能有一个电话号码。 <br />以上三个方法，第一种方法最不可取，按实际情况选取后两种情况。 </p><p><strong>第二范式（2NF）：</strong>如果关系模式R（U，F）中的所有非主属性都完全依赖于任意一个候选关键字，则称关系R 是属于第二范式的。 <br />例：选课关系 SCI（SNO，CNO，GRADE，CREDIT）其中SNO为学号， CNO为课程号，GRADEGE 为成绩，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相联系，需要时再进行自然联接，恢复了原来的关系 </p><p><strong>第三范式（3NF）：</strong>如果关系模式R（U，F）中的所有非主属性对任何候选关键字都不存在传递信赖，则称关系R是属于第三范式的。 <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。否则两个关系之间失去联系。</p><p>BCNF：如果关系模式R（U，F）的所有属性（包括主属性和非主属性）都不传递依赖于R的任何候选关键字，那么称关系R是属于BCNF的。或是关系模式R，如果每个决定因素都包含关键字（而不是被关键字所包含），则RCNF的关系模式。 <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但反过来不成立，而P-&gt;WNO，故（ENO，PNO）-&gt; WNO 也是传递依赖。 <br />虽然没有非主属性对候选关键辽的传递依赖，但存在主属性对候选关键字的传递依赖，同样也会带来麻烦。如一个新职工分配到仓库工作，但暂时处于实习阶段，没有独立负责对某些配件的管理任务。由于缺少关键字的一部分PNO而无法插入到该关系中去。又如某个人改成不管配件了去负责安全，则在删除配件的同时该职工也会被删除。 <br />解决办法：分成管理EP（ENO，PNO，QNT），关键字是（ENO，PNO）工作EW（ENO，WNO）其关键字是ENO <br />缺点：分解后函数依赖的保持性较差。如此例中，由于分解,函数依赖（WNO，PNO）-&gt; ENO 丢失了, 因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现 一部件由两个人或两个以上的人来同时管理。因此，分解之后的关系模式降低了部分完整性约束。 </p><p>一个关系分解成多个关系，要使得分解有意义，起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据本身，而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度，但是分解的同时必须考虑两个问题：无损联接性和保持函数依赖。有时往往不可能做到既有无损联接性，又完全保持函数依赖。需要根据需要进行权衡。 </p><p>1NF直到BCNF的四种范式之间有如下关系： <br />BCNF包含了3NF包含2NF包含1NF </p><p><strong>小结：</strong> <br />目地：规范化目的是使结构更合理，消除存储异常，使数据冗余尽量小，便于插入、删除和更新 <br />原则：遵从概念单一化 &quot;一事一地&quot;原则，即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。 <br />方法：将关系模式投影分解成两个或两个以上的关系模式。 <br />要求：分解后的关系模式集合应当与原关系模式&quot;等价&quot;，即经过自然联接可以恢复原关系而不丢失信息，并保持属性间合理的联系。 </p><p>注意：一个关系模式结这分解可以得到不同关系模式集合，也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间，避免数据不一致性，提高对关系的操作效率，同时满足应用需求。实际上，并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高，查询频度极高的数据库系统更是如此。 </p><p>在关系数据库中，除了函数依赖之外还有多值依赖，联接依赖的问题，从而提出了第四范式，第五范式等更高一级的规范化要求。在此，以后再谈。 </p><p>各位朋友，你看过后有何感想，其实，任何一本数据库基础理论的书都会讲这些东西，考虑到很多网友是半途出家，来做数据库。特找一本书大抄特抄一把，各位有什么问题，也别问我了，自已去找一本关系数据库理论的书去看吧，说不定，对各位大有帮助。说是说以上是基础理论的东西，请大家想想，你在做数据库设计的时候有没有考虑过遵过以上几个范式呢，有没有在数据库设计做得不好之时，想一想，对比以上所讲，到底是违反了第几个范式呢？ <br />我见过的数据库设计，很少有人做到很符合以上几个范式的，一般说来，第一范式大家都可以遵守，完全遵守第二第三范式的人很少了，遵守的人一定就是设计数据库的高手了，BCNF的范式出现机会较少，而且会破坏完整性，你可以在做设计之时不考虑它，当然在ORACLE中可通过触发器解决其缺点。以后我们共同做设计之时，也希望大家遵守以上几个范式。</p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/48/</link>
<title><![CDATA[数据表优化实例]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Wed, 22 Feb 2006 03:52:52 +0000</pubDate> 
<guid>https://atim.cn/post/48/</guid> 
<description>
<![CDATA[ 
	<strong><font face="宋体">摘要：</font></strong>介绍了数据库查询速度缓慢的常规解决方法及其主要缺点，提出利用Oracle分区功能解决问题，并结合油田开发数据库现状，详细描述了分区的具体实现方法。结合使用情况，总结实施效果，对大数据量表的维护和优化有一定的参考价值。<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">    <b>关键词：</b></span>Oracle数据库 分区Partition 表空间Tablespace 数据文件Datafile</p><p style="TEXT-INDENT: 30px">伴随着信息高速公路的飞速建设，油田的各项勘探开发数据都做到了及时准确入库，数据库中数据量日益增加。以其下属的某个采油厂为例，数据量已达到2GB，各种数据库表更是多达1千多个。与此同时，又产生了一个新问题，那就是虽然各种生产数据都已入库，但是由于数据量巨大，造成查询速度非常缓慢。</p><p style="TEXT-INDENT: 30px">本文以油井日度数据表（dba01）为例进行说明。该表是最基础的开发数据，每天每一口井都有记录进入到数据库中。油田规定，该数据15个月内必须保存在线，15个月下来这个表就有997890条记录。</p><p style="TEXT-INDENT: 30px">这接近100万条的记录大大增加系统开销，在用户提交查询后，经常需要等待五六分钟才能得到结果，有时甚至查不出数据，给用户的感觉是仿佛处于“死机”状态。</p><p style="TEXT-INDENT: 0px"><b>1 常规解决办法</b></p><p style="TEXT-INDENT: 30px">解决大表查询速度缓慢的问题，最初的对策是在后台创建很多中间表。</p><p style="TEXT-INDENT: 30px">例如：要得到采油厂生产日数据汇总情况屯解全厂每天的油井开井数、水井开井数、日产油量、注采比等重要数据，其缺点主要有两个：</p><p style="TEXT-INDENT: 30px">（1）中间表的建立会占用大量表空间，即查询速度的提高是以牺牲服务器空间为代价，造成了巨大的资源浪费；</p><p style="TEXT-INDENT: 30px">（2）随着各种应用的不断开展，中间表的数量也越来越多，这样人为加大了数据管理和维护的工作量。</p><p style="TEXT-INDENT: 30px">因此，要从根本上解决大表存在的查询速度缓慢的问题，必须找到更为有效的方法。</p><p style="TEXT-INDENT: 0px"><b>2 采用分区功能解决问题</b></p><p style="TEXT-INDENT: 30px">（1）分区的定义</p><p style="TEXT-INDENT: 30px">分区将表分离在若干不同的表空间上，将大的表和索引拆分成小的易于管理的数据片段，分而治之支撑无限膨胀的大表，给大表物理一级的可管理性。将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。针对我厂大量的油水井日度数据，可以推荐使用Oracle9的分区功能。</p><p style="TEXT-INDENT: 30px">（2）分区的优点</p><p style="TEXT-INDENT: 30px">首先，能够成倍提高查询速度：分区管理后，服务器可以进行智能的分区检测。跳过与查询无关的分区访问，并跳过不在线的分区。</p><p style="TEXT-INDENT: 30px">其次，增强系统可用性：如果表的一个分区由于系统故障而不能使用，其余好的分区仍然可能使用。</p><p style="TEXT-INDENT: 30px">不同分区可以跨表空间存储，降低了磁盘损坏带来的数据不可用性。</p><p style="TEXT-INDENT: 0px"><b>3 分区的管理</b></p><p style="TEXT-INDENT: 30px">（1）建立表的各个分区的表空间</p><p style="TEXT-INDENT: 30px">下面是建立2004年第一季度表空间的操作语句，指定所建立表空间的名字，所用数据文件的名称、大小和存放目录，并由存储字句指定在该空间中所建立对象的缺省存储参数。</p><p style="TEXT-INDENT: 30px">CREATE TABLESPACE ts_dba01_2004q1</p><p style="TEXT-INDENT: 30px">DATAFILE '/home2/oracle/test/dba01/2004q1.SIZE 200MB</p><p style="TEXT-INDENT: 30px">DEFAULT STORAGE (INITIAL 30m NEXT 30m)</p><p style="TEXT-INDENT: 30px">MINEXTENTS 3 PCTINCREASE 0);</p><p style="TEXT-INDENT: 30px">(2)建立分区表</p><p style="TEXT-INDENT: 30px">下面是建立dba01表的操作语句，指定表名、列名及列的数据类型等。这些都与常规创建表的语句相同。</p><p style="TEXT-INDENT: 30px">CREATE TABLE dba01</p><p style="TEXT-INDENT: 30px">(jh varchar2(16)not null,</p><p style="TEXT-INDENT: 30px">rq date not null,</p><p style="TEXT-INDENT: 30px">cyfs varchar2(3),</p><p style="TEXT-INDENT: 30px">dwdm varchar2(11),</p><p style="TEXT-INDENT: 30px">……</p><p style="TEXT-INDENT: 30px">PARTITION BY RANGE(rq)</p><p style="TEXT-INDENT: 30px">PARTITION dba01_2003q4</p><p style="TEXT-INDENT: 30px">VALUES LESS THAN(TO_DATE('2004-01-01','YYYY-MM-DD')</p><p style="TEXT-INDENT: 30px">TABLESDPACE ts_dba01_2003q4,</p><p style="TEXT-INDENT: 30px">PARTITION dba01_2004q1</p><p style="TEXT-INDENT: 30px">VALUES LESS THAN(TO_DATE('2004-04-01','YYYY-MM-DD')</p><p style="TEXT-INDENT: 30px">TABLESPACE ts_dba01_2004q1)</p><p style="TEXT-INDENT: 30px">这是创建分区的语句，指定指照日期进行分区，例如：</p><p style="TEXT-INDENT: 30px">日期&gt;='2004-01-01'并且&lt;'2004-04-01'（即2004年第一季度）的数据放在dba01_2004q1分区内。其他分区也依此原则建立。</p><p style="TEXT-INDENT: 30px">（3）分区表的扩充</p><p style="TEXT-INDENT: 30px">在2004年年底，向表中加入2005年的表空间，同样是每季度一个表空间，预计每个分区为200MB。下面是创建2005年第一季度表空间的操作语句，指定表空间名称、数据文件名称及大小等。</p><p style="TEXT-INDENT: 30px">CREATE TABLESPACE ts_dba01_2005q1</p><p style="TEXT-INDENT: 30px">DATAFILE '/home2/oracle/dba01_2005q1.dat'SIZE</p><p style="TEXT-INDENT: 30px">200MB</p><p style="TEXT-INDENT: 30px">DEFAULT STORAGE (INITIAL 40m NEXT40m)</p><p style="TEXT-INDENT: 30px">MINEXTENTS 3 PCTINCREASE 0）</p><p style="TEXT-INDENT: 30px">其他季度表空间也如此建立。</p><p style="TEXT-INDENT: 30px">（4）为表添加表空间</p><p style="TEXT-INDENT: 30px">操作语句如下：</p><p style="TEXT-INDENT: 30px">ALTER TABLE dba01</p><p style="TEXT-INDENT: 30px">ADD PARTITION dba01_2005q1</p><p style="TEXT-INDENT: 30px">VALUES LESS THAN(TO_DATE('2005-04-01','YYYY-MM-DD')</p><p style="TEXT-INDENT: 30px">TABLESPACE ts_dba01_2005q1;</p><p style="TEXT-INDENT: 30px">（5）删除不必要的分区</p><p style="TEXT-INDENT: 30px">采油厂规定：必须保存15个月的日度数据在线。到2005年，必须把2003年3季度的数据备份，将该分区删除，腾出空间供后续数据循环使用。删除分区ALTER TABLE dba01 DROP PARTION dba01_2003q3;</p><p style="TEXT-INDENT: 30px">利用操作系统工具删除这个分区所占用的文件</p><p style="TEXT-INDENT: 30px">oracle$ rm /home2/oracle/test/dba01_2003q3.dat</p><p style="TEXT-INDENT: 30px">（6）查看分区信息</p><p style="TEXT-INDENT: 30px">可通过对数据字典USER_EXTENTS进行查询，操作如下：</p><p style="TEXT-INDENT: 30px">SVRMGRL&gt;SELECT *FROM user_extents</p><p style="TEXT-INDENT: 30px">WHERE SEGMENT_NAME='dba01';</p><p style="TEXT-INDENT: 30px">（7）卸载分区</p><p style="TEXT-INDENT: 30px">Oracle9的EXPORT工具可卸载分区并导出数据，例如到2002年，可将2000年的数据按分区卸载。</p><p style="TEXT-INDENT: 30px">例如：要卸载2003年3季度的数据，数据如下：</p><p style="TEXT-INDENT: 30px">oracle$ exp tycx/***</p><p style="TEXT-INDENT: 30px">tables=dba01:dba01_2003d3 file=dba01_2003q3.dmp</p><p style="TEXT-INDENT: 30px">在语句中要指定用户名、口令、需要卸出的表名及分区名、卸出文件名称等。</p><p style="TEXT-INDENT: 30px">（8）导入分区</p><p style="TEXT-INDENT: 30px">Oracle9的IMPORT工具可导入分区并加载数据，例如在2005年，用户要查看2003年的数据，必须导入该年数据。</p><p style="TEXT-INDENT: 30px">·建立该表2003年的四个表空间和相应的分区；</p><p style="TEXT-INDENT: 30px">·下面是导入2003年3季度分区数据的操作语句：</p><p style="TEXT-INDENT: 30px">oracle$ imp tycx/***</p><p style="TEXT-INDENT: 30px">file=dba01_2003q3.dmp tables=(dba01:dba01_2003q3)</p><p style="TEXT-INDENT: 0px"><b>4 实验效果</b></p><p style="TEXT-INDENT: 30px">（1）能够成倍提高查询速度</p><p style="TEXT-INDENT: 30px">分区管理后，服务器可以进行智能的分区检测，跳过与查询无关的分区访问，跳过不在线的分区。</p><p style="TEXT-INDENT: 30px">（2）增强系统可用性</p><p style="TEXT-INDENT: 30px">如果表的一个分区由于系统故障而不能使用，其余好的分区仍然可以使用。</p><p style="TEXT-INDENT: 30px">不同分区可以跨表空间存储，降低了磁盘损坏带来的数据不可用性。</p><p style="TEXT-INDENT: 30px">以油井日数据表为例：</p><p style="TEXT-INDENT: 30px">不采用分区技术时，若表空间文件受到破坏，会影响到所有数据都无法使用，必须将该表全部记录（多达100万条）重新恢复，工作量很大，恢复期间用户根本无法查询数据，完全不能使用。</p><p style="TEXT-INDENT: 30px">而采用分区技术后，由于整个表已按季度拆分为6个分区，因此当某一个表空间文件被破坏，则仅是该分区表空间所对应的季度数据无法使用，其他季度数据仍然可以正常使用，对用户的查询以及其他应用影响不大。</p><p style="TEXT-INDENT: 30px">通过合理应用Oracle9的分区功能，可以大大改善系统的性能，降低大表数据管理和维护的工作量，对大表的查询、增加、修改等操作可以分解到表的不同分区并行执行，可使运行速度更快。对促进无纸化办公，辅助生产有积极的推动作用。 </p><p align="center"><br /></p><p /><br />
]]>
</description>
</item><item>
<link>https://atim.cn/post/51/</link>
<title><![CDATA[产品开发模式管理网站开发 ]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sat, 18 Feb 2006 02:33:23 +0000</pubDate> 
<guid>https://atim.cn/post/51/</guid> 
<description>
<![CDATA[ 
	<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在开始做</span><span lang="EN">http://133.newsky.cn</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前，我已经明白网站的开发与产品开发没有什么不同。不过在</span><span lang="EN">2004</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年离开微软中国研发中心</span><span lang="EN">Office</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组的时候，我对网站开发仍一无所知，这主要是因为我之前没有任何互联网研发的背景。虽然对传统软件产品的研发管理比较有经验，但从未接触过</span><span lang="EN">Internet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关的项目。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从零开始与网站开发亲密接触</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">去年我接手第一个网站项目</span><span lang="EN">http://www.okooo.com</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发时，并没有做网站的经验，只能试着按照以前我参与做</span><span lang="EN">Microsoft Office</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时的方法来做：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先是打造一个便于公司内部沟通交流的内部网，其中包含“传统软件”研发需要的三个工具：文档库（存放公司各项目的文档）、</span><span lang="EN">CVS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（保存项目的各种源代码）、</span><span lang="EN">BugFree</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（记录项目的各种缺陷）；</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，抓住“需求、开发、测试”三个环节：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要做好规划、明确需求。</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为什么要做这个网站、要达到什么目标？特别是需求，要详细到每个页面的每个区域放置什么内容。网站需求应该由对业务最熟悉的人来定义，他负责按照我要求的规范（详细程度）来写出每一部分需求文档，并放入文档库中。每完成一个页面定义，我就召集开发、测试人员来阅读、讨论，这样全部需求写完的时候，项目组成员对整个网站就有了一个清晰的认识。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需求明确才进入开发阶段。</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先是定义数据库——有多少张表、每张表中有多少个字段。我和开发组长反复讨论，搞清楚这些表定义能否涵盖全部需求，这是最关键的一步，决定着下面编码能否顺利进行。数据库定义后，就是网站后台管理的编码实现，也就是对一张张表进行管理（增、删、改）。当后台管理完成时，项目的大部分就大功告成了。用户看到的前台页面仅仅是内容展示——把一张张表中的数据取出来按照最初的需求放置到页面的各个位置。所有的代码都用</span><span lang="EN">CVS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">管理起来。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站测试和开发同步进行。</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后台管理每完成若干张表的管理，测试人员立即开始测试。这就像流水线，开发完一部分，立刻测试；同样的，网站前台展示开发时也一样需要测试人员跟进。发现的每一个</span><span lang="EN">Bug</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都用</span><span lang="EN">BugFree</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记录下来跟踪处理过程。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据统计跟上。</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站后台各个表的任何改动要准确记录，决不允许出现不知道谁修改了数据库内容的情况。其次，网友访问网站的日志要做好统计，每天结束的时候就能准确的看到当天的用户访问数据。这些数据对网站运营极其重要。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四个月后，我的第一个网站项目顺利上线。所有参与该项目的同事感觉都很新鲜，因为以前他们在做网站时，基本上是一个人“包干”一个频道，简单构思一下就开始写程序、边写边想、相互独立。后来，我跟一位曾在某门户网站工作过的高级工程师朋友介绍了上面的做法，他非常认同和赞赏，得到他的认可我也很兴奋。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">随后接触到的很多网站技术人员，让我发觉作坊式做法同样存在于互联网公司，网站在重复多年前传统软件的老路：一个“大虾”很厉害，搞定一个频道或一个网站的方方面面，离开他谁都玩不转；代码中处处留着他的灵感，人走了，网站维护就成了大难题：没有文档、没有统一的编码规范、没有测试记录。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实无论传统软件、网站、还是游戏等等软件产品</span><span lang="EN">/</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项目，都是程序员用一行行代码敲出来的，只要像微软软件研发那样抓住需求、开发、测试这三个环节，其管理都极其类似。因此当我进入</span><span lang="EN">http://133.newsky.cn</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站项目的时候，信心十足：我能把它管好！</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打造一个网站开发的品牌项目</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="18" month="2" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">2</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">18</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体">：项目启动，开始整体规划</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在我加入金环天朗的时候，这个网站就已经存在了，而最开始的计划也只是对原有的网站进行局部改版。但是等我深入了解后，大吃一惊：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">u<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规划／需求：原有网站没有经过认真规划就匆忙上马，只有部分的简单示意图，对于每个页面具体区域的功能描述和逻辑过程还是依赖口头沟通。没有独立的后台管理，依赖于</span><span lang="EN">WAP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">业务的后台，内容展示力不从心。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">u<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面设计：美工因为还有其它工作所以有一定程度的拖延，没有时间观念，整个设计方案没有经过整体评估，导致后来许多细节没有按照计划实现，页面设计先后由两人分头独立完成，导致部分风格不一致。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">u<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发：技术实现一直处在救火的状态，没有规划，没有步骤，没有主次之分，没有时间观念。代码的结构非常散乱，没有可用的文档查询，开发人员走了，给以后接手的人带来极大的麻烦。代码没有规范、没有注释。归结起来就是可读性很差。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">u<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试：没有任何测试，开发人员简单试一试就直接上线了！</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l3 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">u<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内容：网站内容维护没有专人负责，逐渐处于无人答理的状态。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">总之，原来的网站有太多不尽人意之处，和同类网站比起来差距较大，市场人员无法推广，技术人员很难维护，动不动就出错。只能另起炉灶，推倒重做一个全新的网站。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对一家</span><span lang="EN">SP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司而言，做网站是打通让用户消费的通道。从常远看，内容为王，但短期内通道为王：就是让用户很容易找到公司提供的内容。因为</span><span lang="EN">WAP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">业务非常依赖于运营商的门户排名，一个业务放在运营商</span><span lang="EN">WAP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">门户上，第一屏和第二屏有着本质的不同，愿意翻到第</span><span lang="EN">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">屏上的用户可能少一半或更多！所以</span><span lang="EN">SP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要想尽一切办法来摆脱对门户的唯一依赖，必须能用别的通道让用户很方便的找到你的业务。而网站就是最好的宣传通道，是公司产品最重要的展示平台。网站研发的目标就是尽快打通联通、移动用户的消费通道，把公司生产出来的产品（图、铃、文字）方便地展示给更多的手机用户。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个</span><span lang="EN">http://133.newsky.cn</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站是面向中国联通用户的，其设计目标是：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo3; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span lang="EN">1~3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年内不需要改动大框架</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo3; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司业务内容的精美展示、销售平台</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo3; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在同行中有很强的竞争力</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo3; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">老板可以拿出来给投资人演示</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了达成这个设计目标，我和项目组花了近一个月的时间来制定完整规划。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><table class="MsoTableGrid" 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" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"><td 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: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p> </p></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">规划</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">需求</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">美工</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">开发</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">测试</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-bidi-font-size: 10.5pt">运营</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><p /></span></b></p></td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="18" month="2" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-2-18</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">收到老板</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Email</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">，项目启动</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 2"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="22" month="3" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-3-22</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">完成规划</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">启动前台展示需求的定义</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 3"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="4" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-04</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始后台管理需求定义</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 4"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="12" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-12</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">完成需求定义。确定后面的时间进度：</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">6/15</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">正式上线运营！</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始后台管理页面设计</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始网站数据库的设计</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 5"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="15" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-15</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">完成“后台管理详细设计”的文档</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 6"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="16" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-16</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始后台管理的编码</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 7"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="21" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-21</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始前台展示页面设计</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 8"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="26" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-26</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">完成后台管理的编码</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 9"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="28" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-4-28</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">引入测试组，开始后台管理的测试</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 10"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="10" month="5" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-5-10</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">两名新人到岗，开始前台展示的编码</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 11"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="23" month="5" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-5-23</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">确定运营组成员及分工</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td></tr><tr style="mso-yfti-irow: 12"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="31" month="5" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-5-31</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">主要编码结束</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td></tr><tr style="mso-yfti-irow: 13"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="8" month="6" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-6-08</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">测试完毕</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开始录入内容</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td></tr><tr style="mso-yfti-irow: 14"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="12" month="6" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-6-12</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.85pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 60.9pt; 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" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">内容全部上线</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td></tr><tr style="mso-yfti-irow: 15"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="15" month="6" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-6-15</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 365.25pt; 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" valign="top" width="487" colspan="6"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; BACKGROUND: yellow; COLOR: red; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-highlight: yellow"><a href="http://133.newsky.cn/"><span style="COLOR: red">http://133.newsky.cn</span></a></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; BACKGROUND: yellow; COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma; mso-highlight: yellow">正式上线运营，向公司全体同事通报！</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td></tr><tr style="mso-yfti-irow: 16; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 60.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="81"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="22" month="6" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">2005-6-22</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 365.25pt; 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" valign="top" width="487" colspan="6"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">完成</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Postmortem(</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">项目总结</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">)</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">，为下个移动网站项目做准备</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">明确的研发流程应该是一个开发团队的固定资产，从这点上，我建立了一套项目研发流程，并为其提供工具支撑：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo5; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">认识老网站的现状、确定新网站的设计目标；对新网站的总体设计图纸进行反复讨论，确定网站研发的四个总原则（灵活的后台、以专题为网站细胞、丰富的资讯、翔实的内容）；明确人员分工、并预告项目执行的几个关键点。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo5; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在没有公司内部网的情况下，我先搭建两个工具：用于保存各种文档和源代码的</span><span lang="EN">TortoiseCVS(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户端</span><span lang="EN">)+CVS(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器端</span><span lang="EN">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用于缺陷管理的</span><span lang="EN">BugFree</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。为每个项目搭建一个</span><span lang="EN">CVS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块，其中都有四个子目录：</span><span lang="EN">Spec(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需求文档</span><span lang="EN">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN">Design(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计文档</span><span lang="EN">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN">Code(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码</span><span lang="EN">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN">Test(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试文档</span><span lang="EN">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: Tahoma"><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter" /><formulas><f eqn="if lineDrawn pixelLineWidth 0" /><f eqn="sum @0 1 0" /><f eqn="sum 0 0 @1" /><f eqn="prod @2 1 2" /><f eqn="prod @3 21600 pixelWidth" /><f eqn="prod @3 21600 pixelHeight" /><f eqn="sum @0 0 1" /><f eqn="prod @6 1 2" /><f eqn="prod @7 21600 pixelWidth" /><f eqn="sum @8 21600 0" /><f eqn="prod @7 21600 pixelHeight" /><f eqn="sum @10 21600 0" /></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /><lock v:ext="edit" aspectratio="t" /></shapetype><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_CVS.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：网站项目的</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">CVS</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后是人力资源，我在规划中提出了非常明确的人力资源需求：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前台需求定义：</span><span lang="EN">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人（蔡志宏）</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后台需求定义：</span><span lang="EN">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人（刘振飞、朱伟波）</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">美工设计制作：</span><span lang="EN">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发：</span><span lang="EN">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试：</span><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo4; tab-stops: list 21.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">?<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运营：</span><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然而，当时的情况却是项目组人员迟迟无法到位：美工只有一个兼职的、时间无法保证；只有一个开发组长；没有测试人员；网站运营人员不能确定。针对这样的情况，我的任务还包括了招聘相关人员及时到位。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在整体上完成上述工作以后，时间已经是</span><chsdate isrocdate="False" islunardate="False" day="22" month="3" year="2005" w:st="on"><span lang="EN">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">22</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了，事实上，在整个项目启动初期的准备阶段是一个非常重要的工作，清晰的项目规划也为后来的工作扫清了很多障碍。这就是俗话说的“磨刀不误砍柴工”。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="22" month="3" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">3</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">22</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体">：开始定义网站需求</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站需求特别难以确定，为了解决这个问题，我将整个需求定义划分为三个主要的部分：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span lang="EN"><p> </p></span></i></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span lang="EN">1</span></i></b><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．网站前台展示的定义</span><span lang="EN"><p /></span></i></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我首先和负责定义需求的蔡志宏确定了需求</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档模板，然后他根据首页、二级、三级页面逐个页面、逐个模块的去定义：展示什么内容，大概的模样（最终样式由美工负责）。这样每个页面都被分解成一块块的“部件”，一个“部件”由一份</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">描述，比如下面是“首页公告栏区域需求定义”</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的示意图。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_Spc.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：首页公告栏区域的需求定义</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">Spec<p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每完成若干相关联的</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我就召集美工、开发人员开会讨论（本应该也叫上测试和运营人员，但当时还没有人），大家站在不同的角度去看看有无问题，并最终确认下来。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span lang="EN">2</span></i></b><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．联通用户消费流程的定义</span><span lang="EN"><p /></span></i></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户消费流程涉及到收费问题，必须把每个细节都要搞清楚。这个需求由我负责，先形成一份</span><span lang="EN">PPT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档，在大范围内征求大家的意见，然后细化每个细节：从用户访问我们的首页开始，如何登录，如何转向联通网站，如何扣费等每个细节必须想到。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span lang="EN"><p> </p></span></i></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span lang="EN">3</span></i></b><b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．网站后台管理的定义</span><span lang="EN"><p /></span></i></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><span style="mso-tab-count: 1">       </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据网站前台的需求，我和开发组长朱伟波来设计数据库定义，确定多少张表、每张表中有什么字段。然后从运营人员的登录页面开始设计，用</span><span lang="EN">PPT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把每张页面的示意图以及逻辑关系都展示出来，然后把需求、开发、美工召集起来一起讨论，看看是否符合运营人员的习惯、是否有遗漏的地方。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需求文档要想清楚后再写下来，让别人读得懂。定义好的需求</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是整个项目开发的“合同”，马虎不得。在需求定义的</span><span lang="EN">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周中（其中前台展示的需求用了</span><span lang="EN">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周、后台管理的需求用了</span><span lang="EN">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周），每写出来若干相关的需求文档，就在项目组内讨论一次，最终明确下来。需求文档一旦成型以后，就必须严格按照需求文档编写设计代码，尽量控制需求的变化。这不但要求我们在最开始的需求分析阶段做好最充分的准备工作，而且还需要作为项目经理的我，顶住一些来自各方意见的压力。幸运的，我们团队还是非常好的坚持下来了：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_Online.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：上线后的首页公告栏区域——完全根据</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">Spec</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的需求定义来实现</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然而，另外的一个问题是，需求文档很容易“老旧”、跟不上最新的变化，需求定义人也懒得去更新，因为开始编码后谁都不去注意需求文档了。为了解决这个问题，我就在后台管理的每一张表的维护页面上，增加一个“</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”按钮，点击后就可以看到相关的需求文档</span><span lang="EN">Spec</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">列表了。这样做有两个好处：一方面运营人员可以很方便的看到最初是怎么设计这块功能的；另一方面也把需求定义者的工作暴露在全体同事面前，文档写的好坏是一目了然。</span></p><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p><p /></span><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_Spc1.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_Spc2.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：每个后台表管理页面上都有个</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">Spec</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按钮，指向对应的需求文档列表</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">充分的需求定义保证了整个项目能够准时完工，这也是我们这个项目能够取得圆满成功的原因之一。需求确定之后，后面开发、测试的时间就基本明确下来了。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="12" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">4</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">12</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：数据库设计，正式编码开发</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有了完整的需求文档后，接下来就进入开发阶段。如同前面提及的，首先需要完成的是数据库的设计。其实早在需求定义期间，我和朱伟波就已经开始数据库定义，确定多少张表、每张表中有什么字段。我们花费了三天左右的时间来对后台数据库进行详细的设计，并产生出设计文档。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_db.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：新天地网站</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">2005</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版后台数据库定义</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">.doc</span></b><span lang="EN"> </span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然而，光有需求和详细设计文档还不够，开发团队需要保持要一种一致的风格，这一点要求所有的程序员对代码有责任感。因此在这个阶段之前（</span><span lang="EN">3/16~4/12</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），我就让公司所有的</span><span lang="EN">Java</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工程师多次讨论，并最后确定一份“编码规范”，这样网站真正开始写代码的时候，就有一个明确的规范来约束代码的书写。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于软件项目来说，经常会有一些出乎意料的情况发生。比如，本来计划有两个开发人员做后台管理，结果因为沈阳联通的一个合作项目需求紧急配合，只好临时抽调一个人去支援，毕竟网站是公司内部可以控制的，导致后台开发只有朱伟波一个“光杆司令”，那一段他连续十余天加班到晚上</span><span lang="EN">11:30</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">！这样高强度、高压力的工作状态，不是每个程序员都能承受的。经过朱伟波的努力，终于在十天时间内将所有的后台编码全部完成（</span><chsdate isrocdate="False" islunardate="False" day="16" month="4" year="2005" w:st="on"><span lang="EN">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">16</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至</span><chsdate isrocdate="False" islunardate="False" day="26" month="4" year="2005" w:st="on"><span lang="EN">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">26</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">紧接下来，从</span><chsdate isrocdate="False" islunardate="False" day="10" month="5" year="2005" w:st="on"><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">10</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始，专门为网站开发配备的两个</span><span lang="EN">Java</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员到位，朱伟波首先给他们介绍后台管理和</span><span lang="EN">Struts</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术。随后分工：首页、</span><span lang="EN">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个铃声二级、</span><span lang="EN">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个图片二级、杂志、热门推荐、精彩专题等，每人承担几个频道的实现，分头阅读对应的需求文档并随时找蔡志宏讨论不清楚的地方。当理解需求之后，由朱伟波协调，三个人分头开始进行前台展示页面的编码工作，加班加点，在</span><chsdate isrocdate="False" islunardate="False" day="31" month="5" year="2005" w:st="on"><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">31</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基本结束。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="28" month="4" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">4</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">28</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：与开发并行的测试</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在这个项目之前，整个公司是没有测试人员的！这不得不让我大为惊讶，一个</span><span lang="EN">SP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司没有测试怎么行！所以在这个项目进行的同时我启动测试人员招聘工作，最终成立了一支</span><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">人组成的测试组，负责所有业务的测试。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当网站后台管理编码完成后，</span><span lang="EN">4/28</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">立即启动测试工作：后台管理中的首页管理、动画、声音、彩图、专题、资讯由专人负责测试，发现一个问题就在</span><span lang="EN">BugFree</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中记录一个</span><span lang="EN">Bug</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。通过</span><span lang="EN">BugFree</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的跟踪和记录，可以让某些问题不必累积到最后才解决。随着网站前台展示开发在</span><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月中旬启动，测试工作也在并行跟进：每个频道、每个页面都有专人负责检查，这样尽可能的把各种潜在的问题揪出来，免除后患。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_bug.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：用</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">BugFree</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来管理网站项目中的</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt">Bug<p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很遗憾的是，因为测试组搭建的比较晚、测试任务又比较重，他们需要花费很长时间去熟悉公司的各种业务，所以在这个网站项目中，对测试文档部分（比如测试用例）我并没有要求，只要把问题发现出来上</span><span lang="EN">Bug</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就好了。这就是项目管理中的</span><span lang="EN">Trade-Off</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：抓住主要矛盾、抓大放小。这个项目结束后，测试组已经逐步成熟、磨合好了，我才开始强调测试文档的重要性，每个业务测试时一定要同步完成相关的测试文档（计划、用例、测试结果等），测试时就按照相关的测试文档进行。这样以后复测就能省掉很多时间，换个人测试也很方便上手。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">经过一个多月的努力，测试组的同事基本上完成了网站所有频道、页面的检查工作（</span><chsdate isrocdate="False" islunardate="False" day="8" month="6" year="2005" w:st="on"><span lang="EN">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="23" month="5" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">5</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">23</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：迟到的运营组开始运转</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">研发人员做出来的网站只是一个空空的框架，没有实际的内容填上去，网站就无法上</span><span style="FONT-FAMILY: 宋体">线——打个比方，研发人员把“大楼”盖好了，还需要运营人员把“内部装修”做好</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。然而面对人员的稀缺和内部调整，一直到</span><chsdate isrocdate="False" islunardate="False" day="23" month="5" year="2005" w:st="on"><span lang="EN">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">23</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才确定运营组长及组员分工，他们匆匆进入角色，一面熟悉网站后台管理，一面准备内容。</span><chsdate isrocdate="False" islunardate="False" day="8" month="6" year="2005" w:st="on"><span lang="EN">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">8</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才开始正式的网站内容录入。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在此期间，整个项目组都进入了最后的冲刺阶段。为了确保</span><chsdate isrocdate="False" islunardate="False" day="15" month="6" year="2005" w:st="on"><span lang="EN">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">15</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站能够上线，我开始将工作日往后倒推，每一周甚至每一天，需求、美工、开发、测试、运营等环节需要到达什么状态，必须做到心中有数；每天都要盯着进度，一旦有了延误，必须立即找到原因和补救方法。如果实在忙不过来，我就要做出决定砍掉哪些可以延缓的功能模块。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img alt="" hspace="0" src="http://editblog.csdn.net/images/editblog_csdn_net/programmer/130/o_log.JPG" align="baseline" border="0" /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">示意图：项目最后突击的日志</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 9pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><chsdate isrocdate="False" islunardate="False" day="15" month="6" year="2005" w:st="on"><b style="mso-bidi-font-weight: normal"><span lang="EN">05</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN">6</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">15</span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></b></chsdate><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：网站正式上线！</span><span lang="EN"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">值得庆祝的日子到来了。</span><chsdate isrocdate="False" islunardate="False" day="15" month="6" year="2005" w:st="on"><span lang="EN">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">15</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日凌晨</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我正式向全公司同事报告这个网站正式上线。这是我自己主持研发的第二个网站，也是我非常用心管理的一个项目。我想留下一个参考样板，为公司其他项目的管理摸索经验。我认为这是一个成功的项目是因为：</span><span lang="EN"> </span></p><div style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-element: para-border-div"><p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt 21pt; BORDER-LEFT: medium none; TEXT-INDENT: -21pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-list: l2 level1 lfo6; tab-stops: list 21.0pt; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">ü<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做出来的网站符合最初的规划和需求定义；</span></p><p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt 21pt; BORDER-LEFT: medium none; TEXT-INDENT: -21pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-list: l2 level1 lfo6; tab-stops: list 21.0pt; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">ü<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按照需求定义完成的时候</span><span lang="EN">(<chsdate isrocdate="False" islunardate="False" day="12" month="4" year="2005" w:st="on">4<span lang="EN" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN">月</span></span>12<span lang="EN" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN">日</span></span></chsdate>)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">确定的进度向前推进，</span><chsdate isrocdate="False" islunardate="False" day="15" month="6" year="2005" w:st="on"><span lang="EN">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">15</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上线是两个月前就确定的；</span></p><p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt 21pt; BORDER-LEFT: medium none; TEXT-INDENT: -21pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-list: l2 level1 lfo6; tab-stops: list 21.0pt; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 1.0pt 4.0pt 1.0pt 4.0pt"><span lang="EN" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">ü<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整个项目执行过程中，规划、需求、开发、测试等环节均按照预定轨道前进，没有出现大的纰漏。</span></p></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整个项目组成员在网站上线后都非常兴奋，这应该是公司到目前最成功的一个项目管理实践。公司领导对这个项目的研发表示非常满意。现在的情况是，休整</span><span lang="EN">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周后，</span><chsdate isrocdate="False" islunardate="False" day="4" month="7" year="2005" w:st="on"><span lang="EN">7</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按计划我们又启动了第</span><span lang="EN">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">步移动网站的研发；另外对历史遗留的众多</span><span lang="EN">WAP</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">业务的整理开始提上议事日程。我需要更多时间、耐心和细心，和需求、开发、测试等各个环节的同事们密切配合，把公司各个业务的项目都理出头绪来、让研发部为公司业务的不断成长做出贡献，也让技术人员工作“累身不累心”，不要总是“救火”，要能看到辛苦工作的成效。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网站和产品开发没有什么不同！</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt"><p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按我整理的时间表和项目计划，对照微软的流程，你会发现，我完全是按照微软“传统软件”的研发流程去管理这个网站项目，略有不同的地方是，这个网站项目的时间跨度比较小（只有</span><span lang="EN">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个月），而且人力资源有限，美工、开发、测试三个环节我只能是并行处理、流水作业，以尽量缩短项目的整体时间。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 460pt; 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" cellspacing="0" cellpadding="0" width="613" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"><td 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: 50.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="67"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p> </p></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 110.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="148"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">规划和需求阶段</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 72pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="96"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开发阶段</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="156"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">测试阶段</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="146"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">发布阶段</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN" style="FONT-SIZE: 14pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></b></p></td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 50.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" valign="top" width="67"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">主参与人</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 110.8pt; 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" valign="top" width="148"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Planner</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">与</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">PM</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">驱动</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 72pt; 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" valign="top" width="96"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">开发人员推动</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 117pt; 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" valign="top" width="156"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">测试人员推动</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.8pt; 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" valign="top" width="146"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">PM</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">，产品经理，运营管理等执行</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td></tr><tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 50.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" valign="top" width="67"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">阶段成果</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: Tahoma"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 110.8pt; 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" valign="top" width="148"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">目标描述</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"> (Vision)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">详细需求文档</span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"> <span lang="EN">(Spec)<p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">日程进度表</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 72pt; 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" valign="top" width="96"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">M1, M2, </span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; mso-ascii-font-family: Tahoma; mso-bidi-font-family: Tahoma">…</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Code Complete<p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 117pt; 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" valign="top" width="156"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: Tahoma">集成测试</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Bug-Fix, Check-in<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Dogfood <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Beta1, beta2, </span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; mso-ascii-font-family: Tahoma; mso-bidi-font-family: Tahoma">…</span><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'"> (Triage)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Zero Bug Release<p /></span></p></td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.8pt; 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" valign="top" width="146"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Show-Stopper bug<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Release Candidate(RC)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">Sign-off<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: Tahoma; mso-hansi-font-family: 'Times New Roman'">RTM (Ready To Release)<p /></span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我也算是“把微软先进的软件研发理念和中国中小企业的具体情况相结合”吧，其中最难的是把项目研发流程的理念灌输给全组同事以统一认识，并能有效的执行下去。很多时候要靠我不断的去</span><span lang="EN">PUSH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">各个环节，做的比较累，但在完成之后，很有成就感，尤其是针对一个团队不断发展和成熟，所做的努力是显而易见的。（未完待续）</span></p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/52/</link>
<title><![CDATA[是思考还是思想]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sat, 18 Feb 2006 02:31:25 +0000</pubDate> 
<guid>https://atim.cn/post/52/</guid> 
<description>
<![CDATA[ 
	<p align="left"><font size="4"><strong>1.软件工程三要素的价值</strong></font><br />      思考问题的方法可以是由点及面的，也可以是统揽全局的。换成业界最常用的词汇，就是“自上而下”还是“自下而上”的区别。<br />      “牛屎图”中描述的工具、方法与过程也被称为软件工程的“三要素”。在本书中他们被分解开来思考——并不是要孤立这三个层面，它们实际上是相互作用的。例如“过程”问题，既有实施过程的工具，也有相关的过程方法理论。虽然说方法是“基于一种数据结构的编程实践的结果”，但这是一种非常狭义的定义。这个定义在过程的开发环节是有效的(或者说对“开发方法”的定义)，然而“需求”、“设计”、“测试”等其它环节也有各自的方法论。即使站在具体环节之外，过程本身也有方法论的问题，这还不包括管理方法等等在内。<br />      由于方法在过程环节以及过程总体层面上具有贯通性，因此保证“方法(或其行为)”实施的“工具”也会出现在过程的各个环节和层面上。这样得到的软件工程模型将不是经典的、层状的“牛屎图”，而可能像太极图一样由阴阳交汇而生万物。为了不使读者认为我已经入了道家理论的歧途，这样的一副图还是交由你们自己去画吧。只不过应该清楚一点，即使画出了太极图的软件工程模型，所见到的仍旧是工程的细部环节，就如同以管窥豹一般——斑是斑，豹是豹。<br />      把每一个“管见”拼合起来，得到的才能是“豹”，而不是“斑”。所以尽管本书割裂了软件工程的各个要素，并从每个孤立的层面来审视。然而实质上，应该回归到软件工程的本体上来思考问题，而不是仅关注于每一个局部的要素。<br />      工程的整体问题仍旧是“实现”。</p><p align="left"><font size="4"><strong>2.RUP就是“杂物箱”<br /></strong></font>      我也许总是在批评RUP，但是不得不承认它是对前人在软件过程思想方面的高度包容。请注意我用“包容”这个词，而不是按照语言习惯那样用“概括”。因为如果是“高度概括”，那就应该把目光投向瀑布模型，而RUP其实就像一个杂物箱一样“包容”了全部的已知理论。<br />      可以把RUP定制成其它任何模型所表述的过程形态——RUP本身的特质决定了这一点——因而它也如同一个杂物箱一样放满了各种希奇古怪的东西：你可能从这个杂物箱里面拿出了一把剪刀，或一只苍蝇拍，或者是一根钓杆……<br />      面对“软件开发”这样的需求，钓杆能有什么作用呢？在你扔掉它之前，请转换一下思维：钓杆可能带给你的团队以精神上的激励。如果你能意识到这一点，那么它将立即转化为生产力——请把钓杆挂在开发部的墙上。<br />      RUP能不能被用起来，将取决于你刚才那个挑挑捡捡的行为，以及在你拿到“钓杆”后的辨识能力与组织能力。</p><p align="left"><strong><font size="4">3.UML与甲骨文之间的异同</font></strong><br />      在你真的打算用“甲骨文”来写项目文档之前，请先弄明白UML与甲骨文之间的异同。在本书里，它们都被做为沟通的工具。因此，目标是沟通，而不是“选用工具”。更进一步的推论是：即使你因为个人喜好而选择了甲骨文，也不要试图在结绳记事的原始人面前去用它。UML与甲骨文都是符号文字，都具有像形含义。然而，这并不表明UML符号本身能表达多么丰富的含义。如果要像甲骨文一样用几代人、上千册的论著去解释它，那么UML图的价值也就只剩下象征性意义了。<br />      出于沟通的必要，UML语言的象征意义在一个图中应当被表述得足够准确和详细，以致对于不同的阅读者来说都提供了充足的信息。然而，一方面UML的规范中没有提供一个标准来衡量“怎样的UML图是描述充分的”；另一方面，UML作为一个语言，也无法直接在某个硬件平台中被语法检错和调试。所以在工程中使用UML图，应该有相应的文字来描述它。而且，这种描述与图之间的对应关系要持续地维护下去。如果这种关系松散了、断裂了，那么下一个阅读UML图的人所面对的将是无异于甲骨文出土时的困境。好在做UML图的那个工程设计人员(在辞世之前)还有机会为这些古怪符号写下规约。</p><p align="left"><strong><font size="4">4.经营者离开发者很远，反之亦然</font></strong><br />      使我第一次意识到EHM模型反应了角色所关注的不同视角的人，是我的老板。<br />事实上，他是一个完全不懂软件技术的老板。在EHM模型中，他所处于的位置在最右端，而开发者在最左端，在二者之间没有相同的关注界面(关注点)。EHM真实地反应了“老板不懂技术”的合理性，同样也真实地反应了“开发者转型为老板”的道路将是相当地漫长与艰难。<br />      于是，担任中间角色的项目经理就有了一种使命：协调经营者与开发者之间的沟通。例如招来一名开发高手，对于公司的运作并不会有深入的影响(当然，如果你招来了Anders Hejlsberg就另当别论)。因此，我甚至不需要与BOSS讨论这名高手的来历及作用。同样，与一个技术分析人员讨论一个产品的技术价值、市场价值之间的差异，以及市场运作方式与技术实现手段的无关性是毫无必要的。<br />你要理解这种根源：角色的关注层面完全不同。</p><p align="left"><strong><font size="4">5.矛盾：实现目标与保障质量</font></strong><br />      在需求阶段我们会面临“目标”的问题,然而在大多数时候，与此相反的是我们会在项目交付和试用时才会碰到客户在质量上的投诉。<br />      需求人员会把所有的责任归咎到开发人员，而开发人员又不停地埋怨需求的不清不楚或者变更的没完没了。如果正巧需求和开发都是由同一个人或者同一小组来做的，那么他们便会开始埋怨客户的苛刻以及工期的紧张。<br />总之一件事，没有人会跳出来说：我们原本就错了。然而，事实上根本问题可能是：我们把目标定错了。<br />      可以看到，在项目的平衡三角(时间、资源和功能)中讨论的是目标问题，但并不讨论质量问题。也就是说，经典教材中总是关注如何更快的完成项目，并减少资源占用，以及实现更多的功能。但是，即使平衡了这种关系，项目的结果仍可能产生一个天生的残障。因为目标可能在平衡中确立，但质量却要在过程中控制。即使在时间、资源和功能三者中取得了平衡，并且客户、项目组和公司同样满意于这个平衡“目标”，但它仍然有可能是“不能实施”的。<br />      如果原定的目标本身就过大，那么无论如何平衡这三者之间的关系，其结果仍旧是保障不了质量。<br />      问题是：又有谁愿意在最初签订协议的时候，就降低或者放弃协议标准呢？</p><p align="left"><strong><font size="4">6.枝节与细节<br /></font></strong>      前面说到目标和质量的问题时，提及“平衡时间、资源和功能三者的关系”。这其实是一个实施过程中的细节。或者说，它是一个具体的方法，而不是目的。<br />      所以我们通常所说的细节，其实是对实施方法的一些有限量的描绘。比如“软件工艺”概念本身的提出，就是考究“细节问题”的。从这个角度上来说，我并不反对“细节决定成败”的观点。但请注意一个前提：这是技术或方法的细部。<br />      我在前文中一再地混用了“细节”与“枝节”这两个词。枝节是事实发展的次要的分枝，它不涉及行为本身，也不是对行为本身的考量。因此我在前面的文字中说到“跳出细节”，本意是“跳出枝节”——细节只有做到何种程度的问题，而并不是关不关注(或做不做)的问题。<br />大多数情况下，管理人员有责任去审核、评估其它成员的工作成果。这个时候可以讨论“细节决定成败”类似的问题，因为这决定了产品的最终质量，而质量是工程的目标之一。<br />      而在另一些情况下，例如管理人员做事件决策的时候，就必须要学会忽略枝节问题。<br />      混淆这两个名词的使用，其根本原因在于一大部分读者并不能区分“细节”与“枝节”。从惯于“实做”的程序员一路走来的工程人员，很难分清自己什么时候是在“工作”，而什么时候是在“决策”。<br />      因此我只好用最笨的方法提示管理者：别管它是细节还是枝节，只要你感到你的脚趾已经沾上了泥淖，就快点回头。<br />      用脚趾去感觉，有时比用头脑去思维来得有效。</p><p align="left"><strong><font size="4">7.灵活的软件工程</font></strong><br />      并不像现代人想象的那样，古诗词一定是“逐字论平仄”的。变化或者变通，其实是常见之事。因此古词谱中，才常会见到冠以“摊破”、“减字”、“添字”等字的词格。然而古人在词格上的这种变通，是基于“音律”的。通常说的词律是指词格，这与音律是两回事。词律(格)是平仄，音律则是乐器、音调与歌舞。古词中用来吟唱与歌舞的词牌就不能混用，律不同，调不同，如是之。然而古词的音律(亦即是律谱)已经失传了，也就是说，今天的词是用来读的，不是唱，也不是舞，甚至连吟哦也不是。所以今人总是拿普通话中的一、二声作为平声，三、四声为仄声来填词，并以此论平仄，而全然不想词的格律的根基是“词律”与“音律”这两个部分的融合。<br />      我曾经参与过一个讨论，叫“古人是如何说话的”。在我看来，古人做文章和说话是两回事，文章中之乎者也，日常交流中还是市井俚语的。因此评论中会说“以俚语入词”。也可见填词做文章与说话毕竟是不同。再者，说话也存在方言的问题，因此方言之间平仄音调也不尽相同。古代的歌妓是要求会“官话”的，这相当于现在“普通话”的地位，她们歌唱起来，也是用的“官话”。<br />      更进一步的推论是：古代的词律中的平仄是以官话为基础的。然而如今的普通话毕竟不是古时的“官话”。也就是说，即使我们以普通话的四声为基础讨论平仄，在古人看来，也是可笑的，这样做出来的词依旧不可唱，也不可读。因此今人做词的标准是应该重定的了，除了词格(这里仅指字句的格式)和用韵之外，其它的部分是无法遵循的了。在各自的平仄以及句式上，应当以“能通顺”和“能品味”为准，风格上则以古雅为益。<br />      仅此而已。<br />      对于我这样的格律观点，一位网友曾有一句“未蕴而变，自欺也；知律而变，智者之道也”，实为良言。变向不变求。不变者，万变之所源，亦万变之所归。习诗词之法度，若蚕虫之结茧，若无结茧于前，何有破茧于后？故，知律而变，智者之道也。<br />      “知律而变”中的“律”字，若解释为“规律”，便是可以用于软件工程中了。“道”是规律，如果明“道”，而可以变化无穷，这样做软件工程才是活的。就如同今人难于填词一样，不明道，则不明智，不明智则无所以为，因而在软件工程实施中不可避免地盲目与停滞。<br />      “知律”的另一层意思，是在于“知道原理”。明白“为什么要这样”或者“为什么不是那样”。这在软件开发中是常见的问题，大多数人不知究竟地使用着技巧和方法，而一旦出了问题，则归咎于这些技巧和方法的不好。而真正的问题在于，这些人(我们通常叫做Copy&amp;Paster)并不知道这些技巧、技术和方法的原理，因而不知道变通，也不知道回避错误。<br />      死读一本《软件工程》的人不会做真正的软件工程，所以我写了本书，聊做软件工程实践者的思想之著。</p><p align="left"> </p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/58/</link>
<title><![CDATA[无限分类(无递归) + 无限联动 + 树状显示(多显示方式) +导航输出 +批量移动 正式版1.1]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sat, 11 Feb 2006 04:57:16 +0000</pubDate> 
<guid>https://atim.cn/post/58/</guid> 
<description>
<![CDATA[ 
	主要功能：<br/> 不使用递归，直接采用order by按级排序；<br/> 支持无限分类；<br/> 显示类别时可设置从某类别下开始显示，以及设置是否显示子分类；是否带格式输出；<br/> 支持从任何目录的导航输出；<br/> 批量移动分类，批量移动文章,改写关联属性；<br/> 添加文章内容时，要存放亲缘树序列，目的：当选择某一分类查看时，可设置其子分类的文章是否也显示出来。 <br/><br/>程序：无限分类(无递归) &nbsp;+ 无限联动 + 树状显示(多显示方式) +导航输出 +批量移动 正式版1.1<br/>作者：欣然随风（QQ：276624915）<br/>时间：2005-10-28<br/><br/><br/>主要功能：<br/> 不使用递归，直接采用order by按级排序；<br/> 支持无限分类；<br/> 显示类别时可设置从某类别下开始显示，以及设置是否显示子分类；是否带格式输出；<br/> 支持从任何目录的导航输出；<br/> 批量移动分类，批量移动文章,改写关联属性；<br/> 添加文章内容时，要存放亲缘树序列，目的：当选择某一分类查看时，可设置其子分类的文章是否也显示出来。<br/><br/>数据表字段参考：<br/> class_id &nbsp;类别i++号<br/> class_kiss &nbsp;亲缘树序列（资源内容指向此作为奴属，格式1:1:1.. 包括自己当前序列）<br/> class_base &nbsp;根分类序列<br/> class_son &nbsp;子分类序列<br/> class_tier &nbsp;分类所在层<br/> class_name &nbsp;分类名称<br/><br/>其它：<br/> 填写好数据库信息类便可直接运行。 <br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>类文件：sort_class.php<br/><br/><?php<br/><br/>// 数据库信息类<br/>class db<br/>&#123; <br/> const mysql_hdb = "localhost"; // 数据库主机名<br/> const mysql_udb = "root"; &nbsp; // 数据库用户名<br/> const mysql_pdb = "jjfzzzm"; &nbsp;// 数据库密码<br/> const mysql_ddb = "test"; &nbsp; // 数据库名<br/> static $cn; &nbsp; &nbsp; &nbsp; // 数据库连接ID<br/><br/> const table_sort = "class"; // 数据表名<br/><br/> function __construct()<br/> &#123;<br/> &nbsp;self::$cn = @mysql_connect(self::mysql_hdb,self::mysql_udb,self::mysql_pdb)<br/> &nbsp; &nbsp; or die("数据库连接失败，请联系管理员！");<br/> &nbsp;@mysql_select_db(self::mysql_ddb,self::$cn)<br/> &nbsp;or die("数据库选择失败，请联系管理员！");<br/><br/> &nbsp;@mysql_query("Set Names 'gb2312'");<br/> &#125;<br/>&#125;<br/><br/><br/>// 分类信息类<br/>class sort_info<br/>&#123;<br/> /*<br/> 方法用途： 取得某分类的信息<br/> 参数设置： $post_kiss 分类亲缘树<br/> 返回值： 父分类SQL执行号<br/> */<br/> static function sortinfo($post_kiss)<br/> &#123;<br/> &nbsp;$sql = &nbsp;"select * from `".db::table_sort."`<br/> &nbsp; &nbsp; where `class_kiss`='$post_kiss'<br/> &nbsp; &nbsp; LIMIT 1";<br/> &nbsp;return $fs &nbsp;= &nbsp;@mysql_query($sql,db::$cn);<br/> &#125;<br/>&#125;<br/><br/> <br/><br/>// 分类添加类<br/>class sort_add<br/>&#123;<br/> /*<br/> 方法用途： 添加根分类<br/> 参数设置： $post_name 分类名称<br/> &nbsp; &nbsp;$post_js 是否写入JS，默认0不写入，否则值为路径/文件名<br/> 返回值： 添加成功/失败<br/> */<br/> function sort_add_base($post_name,$post_js=0)<br/> &#123;<br/> &nbsp;//取根分类class_base的最大值<br/> &nbsp;$sql = &nbsp;"select max(`class_base`) as `class_base` from `".db::table_sort."`";<br/> &nbsp;$fs &nbsp;= &nbsp;@mysql_query($sql,db::$cn);<br/> &nbsp;$tmp = &nbsp;@mysql_fetch_array($fs);<br/> &nbsp;$nub = &nbsp;++$tmp['class_base'];<br/><br/> &nbsp;//插入新记录<br/> &nbsp;$sql = &nbsp;"insert into `".db::table_sort."` values('', '$nub', '$nub', '0', '1', '$post_name')"; <br/> &nbsp;if(@mysql_query($sql,db::$cn))<br/> &nbsp; $result = TRUE;<br/> &nbsp;else<br/> &nbsp; $result = FALSE;<br/><br/> &nbsp;//插入JS文件<br/> &nbsp;if($result and $post_js!==0)<br/> &nbsp;&#123;<br/> &nbsp; $js = new sort_show;<br/> &nbsp; $jsdata = $js->sort_js_text();<br/><br/> &nbsp; if(sort_js_write::writejs($post_js,$jsdata))<br/> &nbsp; &nbsp;echo "js写入成功！";<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "js写入失败！";<br/> &nbsp;&#125;<br/> &nbsp;return $result;<br/> &#125;<br/><br/><br/> /*<br/> 方法用途： 添加子分类<br/> 参数设置： $post_name 分类名称<br/> &nbsp; &nbsp;$post_kiss 上一层分类亲缘树<br/> &nbsp; &nbsp;$post_js 是否写入JS，默认0不写入，否则值为路径/文件名<br/> 返回值： 添加成功/失败<br/> */<br/> function sort_add_son($post_kiss,$post_name,$post_js=0)<br/> &#123;<br/> &nbsp;$fs &nbsp;= &nbsp;sort_info::sortinfo($post_kiss); &nbsp;// 查询父分类信息<br/> &nbsp;$tmp = &nbsp;@mysql_fetch_array($fs);<br/><br/> &nbsp;$class_base = $tmp['class_base']; &nbsp; &nbsp;//取得根分类<br/> &nbsp;$class_tier = ++$tmp['class_tier']; &nbsp; &nbsp;//取得当前分类所处层号<br/><br/> &nbsp;$sql = &nbsp;"select max(`class_son`) as `class_son`<br/> &nbsp; &nbsp; from `".db::table_sort."`<br/> &nbsp; &nbsp; where `class_kiss` LIKE '$post_kiss%' AND `class_tier`='$class_tier'";<br/> &nbsp;$fs &nbsp;= &nbsp;@mysql_query($sql,db::$cn);<br/> &nbsp;$tmp = &nbsp;@mysql_fetch_array($fs);<br/> &nbsp;$class_son &nbsp;= ++$tmp['class_son']; &nbsp; &nbsp;//取得当前分类在子层的排列序号<br/> &nbsp;$post_kiss .=":".$class_son; &nbsp; &nbsp; //取得当前分类的亲缘树序列<br/><br/> &nbsp;//插入新记录<br/> &nbsp;$sql = "insert into `".db::table_sort."`<br/> &nbsp; &nbsp; values('', '$post_kiss', '$class_base', '$class_son', '$class_tier', '$post_name')"; <br/> &nbsp;if(@mysql_query($sql,db::$cn))<br/> &nbsp; $result = TRUE;<br/> &nbsp;else<br/> &nbsp; $result = FALSE;<br/><br/> &nbsp;//插入JS文件<br/> &nbsp;if($result and $post_js!==0)<br/> &nbsp;&#123;<br/> &nbsp; $js = new sort_show;<br/> &nbsp; $jsdata = $js->sort_js_text();<br/><br/> &nbsp; if(sort_js_write::writejs($post_js,$jsdata))<br/> &nbsp; &nbsp;echo "js写入成功！";<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "js写入失败！";<br/> &nbsp;&#125;<br/> &nbsp;return $result;<br/> &#125;<br/>&#125;<br/><br/> <br/><br/><br/>// 分类编辑类<br/>class sort_ovr<br/>&#123;<br/> /*<br/> 方法用途： 更新分类名称/批量移动目录(连带移动子目录)<br/><br/> 参数设置： $post_kiss1 提交的该分类亲缘树<br/> &nbsp; &nbsp;$post_kiss2 提交的目标亲缘树（不移动分类则默认FALSE,移动到根值为字符串“base”）<br/> &nbsp; &nbsp;$post_name 提交的分类名（不更改则默认FALSE）<br/> &nbsp; &nbsp;$post_js 更新JS菜单 值为路径/文件名<br/><br/> 返回值： 无<br/> */<br/> public $post_kiss1; // 当前目录的亲缘树<br/> public $post_kiss3; // 移至新位置的亲缘树<br/> public $post_base; // 移至新位置的根<br/> public $post_tier; // 移至新位置层(差)<br/> public $off = 0; // 顺序执行操作开关<br/> public $len; &nbsp;// 当前亲缘树长度<br/><br/> function sortovr($post_kiss1 , $post_kiss2=FALSE , $post_name=FALSE , $post_js)<br/> &#123;<br/><br/> &nbsp;$this->len = strlen($post_kiss1);<br/> &nbsp;$this->post_kiss1 = $post_kiss1;<br/><br/> &nbsp;if($post_name !== FALSE)<br/> &nbsp;&#123;<br/> &nbsp; $sql = "UPDATE ".db::table_sort." SET `class_name`='$post_name' WHERE `class_kiss`='$post_kiss1' LIMIT 1";<br/> &nbsp; if(@mysql_query($sql,db::$cn))<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;$this->off = 1;<br/> &nbsp; &nbsp;echo "分类名编辑成功！";<br/> &nbsp; &#125;<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "分类名编辑失败！";<br/> &nbsp;&#125;<br/><br/> &nbsp;if($post_kiss2 !== FALSE)<br/> &nbsp;&#123;<br/> &nbsp; $fs &nbsp;= sort_info::sortinfo($post_kiss1); &nbsp; &nbsp;// 查询当前分类信息<br/> &nbsp; $tmp = @mysql_fetch_array($fs);<br/> &nbsp; $tier= $tmp['class_tier']; &nbsp; &nbsp; &nbsp; &nbsp;// 当前层号<br/><br/> &nbsp; // 移动到根时的处理<br/> &nbsp; if($post_kiss2 == "base")<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;$sql = &nbsp;"select max(`class_base`) as `class_base` from `".db::table_sort."`";<br/> &nbsp; &nbsp;$fs &nbsp;= &nbsp;@mysql_query($sql,db::$cn);<br/> &nbsp; &nbsp;$tmp = &nbsp;@mysql_fetch_array($fs);<br/> &nbsp; &nbsp;$this->post_base = ++$tmp['class_base']; &nbsp; //最终根分类号<br/> &nbsp; &nbsp;$this->post_kiss3 = $tmp['class_base']; &nbsp; &nbsp;//最终亲缘树<br/> &nbsp; &nbsp;$class_tier = 1; &nbsp; &nbsp; &nbsp; &nbsp; //最终层号<br/> &nbsp; &nbsp;$class_son &nbsp;= 0; &nbsp; &nbsp; &nbsp; &nbsp; //最终子类排序号<br/><br/> &nbsp; &#125;<br/> &nbsp; // 不为根的处理<br/> &nbsp; else<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;$fs &nbsp;= sort_info::sortinfo($post_kiss2); &nbsp; // 查询目标分类信息<br/> &nbsp; &nbsp;$tmp = @mysql_fetch_array($fs);<br/><br/> &nbsp; &nbsp;$this->post_base = $tmp['class_base']; &nbsp; &nbsp;//最终根分类号<br/> &nbsp; &nbsp;$class_tier = ++$tmp['class_tier']; &nbsp; &nbsp; //最终层号<br/><br/> &nbsp; &nbsp;$sql = &nbsp;"select max(`class_son`) as `class_son`<br/> &nbsp; &nbsp; &nbsp; from `".db::table_sort."`<br/> &nbsp; &nbsp; &nbsp; where `class_kiss` LIKE '$post_kiss2%' AND `class_tier`='$class_tier'";<br/> &nbsp; &nbsp;$fs &nbsp;= @mysql_query($sql,db::$cn);<br/> &nbsp; &nbsp;$tmp = @mysql_fetch_array($fs);<br/> &nbsp; &nbsp;$class_son &nbsp;= ++$tmp['class_son']; &nbsp; &nbsp; //最终子类排序号<br/> &nbsp; &nbsp;$this->post_kiss3 = $post_kiss2.":".$class_son; &nbsp;//最终亲缘树<br/> &nbsp; &#125;<br/><br/> &nbsp; $this->post_tier = $class_tier - $tier; &nbsp; &nbsp; //层差值<br/><br/> &nbsp; // 移动当前目录<br/> &nbsp; $sql = "UPDATE ".db::table_sort." SET <br/> &nbsp; &nbsp; `class_kiss`='$this->post_kiss3',<br/> &nbsp; &nbsp; `class_base`='$this->post_base',<br/> &nbsp; &nbsp; `class_son`='$class_son',<br/> &nbsp; &nbsp; `class_tier`='$class_tier'<br/> &nbsp; &nbsp; &nbsp;WHERE `class_kiss` = '$post_kiss1' LIMIT 1";<br/><br/> &nbsp; if(@mysql_query($sql,db::$cn))<br/> &nbsp; &#123; <br/> &nbsp; &nbsp;$this->off = 1;<br/> &nbsp; &nbsp;echo "目录移动成功！";<br/> &nbsp; &#125;<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "目录移动失败！";<br/><br/><br/> &nbsp; // 移动所有受影响子目录<br/> &nbsp; if($this->off == 1)<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;$sql = "UPDATE ".db::table_sort." SET <br/> &nbsp; &nbsp; &nbsp;`class_kiss`=INSERT(`class_kiss`,1,$this->len,'$this->post_kiss3'),<br/> &nbsp; &nbsp; &nbsp;`class_base`='$this->post_base',<br/> &nbsp; &nbsp; &nbsp;`class_tier`=`class_tier`+'$this->post_tier'<br/> &nbsp; &nbsp; &nbsp; WHERE `class_kiss` LIKE '$post_kiss1%'";<br/><br/> &nbsp; &nbsp;if(@mysql_query($sql,db::$cn))<br/> &nbsp; &nbsp; echo "子分类移动成功！";<br/> &nbsp; &nbsp;else<br/> &nbsp; &nbsp;&#123;<br/> &nbsp; &nbsp; $this->off = 0;<br/> &nbsp; &nbsp; echo "子分类移动失败！";<br/> &nbsp; &nbsp;&#125;<br/> &nbsp; &#125;<br/> &nbsp;&#125;<br/><br/><br/> &nbsp;// 更新JS文件<br/> &nbsp;if($this->off == 1)<br/> &nbsp;&#123;<br/> &nbsp; $js = new sort_show;<br/> &nbsp; $jsdata = $js->sort_js_text();<br/> &nbsp; if(sort_js_write::writejs($post_js,$jsdata))<br/> &nbsp; &nbsp;echo "js写入成功！";<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "js写入失败！";<br/> &nbsp;&#125;<br/> &#125;<br/><br/> /*<br/> 方法用途： 移动所有关联资源内容的目录指向（如内容表的记录对奴属目录的指向）<br/><br/> 参数设置： $name_table &nbsp;待修改的表名<br/> &nbsp; &nbsp;$name_sort &nbsp;待修改的存储分类亲缘树的字段名<br/> 返回值： 无<br/> */<br/> function textovr($name_table,$name_sort)<br/> &#123;<br/> &nbsp;if($this->off == 1)<br/> &nbsp;&#123;<br/> &nbsp; $name_table = "`".$name_table."`";<br/> &nbsp; $name_sort &nbsp;= "`".$name_sort."`";<br/><br/> &nbsp; $sql = "UPDATE $name_table SET <br/> &nbsp; &nbsp; $name_sort=INSERT($name_sort,1,$this->len,'$this->post_kiss3')<br/> &nbsp; &nbsp; &nbsp;WHERE $name_sort LIKE '$this->post_kiss1%'";<br/> &nbsp; if(@mysql_query($sql,db::$cn))<br/> &nbsp; &nbsp;echo "资源目录指向移动成功！";<br/> &nbsp; else<br/> &nbsp; &nbsp;echo "资源目录指向移动失败！";<br/> &nbsp;&#125;<br/> &#125;<br/>&#125;<br/><br/><br/>// 分类显示类<br/>class sort_show<br/>&#123;<br/> /*<br/> 方法用途： 获取分类信息执行号<br/> 参数设置： $post_kiss 设置从某分类下开始显示(传入值应为上层分类的亲缘树序列)，默认0为从根开始显示<br/> &nbsp; &nbsp;$post_wise 设置显示方式：1为显示该类的所有子分类，0为只显示当前层次的分类<br/> 返回值： sql执行号<br/> */<br/><br/> public $sqldata;<br/> public $class_tier=1; &nbsp;// 当前分类层号，用于格式输出时减去空格,1为减根<br/><br/> function __construct($post_kiss=0,$post_wise=1)<br/> &#123;<br/> &nbsp;if($post_kiss>0)<br/> &nbsp;&#123;<br/> &nbsp; $fs &nbsp;= &nbsp;sort_info::sortinfo($post_kiss); // 取得父分类信息<br/> &nbsp; $tmp = &nbsp;@mysql_fetch_array($fs);<br/><br/> &nbsp; $this->class_tier = ++$tmp['class_tier']; &nbsp; // 取得该分类的层号 &nbsp;<br/> &nbsp;<br/> &nbsp; $post_kiss = "`class_kiss` LIKE '$class_kiss%'";<br/> &nbsp; if($post_wise==0)<br/> &nbsp; &nbsp; $post_wise="'$this->class_tier' = `class_tier`";<br/> &nbsp; &nbsp;else<br/> &nbsp; &nbsp; $post_wise=" `class_tier` >= '$this->class_tier'";<br/> &nbsp;&#125;<br/> &nbsp;else<br/> &nbsp;&#123;<br/> &nbsp; $post_kiss=1;<br/> &nbsp; if($post_wise==0) $post_wise="`class_tier` = '1'";<br/> &nbsp;&#125;<br/><br/> &nbsp;$sql = "select * from `".db::table_sort."`<br/> &nbsp; &nbsp; where $post_kiss and $post_wise<br/> &nbsp; &nbsp; order by `class_base` asc, `class_kiss` asc, `class_son` asc";<br/><br/> &nbsp;$this->sqldata &nbsp;= @mysql_query($sql,db::$cn);<br/> &#125;<br/><br/><br/> /*<br/> 方法用途： 列表显示分类<br/> 参数设置： $type 显示方式（默认0为不带格式输出，要带格式则参数为分级符号，如“└”）<br/> 返回值： 无<br/> */<br/> function show($type)<br/> &#123;<br/> &nbsp;if($type=="0")<br/> &nbsp;&#123;<br/> &nbsp; while($tmp = @mysql_fetch_array($this->sqldata))<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;echo $tmp['class_name']."<br/>";<br/> &nbsp; &#125;<br/> &nbsp;&#125;<br/> &nbsp;else<br/> &nbsp;&#123;<br/> &nbsp; while($tmp = @mysql_fetch_array($this->sqldata))<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;$nub=str_repeat("　",($tmp['class_tier']-$this->class_tier))."$type"; //使用空格缩进和$type符号产生分级<br/> &nbsp; &nbsp;echo $nub.$tmp['class_name']."<br/>";<br/> &nbsp; &#125;<br/> &nbsp;&#125;<br/> &#125;<br/><br/><br/> /*<br/> 方法用途： 生成待写入js文本内容<br/> 返回值： 字符串<br/> */<br/> function sort_js_text()<br/> &#123;<br/> &nbsp;while($tmp = @mysql_fetch_array($this->sqldata))<br/> &nbsp;&#123;<br/> &nbsp; $nub=str_repeat("　",$tmp['class_tier']); //使用空格缩进<br/> &nbsp; $jsdata .= $nub."[".--$tmp['class_tier'].","".$tmp['class_name']."","".$tmp['class_kiss'].""],".chr(13);<br/> &nbsp;&#125;<br/><br/> &nbsp;$jsdata = substr($jsdata, -strlen($jsdata), -2); &nbsp; &nbsp;//去除最后一个逗号和最后一个换行<br/> &nbsp;return "var arrType=new Array(".chr(13).$jsdata.");";<br/> &#125;<br/><br/>&#125;<br/><br/> <br/><br/>// 导航信息类<br/>class sort_boat<br/>&#123;<br/> /*<br/> 方法用途： 输出某类别的所有上级目录(导航)<br/> 参数设置： $post_kiss 某类亲缘树<br/> 返回值： 无<br/> */<br/> function boat_show($post_kiss)<br/> &#123;<br/> &nbsp;$class_kiss =explode(":",$post_kiss); &nbsp;// 分拆亲缘树序列<br/> &nbsp;$nub = sizeof($class_kiss); &nbsp; &nbsp; // 元素个数<br/><br/> &nbsp;// 取得各层亲缘树序列数组<br/> &nbsp;for($i=0;$i<$nub;$i++)<br/> &nbsp;&#123;<br/> &nbsp; if($i>=1) $kiss_val .= ":";<br/> &nbsp; $kiss_val &nbsp;.= $class_kiss[$i];<br/> &nbsp; $kiss_arr[] = "'".$kiss_val."'=`class_kiss`";<br/> &nbsp;&#125;<br/> &nbsp;<br/> &nbsp;// 生成sql查询条件<br/> &nbsp;$kiss_val = implode(" OR ",$kiss_arr);<br/> &nbsp;$sql = "select * from `".db::table_sort."`<br/> &nbsp; &nbsp; where $kiss_val order by `class_tier`";<br/> &nbsp;$fs &nbsp;= @mysql_query($sql,db::$cn);<br/> &nbsp;while($tmp = @mysql_fetch_array($fs))<br/> &nbsp;&#123;<br/> &nbsp; echo " >> ".$tmp['class_name'];<br/> &nbsp;&#125;<br/> &#125;<br/>&#125;<br/><br/><br/>// 写入JS文件类<br/>class sort_js_write<br/>&#123;<br/> /*<br/> 方法用途： 写入JS分类数据<br/> 参数设置： $fileurl 文件路径/文件名<br/> &nbsp; &nbsp;$filetext 写入内容<br/> 返回值： 成功/失败<br/> */<br/> function writejs($fileurl,$filetext)<br/> &#123;<br/> &nbsp;$no = fopen($fileurl, 'w');<br/> &nbsp;$no = fwrite($no,$filetext);<br/><br/> &nbsp;return ($no)?true:false;<br/> &#125;<br/>&#125;<br/><br/>?><br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>添加分类演示：add_sort.php<br/><br/><html><br/><head><br/><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><br/><title>无级分类(无递归) + 树状显示(多显示方式) +导航输出 +批量移动 + 无级联动 演示</title><br/><style type="text/css"><br/><!--<br/>body,td,th &#123;<br/> font-size: 12px;<br/>&#125;<br/>--><br/></style></head><br/><br/><body><br/><SCRIPT language=javascript src="sort_code.js"></SCRIPT><br/><SCRIPT language=javascript src="sort_type.js"></SCRIPT><br/><br/><form id="form1" name="form1" method="post" action="" onSubmit="return checkform(this)"><br/> <table width="100%" cellspacing="1" bgcolor="#EFEBDE"><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td height="20" bgcolor="#FFCC00">添加分类：(如果选择了写入JS，则会更新级联菜单，但由于浏览器缓存的原因，你要重新开窗口才能看到！) &nbsp; &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF">位置：<br/> &nbsp;<SCRIPT language=JavaScript>drawSelect(null,"arrType",0,"in_dId","","当前层");</SCRIPT> &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF">名称：<br/> &nbsp; &nbsp; &nbsp; &nbsp;<input name="name" type="text" /><br/> &nbsp; &nbsp; &nbsp; &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF"><input name="js" type="checkbox" value="1" /><br/>写入到JS</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#CCCCCC"><input name="post" type="submit" value="提交" /></td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp;</table><br/> &nbsp;<br/> &nbsp; &nbsp; &nbsp;<br/><br/></form><br/><br/><br/><?php<br/>include("sort_class.php");<br/>new db;<br/><br/>// ---------- 添加分类调用 ------------<br/>if(isset($_POST["post"]))<br/>&#123;<br/> if($_POST["name"]!="")<br/> &#123;<br/> &nbsp; $add = new sort_add;<br/> &nbsp; if($_POST["js"]==1) $_POST["js"]="sort_type.js"; else $_POST["js"]=0;<br/><br/><br/> &nbsp; if($_POST["in_dId"] == "")<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;//if($add->sort_add_base("根分类名","是否写入JS/0为不写"))<br/> &nbsp; &nbsp;if($add->sort_add_base($_POST["name"],$_POST["js"]))<br/> &nbsp; &nbsp;echo "根分类添加成功";<br/> &nbsp; &#125;<br/> &nbsp; else<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;//if($add->sort_add_son("父目录亲缘树","子分类名","是否写入JS"))<br/> &nbsp; &nbsp;if($add->sort_add_son($_POST["in_dId"],$_POST["name"],$_POST["js"]))<br/> &nbsp; &nbsp;echo "子分类添加成功";<br/> &nbsp; &#125;<br/> &#125;<br/> else<br/> &nbsp;echo "请输入分类名称！";<br/>&#125;<br/><br/> <br/><br/>echo "<br/>---------- 导航显示调用 ------------<br/>";<br/> $boat = new sort_boat;<br/><br/> $boat->boat_show("2:1:1:1"); &nbsp; //("某目录亲缘树,如：1:3:22:44");<br/><br/> <br/><br/><br/>echo "<br/><br/>---------- 显示分类调用 ------------<br/>";<br/> $show = new sort_show(0,1); //(某分类的亲缘树/0为根,显示包含子类1/显示当前层分类0)<br/><br/> $show->show("└ "); &nbsp; &nbsp;//(分类前缀的符号，如不使用格式，则设置为0)<br/><br/>?><br/></body><br/></html><br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>编辑分类演示：ovr_sort.php<br/><br/><html><br/><head><br/><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><br/><title>无级分类(无递归) + 树状显示(多显示方式) +导航输出 +批量移动 + 无级联动 演示</title><br/><style type="text/css"><br/><!--<br/>body,td,th &#123;<br/> font-size: 12px;<br/>&#125;<br/>.STYLE1 &#123;color: #FF0000&#125;<br/>--><br/></style></head><br/><br/><body><br/><SCRIPT language=javascript src="sort_code.js"></SCRIPT><br/><SCRIPT language=javascript src="sort_type.js"></SCRIPT><br/><br/><form id="form1" name="form1" method="post" action="" onSubmit="return checkform(this)"><br/> <table width="100%" cellspacing="1" bgcolor="#EFEBDE"><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td height="20" bgcolor="#FFCC00">分类编辑：</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF">将分类：<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<SCRIPT language=JavaScript>drawSelect(null,"arrType",0,"in_dId","","<-当前分类");</SCRIPT> &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF">移动至：<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<SCRIPT language=JavaScript>drawSelect(null,"arrType",0,"in_dId1","","↓当前位置");</SCRIPT> &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF"><input name="no" type="checkbox" value="1" /><br/> &nbsp; &nbsp; &nbsp; &nbsp;确认移动分类？ (移动分类将连带移动所有该目录的子分类，并且更新所有关联资源的目录指向，如文章信息的所属目录指向！建议在添加资源前设置好分类，一旦投入应用，虽本程序能够无损转移，但将耗费较大资源。若站点投入应用1年以上，建议不使用！) </td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF">名称修改为：<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<input name="name" type="text" /><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(不改名称则不填写) &nbsp; &nbsp; &nbsp; &nbsp;</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#FFFFFF"><span class="STYLE1">强烈说明：</span> 程序将自动更新JS级联菜单。切记：由于浏览器缓存的原因，你要重新开窗口才能看到！ &nbsp; &nbsp;如果你执行一次移动后没开新窗口刷新JS菜单，这时如果再执行转移操作，JS传入的值将是老数据，与当前库中的不一致，这将打乱所有数据库关联。哭吧！！</td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp; &nbsp;<tr><br/> &nbsp; &nbsp; &nbsp; &nbsp;<td bgcolor="#CCCCCC"><input name="post" type="submit" id="post3" value="提交" /></td><br/> &nbsp; &nbsp; &nbsp;</tr><br/> &nbsp; &nbsp;</table><br/> &nbsp;<br/> &nbsp; &nbsp; &nbsp;<br/><br/></form><br/><br/><br/><?php<br/>include("sort_class.php");<br/>new db;<br/><br/>// ---------- 编辑分类调用 ------------<br/>if(isset($_POST["post"]))<br/>&#123;<br/> if($_POST["in_dId"]!="")<br/> &#123;<br/> &nbsp; if($_POST["name"]=="") $_POST["name"]=FALSE;<br/> &nbsp; if($_POST["no"]==1)<br/> &nbsp; &#123;<br/> &nbsp; &nbsp;if($_POST["in_dId1"]=="") $_POST["in_dId1"]="base";<br/> &nbsp; &#125;<br/> &nbsp; else<br/> &nbsp; &nbsp;$_POST["in_dId1"]=FALSE;<br/><br/> &nbsp; $ovr = new sort_ovr;<br/> &nbsp; //参数("待修改分类/不更改值为FALSE","新位置/base表根/不更改值为FALSE","新类名/不更改值为FALSE","更新JS菜单")<br/> &nbsp; $ovr->sortovr($_POST["in_dId"] , $_POST["in_dId1"] , $_POST["name"] , "sort_type.js");<br/><br/> <br/><br/> &nbsp; /*<br/> &nbsp; &nbsp;如果对目录进行了批量移动，不要忘了执行下边这句：转移受影响的内容奴属目录指向。<br/> &nbsp; &nbsp;没有把它直接写到目录移动后就自动执行，是因为有些系统可能不止一个表使用目录库，因此在下边手动指定要改哪些表！<br/> &nbsp; */<br/><br/> &nbsp; // $ovr->textovr("表1","关联目录字段名");<br/> &nbsp; // $ovr->textovr("表2","关联目录字段名");<br/> &nbsp; // .... 有多少表使用了就执行多少次<br/><br/><br/> &#125;<br/> else<br/> &nbsp;echo "未指定待编辑分类！";<br/>&#125;<br/><br/> <br/><br/>echo "<br/>---------- 导航显示调用 ------------<br/>";<br/> $boat = new sort_boat;<br/><br/> $boat->boat_show("2:1:1:1"); &nbsp; //("某目录亲缘树,如：1:3:22:44");<br/><br/> <br/><br/><br/>echo "<br/><br/>---------- 显示分类调用 ------------<br/>";<br/> $show = new sort_show(0,1); //(某分类的亲缘树/0为根,显示包含子类1/显示当前层分类0)<br/><br/> $show->show("└ "); &nbsp; &nbsp;//(分类前缀的符号，如不使用格式，则设置为0)<br/><br/>?><br/></body><br/></html><br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/75/</link>
<title><![CDATA[数据库设计技巧]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Mon, 23 Jan 2006 10:38:53 +0000</pubDate> 
<guid>https://atim.cn/post/75/</guid> 
<description>
<![CDATA[ 
	<p><span style="FONT-SIZE: 13px"><span style="FONT-SIZE: 13px">数据库设计技巧(一)<br />--------------------------------------------------------------------------------<br /><br />作者:allsky  <br />在动态网站的设计中，数据库设计的重要性不言而喻。如果设计不当,查询起来就非常吃力，程序的性能也会受到影响。无<br />论你使用的是mySQL或者Oracle数据库，通过进行正规化的表格设计，可以令你的PHP代码更具可读性，更容易扩展，从而<br />也会提升应用的性能。<br /><br />　　简单说来，正规化就是在表格设计时，消除冗余性和不协调的从属关系。在本文中，我将通过五个渐进的过程来告诉<br />你在设计中应该了解的正规化技巧。从而建立一个可行而且 <br />效率高的数据库。本文也会详细分析一下可以利用的关系类型。<br /><br />　　这里假定我们要建立一个用户信息的表格，其中要存储用户的名字、公司、公司地址和一些个人的收藏夹或url。在开<br />始时，你可能定义一个如下的表格结构：<br /><br />　　零状态形式<br /><br />　　users <br /><br />　　name company company_address url1 url2 <br /><br />　　Joe ABC 1 Work Lane abc.com xyz.com <br /><br />　　Jill XYZ 1 Job Street abc.com xyz.com <br /><br />　　由于没有进行任何的正规化处理，我们将这种形式的表称为零状态形式的表。留意其中的url1和url2字段---如果我们<br />在应用中需要第三个url呢？这样你就要在表格中多加一列，很明显，这不是一个好办法。如果你要创建一个富有扩展性的<br />系统，你就要考虑使用第一个正规化的形式，并且应用到该表格中。<br /><br />　　第一级正规化形式<br /><br />　　1.消除每个表格中重复的组<br /><br />　　2.为每套相关的数据建立一个独立的表格<br /><br />　　3.使用一个主键来标识每套相关的数据<br /><br />　　以上的表格明显违反了上面第一条的规定，那么第三条的主键又是什么意思呢？很简单，它只是在每个记录中加入一<br />个唯一的、自动增加的整型值。通过这个值，就可以将两个姓名一样的记录区分开来。通过应用第一级正规化形式，我们<br />得到了以下的表格：<br /><br />　　users <br /><br />　　userId name company company_address url <br /><br />　　1 Joe ABC 1 Work Lane abc.com <br /><br />　　1 Joe ABC 1 Work Lane xyz.com <br /><br />　　2 Jill XYZ 1 Job Street abc.com <br /><br />　　2 Jill XYZ 1 Job Street xyz.com <br /><br />　　现在我们的表格可以说已经处在第一级正规化的形式了，它已经解决了url字段的限制问题，不过这样的处理后又带来<br />了一个新的问题。每次在user表中插入一条记录的时候，我们都必须重复所有的公司和用户数据。这样不仅令数据库比以<br />前大了，而且很容易出错。因此还要经过第二级正规化处理。<br /><br />数据库设计技巧(二)<br />--------------------------------------------------------------------------------<br /><br />作者:allsky  <br />1.为应用在多条记录的字段建立独立的表格<br /><br />　　2.通过一个foreign key来关联这些表格的值<br /><br /><br />　　我们将url的值放在一个独立的表格中，这样我们就可以在以后加入更多的数据，而无需担心产生重复的值。我们还通<br />过主键值来关联这些字段：<br /><br />　　users <br /><br />　　userId name company company_address <br /><br />　　1 Joe ABC 1 Work Lane <br /><br />　　2 Jill XYZ 1 Job Street <br /><br />　　urls <br /><br />　　urlId relUserId url <br /><br />　　1 1 abc.com <br /><br />　　2 1 xyz.com <br /><br />　　3 2 abc.com <br /><br />　　4 2 xyz.com <br /><br />　　如上所示，我们创建了独立的表格，users表中的主键userid现在与url表中的foreign key relUserId关联。现在的情<br />况好象已经得到了明显的改善。不过，如果我们要为ABC公司加入一个员工记录呢？或者更多，200个？这样我们就必须重<br />复使用公司名和地址，这明显不够冗余。因此我们将应用第三级正规化方法：<br /><br />　　第三级正规化形式<br /><br />　　1.消除不依赖于该键的字段<br /><br />　　公司名及地址与User Id都是没有关系的，因此它们应用拥有自己的公司Id：<br /><br />　　users <br /><br />　　userId name relCompId <br /><br />　　1 Joe 1 <br /><br />　　2 Jill 2 <br /><br />　　companies <br /><br />　　compId company company_address <br /><br />　　1 ABC 1 Work Lane <br /><br />　　2 XYZ 1 Job Street <br /><br />　　urls <br /><br />　　urlId relUserId url <br /><br />　　1 1 abc.com <br /><br />　　2 1 xyz.com <br /><br />　　3 2 abc.com <br /><br />　　4 2 xyz.com <br /><br />　　这样我们就将companies表中的主键comId和users表中名字为relCompId的foreign key关联起来，就算为ABC公司加入<br />200个员工，在companies中也只有一条记录。我们的users和urls表可以不断地扩大，而无需担心插入不必要的数据。大部<br />分的开发者都认为经过三步的正规化就足够了，这个数据库的设计已经可以很方便地处理整个企业的负担，此看法在大多<br />数的情况下是正确的。<br /><br />　　我们可以留意一下URL的字段--你注意到数据的冗余了吗？如果给用户用户输入这些url数据的HTML页面是一个文本<br />框，可任意输入的话，这并没有问题，两个用户输入同样收藏夹的概率较少，不过，如果是通过一个下拉式的菜单，只让<br />用户选择两个url输入，或者更多一点。这种情况下，我们的数据库还可以进行下一级别的优化--第四步，对于大多数的开<br />发者来说，这一步都是忽略的，因为它要依赖一个很特别的关系--一个多对多的关系，这在我们的应用中是还没有遇到过的.<br /><br />数据库设计技巧(三)<br />--------------------------------------------------------------------------------<br /><br />作者:allsky  <br />　　在定义第四个正规化的形式前，我想首先提一下三种基本的数据关系：一对一，一对多和多对多。我们回头看一下经<br />过第一个正规化的users表。要是我们将url的字段放在一个独立的表中，每次在users表中插入一个记录，我们就会在urls<br />表中插入一行。我们将得到一个一对一的关系：用户表中的每一行，都将在urls表中找到相应的一行。对于我们的应用来 <br />说，这既不实用也不标准。<br /><br />　　然后看看第二个正规化的例子。对于每个用户记录，我们的表格允许有多个urls的记录与之关联。这是一个一对多的<br />关系，这是一个很常见的关系。<br /><br />　　对于多对多的关系来说，就有点复杂了。在我们的第三个正规化形式的例子中，我们的一个用户与很多的url有关，而<br />我们想将该结构变为允许多个用户与多个的urls有关，这样我们就可以得到一个多对多的结构。在讨论前，我们先看看表<br />格结构会有些什么变化<br /><br />　　users <br /><br />　　userId name relCompId <br /><br />　　1 Joe 1 <br /><br />　　2 Jill 2 <br /><br />　　companies <br /><br />　　compId company company_address <br /><br />　　1 ABC 1 Work Lane <br /><br />　　2 XYZ 1 Job Street <br /><br />　　urls <br /><br />　　urlId url <br /><br />　　1 abc.com <br /><br />　　2 xyz.com <br /><br />　　url_relations <br /><br />　　relationId relatedUrlId relatedUserId <br /><br />　　1 1 1 <br /><br />　　2 1 2 <br /><br />　　3 2 1 <br /><br />　　4 2 2 <br /><br />　　为了进一步减低数据的冗余，我们运用第四级正规化形式。我们创建了一个颇奇怪的url_relations表，里面的字段均<br />为主键或者foreign key。通过这个表，我们就可以消除urls表中的重复项目。以下是第四个正规化形式的具体要求：<br /><br />　　第四个正规化形式<br /><br />　　1.在一个多对多的关系中，独立的实体不能存放在同一个表格中<br /><br />　　由于它仅应用于多对多的关系，因此大多数的开发者可以忽略这条规定。不过在某些情况下，它是非常实用的，这个<br />例子就是这样，我们通过将相同的实体分离出来，并且将关系移到它们自己的表格中，从而改进了urls表格。<br /><br />　　为了令你更容易明白，我们举个具体的例子，以下将用一个SQL语句选择出所有属于joe的urls：<br /><br />　　SELECT name, url FROM users, urls, url_relationsswheresurl_relations.relatedUserId = 1 AND <br />users.userId = 1 AND urls.urlId = url_relations.relatedUrlId <br /><br />　　如果我们想要遍历每个人的个人信息和url信息，我们可以这样做：<br /><br />　　SELECT name, url FROM users, urls, url_relationsswheresusers.userId = url_relations.relatedUserId AND <br />urls.urlId = url_relations.relatedUrlId <br /><br />　　第五级正规化形式<br /><br />　　还有一级正规化的形式，它并不常见，有点深奥，并且在大部分的情况下都是不必要的。它的原则是：<br /><br />　　1.原来的表格必须可以通过由它分离出去的表格重新构建<br /><br />　　使用这个规定的好处是，你可以确保不会在分离的表格中引入多余的列，所有你创建的表格结构都与它们的实际需要<br />一样大。应用这条规定是一个好习惯，不过除非你要处理一个非常大型的数据，否则你将不需要用到它。<br /><br />　　希望这篇文章对你有用，并且可以帮助你在所有的项目中应用这些正规化的规定。你可能想知道这些方法是从哪来<br />的，我可以告诉你，前面三个正规化的规定是1972年，Dr. E.F. Codd在他的论文“进一步正规化数据库的关系模型中”提<br />出的，其余的规定是经过后来的集合理论和关系数学家理论化的。评论：正所谓物级必反，将表格分得过细有时并不好，<br />因为这样需要将各表进行各种的关联，这会令查询时变得复杂，而且效率也可能降低，这些正规化的规定可以参考，在实<br />际应用时，要根据项目的大小，必要时可以进行一些测试，以设计出更合理的表格结构。</span><font size="2"> </font></span></p>
]]>
</description>
</item><item>
<link>https://atim.cn/post/80/</link>
<title><![CDATA[mysql 的优化经验 ]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Sat, 24 Dec 2005 09:32:11 +0000</pubDate> 
<guid>https://atim.cn/post/80/</guid> 
<description>
<![CDATA[ 
	<ol style="LIST-STYLE-TYPE: decimal"><li>从数据库结构做起 <ol style="LIST-STYLE-TYPE: decimal"><li>字段类型的定义时遵循以下规则: <ol style="LIST-STYLE-TYPE: decimal"><li>选用字段长度最小 </li><li>优先使用定长型 </li><li>尽可能的定义 &quot;NOT NULL&quot; </li><li>数值型字段中避免使用 &quot;ZEROFILL&quot; </li><li>如果要储存的数据为字符串, 且可能值已知且有限, 优先使用 enum 或 set</li></ol></li><li>索引的优化至关重要(以下如果没有特殊说明, 均指查询密集的情况) <ol style="LIST-STYLE-TYPE: decimal"><li>被索引的字段的长度越小, 该索引的效率越高 </li><li>被索引的字段中, 值的重复越少, 该索引的效率越高 </li><li>查询语句中, 如果使用了 &quot;group&quot; 子句, 根据其中字段出现的先后顺序建立多字段索引 </li><li>查询语句中, 如果使用了 &quot;distinct&quot;, 根据其中字段出现的先后顺序建立多字段索引 </li><li>&quot;where&quot; 子句中, 出现对同一表中多个不同字段的 &quot;and&quot; 条件时, 按照字段出现的先后顺序建立多字段索引 </li><li>&quot;where&quot; 子句中, 出现对同一表中多个不同字段的 &quot;or&quot; 条件时, 对重复值最少的字段建立单字段索引 </li><li>进行 &quot;内/外连接&quot; 查询时, 对 &quot;连接字段&quot; 建立索引 </li><li>对 &quot;主键&quot; 的 &quot;unique&quot; 索引 毫无意义, 不要使用 </li><li>被索引字段尽可能的使用 &quot;NOT NULL&quot; 属性 </li><li>对写入密集型表, 尽量减少索引, 尤其是 &quot;多字段索引&quot; 和 &quot;unique&quot; 索引</li></ol></li></ol></li><li>查询语句的优化 <ol style="LIST-STYLE-TYPE: decimal"><li>多多利用 &quot;explain&quot; 查询索引使用情况, 以便找出最佳的查询语句写法和索引设置方案 </li><li>慎用 &quot;select *&quot;, 查询时只选出必须字段 </li><li>查询使用索引时, 所遍历的索引条数越少, 索引字段长度越小, 查询效率越高 (可使用 &quot;explain&quot; 查询索引使用情况) </li><li>避免使用 mysql 函数对查询结果进行处理, 将这些处理交给客户端程序负责 </li><li>使用 &quot;limit&quot; 时候, 尽量使 &quot;limit&quot; 出的部分位于整个结果集的前部, 这样的查询速度更快, 系统资源开销更低 </li><li>在 &quot;where&quot; 子句中使用多个字段的 &quot;and&quot; 条件时, 各个字段出现的先后顺序要与多字段索引中的顺序相符 </li><li>在 &quot;where&quot; 子句 中使用 &quot;like&quot; 时, 只有当通配符不出现在条件的最左端时才会使用索引 </li><li>在 mysql 4.1 以上版本中, 避免使用子查询, 尽量使用 &quot;内/外连接&quot; 实现此功能 </li><li>减少函数的使用, 如果可能的话, 尽量用单纯的表达式来代替 </li><li>避免在 &quot;where&quot; 子句中, 对不同字段进行 &quot;or&quot; 条件查询, 将其拆分成多个单一字段的查询语句效率更高</li></ol></li></ol>转<img src="http://www.partywind.com/blog/img/emot/puzzled.gif" border="0" />
]]>
</description>
</item><item>
<link>https://atim.cn/post/83/</link>
<title><![CDATA[mysql常见问题]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Fri, 16 Dec 2005 03:20:00 +0000</pubDate> 
<guid>https://atim.cn/post/83/</guid> 
<description>
<![CDATA[ 
	一、认知篇 <br/>　　MYSQL初学者使用指南与介绍 <br/>　　学习MySQL常用操作命令 <br/>　　学习MySQL多表操作和备份处理<br/>　　Mysql数据库学习心得(1)<br/>　　Mysql数据库学习心得(2)<br/><br/><br/>　　二、常见问题集锦<br/><br/>　　MySQL总是崩溃 <br/><br/>　　首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关。你可以用mysqladmin version检查你的mysqld服务器正常执行了多长时间，如果mysqld死了，你可以在文件“mysql-data-directory/'hostname'.err”中找到其原因。<br/><br/>　　使用MySQL时的一些常见错误 <br/><br/>　　MySQL server has gone away<br/><br/>　　常见的原因是服务器超时了并且关闭了连接。缺省地，如果没有事情发生，服务器在 8个小时后关闭连接。你可在启动mysqld时通过设置wait_timeout变量改变时间限制。<br/><br/>　　如果mysqld得到一个太大或不正常的包，它认为客户出错了并关闭连接。<br/><br/>　　Can't connect to [local] MySQL server<br/><br/>　　通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时，你正在使用一个错误的套接字文件或TCP/IP端口。 <br/><br/>　　检查(使用ps)服务器上是否有一个名为mysqld的进程启动<br/><br/>　　如果一个mysqld进程正在运行，可以通过尝试这些不同的连接来检查服务器<br/><br/>shell> mysqladmin version<br/><br/>shell> mysqladmin variables<br/><br/>shell> mysqladmin -h `hostname` version variables<br/><br/>shell> mysqladmin -h `hostname` --port=3306 version<br/><br/>shell> mysqladmin -h 'ip for your host' version<br/><br/>shell> mysqladmin --socket=/tmp/mysql.sock version<br/><br/>　　注意hostname命令使用反引号“`”而非正引号“'”；这些导致hostname输出（即，当前主机名）被代替进mysqladmin命令中。<br/>　　Host '...' is blocked错误<br/><br/>Host 'hostname' is blocked because of many connection errors.<br/><br/>Unblock with 'mysqladmin flush-hosts'<br/><br/>　　这意味着，mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在max_connect_errors次失败请求后，mysqld认定出错了(象来字一个黑客的攻击)，并且阻止该站点进一步的连接，直到某人执行命令mysqladmin flush-hosts。<br/><br/>缺省地，mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它：<br/><br/>shell> safe_mysqld -O max_connect_errors=10000 &<br/><br/><br/>　　Too many connections错误<br/><br/>　　意味着已经有max_connections个客户连接了mysqld服务器。<br/><br/>　　如果你需要比缺省(100)更多的连接，那么你应该重启mysqld，用更大的 max_connections 变量值。<br/><br/><br/>　　Out of memory错误<br/><br/>mysql: Out of memory at line 42, 'malloc.c'<br/><br/>mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)<br/><br/>ERROR 2008: MySQL client ran out of memory<br/><br/>　　注意，错误指向了MySQL客户mysql。这个错误的原因很简单，客户没有足够的内存存储全部结果。<br/><br/>　　首先检查你的查询是否正确<br/><br/>　　Packet too large错误 <br/><br/><br/>　　一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包<br/><br/>　　可以通过用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户程序。<br/><br/><br/>　　The table is full错误<br/><br/>　　这个错误发生在内存临时表变得比tmp_table_size字节大时。<br/><br/>　　Commands out of sync in client错误<br/><br/>　　正在以错误的次序调用客户函数！<br/><br/>　　Ignoring user错误<br/><br/>Found wrong password for user: _user@some_host'">'some_user@some_host'; Ignoring user<br/><br/>　　这意味着在mysqld启动时或在它再次装载权限表时，它在user表中找到了一个有一个无效口令的条目。结果，条目简单地被权限系统忽略。<br/><br/>　　Table 'xxx' doesn't exist错误<br/><br/>　　数据库和表名件是区分大小写的！可以用SHOW TABLES检查你在当前数据库中有哪个表。<br/><br/><br/>　　从一个文本文件运行SQL命令 <br/><br/>　　可以把SQL命令放在一个文件中并且告诉mysql从该文件读取其输入：创造一个文本文件“text_file”，它包含要执行的命令。然后如下调用mysql：<br/><br/>shell> mysql database < text_file<br/><br/>　　或<br/><br/>shell> mysql < text_file<br/><br/>　　启动有USE db_name语句的文本文件。<br/><br/><br/>　　怎样重新设置一个忘记的口令 <br/><br/>　　如果忘记了MySQL的root用户的口令，可以使用如下方法恢复： <br/><br/>　　通过发送一个kill（不是kill -9)到mysqld服务器来关闭mysqld服务器。pid 被保存在一个.pid文件中，通常在MySQL数据库目录中：<br/><br/>　　kill `cat /mysql-data-directory/hostname.pid`<br/><br/>　　你必须是一个UNIX root用户或运行服务器的相同用户做这个。<br/><br/>　　使用--skip-grant-tables选项重启mysqld。 <br/><br/>　　用mysql -h hostname mysql连接mysqld服务器并且用一条GRANT命令改变口令。见7.26 GRANT和REVOKE句法。也可以用mysqladmin -h hostname -u user password 'new password' 进行。 <br/><br/>　　用mysqladmin -h hostname flush-privileges或用SQL命令FLUSH PRIVILEGES来装载权限表。 <br/><br/><br/>　　使用DATE列的问题 <br/><br/>　　DATE值的格式是'YYYY-MM-DD'。<br/><br/><br/>　　改变一张表中列的顺序 <br/><br/>　　在一个应用程序中，应该决不基于他们的位置使用SELECT * 检索列，因为被返回的列的顺序永远不能保证；对数据库的一个简单改变可能导致应用程序相当有戏剧性地失败。<br/><br/>　　可以使用如下方法改变：<br/><br/>　　以正确的列顺序创建一张新表。 <br/><br/>　　执行INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table. <br/><br/>　　删除或改名old_table。 <br/><br/>　　ALTER TABLE new_table RENAME old_table。 <br/><br/>　　数据库复制 <br/><br/>　　MySQL(至今)没有数据库复制，但是有一些如何实现的信息。<br/><br/>　　复制一个数据库最一般的方法是使用更新日志。<br/><br/>　　数据库备份 <br/><br/>　　为了得到一个一致的备份，在相关的表上做一个LOCK TABLES。你只需一个读锁定；当你在数据库目录中做文件的一个拷贝时，这允许其他线程继续查询该表。如果你想要做一个SQL级的备份，你可以SELECT INTO OUTFILE。<br/><br/>　　备份一个数据库的另一个方法是使用mysqldump程序： <br/><br/>　　为你的数据库做一个完整的备份：<br/><br/>shell> mysqldump --tab=/path/to/some/dir --opt --full<br/><br/>　<br/>　　你也可以简单地拷贝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件)，只要服务器不在更新任何东西。<br/><br/>　　停止mysqld如果它正在运行，然后以--log-update选项启动它。你将得到一个名为“hostname.n”形式的日志文件， 这里n是随着你每次执行mysqladmin refresh或mysqladmin flush-logs、FLUSH LOGS语句、或重启服务器而递增的一个数字。这些日志文件向你提供了在你执行mysqldump处后面进行的复制数据库改变的所需信息。 <br/><br/>　　如果你必须恢复一些东西，尝试首先用myisamchk -r恢复你的表。这应该处理所有情况的99.9%。如果myisamchk失败，尝试下列过程： <br/><br/><br/>　　恢复原来的mysqldump备份。 <br/><br/>　　执行下列命令以再次运行更新日志中的更改： <br/><br/>shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql<br/><br/><br/>　　ls被用来以正确的顺序得到所有的日志文件。 <br/><br/><br/>　　你也可以与SELECT * INTO OUTFILE 'file_name' FROM tbl_name做有选择的备份并且用LOAD DATA INFILE 'file_name' REPLACE ...恢复。为了避免重复记录，在表中你需要一个PRIMARY KEY或UNIQUE键。当在唯一键值上一个新记录与一个老记录重复时，REPLACE关键词使得老记录用一个新记录替代。<br/><br/>　　三、MySQL惯用技巧<br/><br/>_blank>用delphi解决MySQL数据库中无图形界面的问题<br/>_blank>MySQL索引分析和优化 <br/>_blank>去掉MySQL中的噪声<br/>_blank>PHP页面时而工作，时而不工作<br/>_blank>创建一个带有MUL列的表<br/>_blank>MyISAM和外键支持<br/>_blank>添加并不存在于公司图表里的公司雇员<br/>_blank>MERGE图表的性能<br/>_blank>在同一台服务器上的MySQL和Active Directory<br/>_blank>更新和删除的层叠<br/>_blank>触发器和MySQL<br/>_blank>从处理日志中恢复记录<br/>_blank>分析索引<br/>_blank>带有子查寻的1064查寻错误<br/>_blank>得到错误1006： 不能生成数据库<br/>_blank>管理MySQL的GUI工具<br/>_blank>MySQL是关联的吗？<br/>_blank>将SQL Server的安装迁移到MySQL<br/>_blank>MySQL的存储过程支持<br/>_blank>MySQL中的SQL-- TEXT、DATE、和SET数据类型<br/>_blank>使用MySql <br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/84/</link>
<title><![CDATA[导入海量数据]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Fri, 16 Dec 2005 03:05:23 +0000</pubDate> 
<guid>https://atim.cn/post/84/</guid> 
<description>
<![CDATA[ 
	1，有服务器权限的。直接COPY文件。WIN一般是MYSQL安装目录的data下你的用户名。LINUX是安装目录下的var,其他系统不清楚。<br />2，如果是SQL格式的。有的可能上100M之类的。用source导入。source 文件名<br /><br />解释：在导入之前先要选择好那个用户。<br />cd /mysql目录<br />cd bin<br />mysql -u root -p(LINUX基本要加上路径的。比如/usr/local/mysql/bin/mysql这样)<br />--密码<br />use 用户名<br />source 文件名（如果把文件放到MYSQL安装目录的bin下边的话。就直接加文件名就行了。否则要加上路径。比如source /home/www/test.sql）<br /><br /><br />3,自己写程序搞定（适合没有服务器权限的用户）。以PHP为例。可以先把结构导入。结构一般都很小，然后再把数据整理成一行行的。用file打开这个文件。循环。一行行的导入。当然也得先把文件传到服务器上。这样也很快。<br /><br />4，以上都不行。没办法。只有把文件分成小块块。慢慢搞了<br /><br />5，用PHPMYADMIN等工具。PHPMYADMIN其实算是不能用。大量数据是导不进去的
]]>
</description>
</item><item>
<link>https://atim.cn/post/93/</link>
<title><![CDATA[数据库设计经验谈(上)]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[数据应用]]></category>
<pubDate>Mon, 21 Nov 2005 13:11:16 +0000</pubDate> 
<guid>https://atim.cn/post/93/</guid> 
<description>
<![CDATA[ 
	<span id="ArticleContent1_ArticleContent1_lblContent"><p>一<br/>个成功的管理系统，是由：[50% 的业务 + 50% 的软件] 所组成，而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序]<br/>所组成，数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液，那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充<br/>栋，大学学位课程里也有专门的讲述。不过，就如我们反复强调的那样，再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会，并在网上找了些对<br/>数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的 60<br/>个最佳技巧，并把这些技巧编写成了本文，为了方便索引其内容划分为 5 个部分：</p><p>第 1 部分 - 设计数据库之前<br />这一部分罗列了 12 个基本技巧，包括命名规范和明确业务需求等。 <br />第 2 部分 - 设计数据库表<br />总共 24 个指南性技巧，涵盖表内字段设计以及应该避免的常见问题等。 <br />第 3 部分 - 选择键<br />怎么选择键呢？这里有 10 个技巧专门涉及系统生成的主键的正确用法，还有何 时以及如何索引字段以获得最佳性能等。 <br />第 4 部分 - 保证数据完整性<br />讨论如何保持数据库的清晰和健壮，如何把有害数据降低到最小程度。 <br />第 5 部分 - 各种小技巧<br />不包括在以上 4 个部分中的其他技巧，五花八门，有了它们希望你的数据库开发工作会更轻松一些。 <br />第 1 部分 - 设计数据库之前<br />考察现有环境<br />在<br/>设计一个新数据库时，你不但应该仔细研究业务需求而且还要考察现有的系统。大多数数据库项目都不是从头开始建立的；通常，机构内总会存在用来满足特定需求<br/>的现有系统（可能没有实现自动计算）。显然，现有系统并不完美，否则你就不必再建立新系统了。但是对旧系统的研究可以让你发现一些可能会忽略的细微问题。<br/>一般来说，考察现有系统对你绝对有好处。 <br />定义标准的对象命名规范<br />一定要定义数据库对象的命名规范。对数据库表来说，从项目一开始就要<br/>确定表名是采用复数还是单数形式。此外还要给表的别名定义简单规则（比方说，如果表名是一个单词，别名就取单词的前 4<br/>个字母；如果表名是两个单词，就各取两个单词的前两个字母组成 4 个字母长的别名；如果表的名字由 3<br/>个单词组成，你不妨从头两个单词中各取一个然后从最后一个单词中再取出两个字母，结果还是组成 4<br/>字母长的别名，其余依次类推）对工作用表来说，表名可以加上前缀 WORK_<br/>后面附上采用该表的应用程序的名字。表内的列[字段]要针对键采用一整套设计规则。比如，如果键是数字类型，你可以用 _N<br/>作为后缀；如果是字符类型则可以采用 _C<br/>后缀。对列[字段]名应该采用标准的前缀和后缀。再如，假如你的表里有好多“money”字段，你不妨给每个列[字段]增加一个 _M<br/>后缀。还有，日期列[字段]最好以 D_ 作为名字打头。</p><p>检查表名、报表名和查询名之间的命名规范。你可能会很快就被这些不同的数据库要素的名称搞糊涂了。假如你坚持统一地命名这些数据库的不同组成部分，至少你应该在这些对象名字的开头用 Table、Query 或者 Report 等前缀加以区别。</p><p>如<br/>果采用了 Microsoft Access，你可以用 qry、rpt、tbl 和 mod 等符号来标识对象（比如<br/>tbl_Employees）。我在和 SQL Server 打交道的时候还用过 tbl 来索引表，但我用 sp_company （现在用<br/>sp_feft_）标识存储过程，因为在有的时候如果我发现了更好的处理办法往往会保存好几个拷贝。我在实现 SQL Server 2000 时用<br/>udf_ （或者类似的标记）标识我编写的函数。 <br />工欲善其事, 必先利其器<br />采用理想的数据库设计工具，比如：SyBase 公司的<br/>PowerDesign，她支持 PB、VB、Delphe 等语言，通过 ODBC 可以连接市面上流行的 30 多个数据库，包括<br/>dBase、FoxPro、VFP、SQL Server 等，今后有机会我将着重介绍 PowerDesign 的使用。 <br />获取数据模式资源手册<br />正<br/>在寻求示例模式的人可以阅读《数据模式资源手册》一书，该书由 Len Silverston、W. H. Inmon 和 Kent<br/>Graziano<br/>编写，是一本值得拥有的最佳数据建模图书。该书包括的章节涵盖多种数据领域，比如人员、机构和工作效能等。其他的你还可以参考：[1]萨师煊　王珊著　数<br/>据库系统概论(第二版)高等教育出版社 1991、[2][美] Steven M.Bobrowski 著 Oracle 7<br/>与客户／服务器计算技术从入门到精通　刘建元等译　电子工业出版社，1996、[3]周中元　信息系统建模方法(下)　电子与信息化　1999年第3期，<br/>1999 <br />畅想未来，但不可忘了过去的教训<br />我发现询问用户如何看待未来需求变化非常有用。这样做可以达到两个目的：首先，你可以清楚地了解应用设计在哪个地方应该更具灵活性以及如何避免性能瓶颈；其次，你知道发生事先没有确定的需求变更时用户将和你一样感到吃惊。</p><p>一定要记住过去的经验教训！我们开发人员还应该通过分享自己的体会和经验互相帮助。即使用户认为他们再也不需要什么支持了，我们也应该对他们进行这方面的教育，我们都曾经面临过这样的时刻“当初要是这么做了该多好..”。 <br />在物理实践之前进行逻辑设计<br />在深入物理设计之前要先进行逻辑设计。随着大量的 CASE 工具不断涌现出来，你的设计也可以达到相当高的逻辑水准，你通常可以从整体上更好地了解数据库设计所需要的方方面面。 <br />了解你的业务<br />在你百分百地确定系统从客户角度满足其需求之前不要在你的 ER（实体关系）模式中加入哪怕一个数据表（怎么，你还没有模式？那请你参看技巧 9）。了解你的企业业务可以在以后的开发阶段节约大量的时间。一旦你明确了业务需求，你就可以自己做出许多决策了。</p><p>一旦你认为你已经明确了业务内容，你最好同客户进行一次系统的交流。采用客户的术语并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的关系基数。这样你就可以让你的客户纠正你自己的理解然后做好下一步的 ER 设计。 <br />创建数据字典和 ER 图表<br />一<br/>定要花点时间创建 ER 图表和数据字典。其中至少应该包含每个字段的数据类型和在每个表内的主外键。创建 ER<br/>图表和数据字典确实有点费时但对其他开发人员要了解整个设计却是完全必要的。越早创建越能有助于避免今后面临的可能混乱，从而可以让任何了解数据库的人都<br/>明确如何从数据库中获得数据。</p><p>有一份诸如 ER 图表等最新文档其重要性如何强调都不过分，这对表明表之间关系很有用，而数据字典则说明了每个字段的用途以及任何可能存在的别名。对 SQL 表达式的文档化来说这是完全必要的。 <br />创建模式<br />一张图表胜过千言万语：开发人员不仅要阅读和实现它，而且还要用它来帮助自己和用户对话。模式有助于提高协作效能，这样在先期的数据库设计中几乎不可能出现大的问题。模式不必弄的很复杂；甚至可以简单到手写在一张纸上就可以了。只是要保证其上的逻辑关系今后能产生效益。 <br />从输入输出下手<br />在<br/>定义数据库表和字段需求（输入）时，首先应检查现有的或者已经设计出的报表、查询和视图（输出）以决定为了支持这些输出哪些是必要的表和字段。举个简单的<br/>例子：假如客户需要一个报表按照邮政编码排序、分段和求和，你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。 <br />报表技巧<br />要<br/>了解用户通常是如何报告数据的：批处理还是在线提交报表？时间间隔是每天、每周、每月、每个季度还是每年？如果需要的话还可以考虑创建总结表。系统生成的<br/>主键在报表中很难管理。用户在具有系统生成主键的表内用副键进行检索往往会返回许多重复数据。这样的检索性能比较低而且容易引起混乱。 <br />理解客户需求<br />看<br/>起来这应该是显而易见的事，但需求就是来自客户（这里要从内部和外部客户的角度考虑）。不要依赖用户写下来的需求，真正的需求在客户的脑袋里。你要让客户<br/>解释其需求，而且随着开发的继续，还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是：“只有我看见了我才知道我想要的是什么”必然会导<br/>致大量的返工，因为数据库没有达到客户从来没有写下来的需求标准。而更糟的是你对他们需求的解释只属于你自己，而且可能是完全错误的。 <br />第 2 部分 - 设计表和字段<br />检查各种变化<br />我<br/>在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更。比方说，姓氏就是如此（注意是西方人的姓氏，比如女性结婚后从夫姓等）。所以，在建立系统存<br/>储客户信息时，我倾向于在单独的一个数据表里存储姓氏字段，而且还附加起始日和终止日等字段，这样就可以跟踪这一数据条目的变化。 <br />采用有意义的字段名<br />有一回我参加开发过一个项目，其中有从其他程序员那里继承的程序，那个程序员喜欢用屏幕上显示数据指示用语命名字段，这也不赖，但不幸的是，她还喜欢用一些奇怪的命名法，其命名采用了匈牙利命名和控制序号的组合形式，比如 cbo1、txt2、txt2_b 等等。<br />除非你在使用只面向你的缩写字段名的系统，否则请尽可能地把字段描述的清楚些。当然，也别做过头了，比如 Customer_Shipping_Address_Street_Line_1，虽然很富有说明性，但没人愿意键入这么长的名字，具体尺度就在你的把握中。 <br />采用前缀命名<br />如果多个表里有好多同一类型的字段（比如 FirstName），你不妨用特定表的前缀（比如 CusLastName）来帮助你标识字段。</p><p>时效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重新处理/重载数据和清除旧数据特别有用。 <br />标准化和数据驱动<br />数<br/>据的标准化不仅方便了自己而且也方便了其他人。比方说，假如你的用户界面要访问外部数据源（文件、XML<br/>文档、其他数据库等），你不妨把相应的连接和路径信息存储在用户界面支持表里。还有，如果用户界面执行工作流之类的任务（发送邮件、打印信笺、修改记录状<br/>态等），那么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力，但如果这些过程采用数据驱动而非硬编码的方式，那么策略变更和维护都会方便<br/>得多。事实上，如果过程是数据驱动的，你就可以把相当大的责任推给用户，由用户来维护自己的工作流过程。 <br />标准化不能过头<br />对那些不熟悉<br/>标准化一词（normalization）的人而言，标准化可以保证表内的字段都是最基础的要素，而这一措施有助于消除数据库中的数据冗余。标准化有好几<br/>种形式，但 Third Normal Form（3NF）通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说，3NF 规定：<br />* 表内的每一个值都只能被表达一次。<br />* 表内的每一行都应该被唯一的标识（有唯一键）。<br />* 表内不应该存储依赖于其他键的非键信息。<br />遵<br/>守 3NF 标准的数据库具有以下特点：有一组表专门存放通过键连接起来的关联数据。比方说，某个存放客户及其有关定单的 3NF<br/>数据库就可能有两个表：Customer 和 Order。Order 表不包含定单关联客户的任何信息，但表内会存放一个键值，该键指向<br/>Customer 表里包含该客户信息的那一行。<br />更高层次的标准化也有，但更标准是否就一定更好呢？答案是不一定。事实上，对某些项目来说，甚至就连 3NF 都可能给数据库引入太高的复杂性。</p><p>为<br/>了效率的缘故，对表不进行标准化有时也是必要的，这样的例子很多。曾经有个开发餐饮分析软件的活就是用非标准化表把查询时间从平均 40<br/>秒降低到了两秒左右。虽然我不得不这么做，但我绝不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表出了问题重新产生非标<br/>准化的表是完全可能的。 <br />Microsoft Visual FoxPro 报表技巧<br />如果你正在使用 Microsoft<br/>Visual FoxPro，你可以用对用户友好的字段名来代替编号的名称：比如用 Customer Name 代替<br/>txtCNaM。这样，当你用向导程序 [Wizards，台湾人称为‘精灵’] 创建表单和报表时，其名字会让那些不是程序员的人更容易阅读。 <br />不活跃或者不采用的指示符<br />增<br/>加一个字段表示所在记录是否在业务中不再活跃挺有用的。不管是客户、员工还是其他什么人，这样做都能有助于再运行查询的时候过滤活跃或者不活跃状态。同时<br/>还消除了新用户在采用数据时所面临的一些问题，比如，某些记录可能不再为他们所用，再删除的时候可以起到一定的防范作用。 <br />使用角色实体定义属于某类别的列[字段]<br />在需要对属于特定类别或者具有特定角色的事物做定义时，可以用角色实体来创建特定的时间关联关系，从而可以实现自我文档化。<br />这<br/>里的含义不是让 PERSON 实体带有 Title 字段，而是说，为什么不用 PERSON 实体和 PERSON_TYPE<br/>实体来描述人员呢？比方说，当 John Smith, Engineer 提升为 John Smith, Director 乃至最后爬到<br/>John Smith, CIO 的高位，而所有你要做的不过是改变两个表 PERSON 和 PERSON_TYPE<br/>之间关系的键值，同时增加一个日期/时间字段来知道变化是何时发生的。这样，你的 PERSON_TYPE 表就包含了所有 PERSON<br/>的可能类型，比如 Associate、Engineer、Director、CIO 或者 CEO 等。<br />还有个替代办法就是改变 PERSON 记录来反映新头衔的变化，不过这样一来在时间上无法跟踪个人所处位置的具体时间。 <br />采用常用实体命名机构数据<br />组<br/>织数据的最简单办法就是采用常用名字，比如：PERSON、ORGANIZATION、ADDRESS 和 PHONE<br/>等等。当你把这些常用的一般名字组合起来或者创建特定的相应副实体时，你就得到了自己用的特殊版本。开始的时候采用一般术语的主要原因在于所有的具体用户<br/>都能对抽象事物具体化。<br />有了这些抽象表示，你就可以在第 2 级标识中采用自己的特殊名称，比如，PERSON 可能是<br/>Employee、Spouse、Patient、Client、Customer、Vendor 或者 Teacher<br/>等。同样的，ORGANIZATION 也可能是<br/>MyCompany、MyDepartment、Competitor、Hospital、Warehouse、Government 等。最后<br/>ADDRESS 可以具体为 Site、Location、Home、Work、Client、Vendor、Corporate 和<br/>FieldOffice 等。<br />采用一般抽象术语来标识“事物”的类别可以让你在关联数据以满足业务要求方面获得巨大的灵活性，同时这样做还可以显著降低数据存储所需的冗余量。 <br />用户来自世界各地<br />在设计用到网络或者具有其他国际特性的数据库时，一定要记住大多数国家都有不同的字段格式，比如邮政编码等，有些国家，比如新西兰就没有邮政编码一说。 <br />数据重复需要采用分立的数据表<br />如果你发现自己在重复输入数据，请创建新表和新的关系。 <br />每个表中都应该添加的 3 个有用的字段<br />* dRecordCreationDate，在 VB 下默认是 Now()，而在 SQL Server 下默认为 GETDATE()<br />* sRecordCreator，在 SQL Server 下默认为 NOT NULL DEFAULT USER<br />* nRecordVersion，记录的版本标记；有助于准确说明记录中出现 null 数据或者丢失数据的原因 <br />对地址和电话采用多个字段<br />描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和 Address_Line3 可以提供更大的灵活性。还有，电话号码和邮件地址最好拥有自己的数据表，其间具有自身的类型和标记类别。</p><p>过分标准化可要小心，这样做可能会导致性能上出现问题。虽然地址和电话表分离通常可以达到最佳状态，但是如果需要经常访问这类信息，或许在其父表中存放“首选”信息（比如 Customer 等）更为妥当些。非标准化和加速访问之间的妥协是有一定意义的。 <br />使用多个名称字段<br />我觉得很吃惊，许多人在数据库里就给 name 留一个字段。我觉得只有刚入门的开发人员才会这么做，但实际上网上这种做法非常普遍。我建议应该把姓氏和名字当作两个字段来处理，然后在查询的时候再把他们组合起来。</p><p>我最常用的是在同一表中创建一个计算列[字段]，通过它可以自动地连接标准化后的字段，这样数据变动的时候它也跟着变。不过，这样做在采用建模软件时得很机灵才行。总之，采用连接字段的方式可以有效的隔离用户应用和开发人员界面。 <br />提防大小写混用的对象名和特殊字符<br />过<br/>去最令我恼火的事情之一就是数据库里有大小写混用的对象名，比如 CustomerData。这一问题从 Access 到 Oracle<br/>数据库都存在。我不喜欢采用这种大小写混用的对象命名方法，结果还不得不手工修改名字。想想看，这种数据库/应用程序能混到采用更强大数据库的那一天吗？<br/>采用全部大写而且包含下划符的名字具有更好的可读性（CUSTOMER_DATA），绝对不要在对象名的字符之间留空格。 <br />小心保留词<br />要<br/>保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突，比如，最近我编写的一个 ODBC 连接程序里有个表，其中就用了 DESC<br/>作为说明字段名。后果可想而知！DESC 是 DESCENDING 缩写后的保留词。表里的一个 SELECT *<br/>语句倒是能用，但我得到的却是一大堆毫无用处的信息。 <br />保持字段名和类型的一致性<br />在命名字段并为其指定数据类型的时候一定要保证一致<br/>性。假如字段在某个表中叫做“agreement_number”，你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数，那在另一<br/>个表里可就别变成字符型了。记住，你干完自己的活了，其他人还要用你的数据库呢。 <br />仔细选择数字类型<br />在 SQL 中使用 smallint 和 tinyint 类型要特别小心，比如，假如你想看看月销售总额，你的总额字段类型是 smallint，那么，如果总额超过了 $32,767 你就不能进行计算操作了。 <br />删除标记<br />在表中包含一个“删除标记”字段，这样就可以把行标记为删除。在关系数据库里不要单独删除某一行；最好采用清除数据程序而且要仔细维护索引整体性。 <br />避免使用触发器<br />触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器，你最好集中对它文档化。 <br />包含版本机制<br />建<br/>议你在数据库中引入版本控制机制来确定使用中的数据库的版本。无论如何你都要实现这一要求。时间一长，用户的需求总是会改变的。最终可能会要求修改数据库<br/>结构。虽然你可以通过检查新字段或者索引来确定数据库结构的版本，但我发现把版本信息直接存放到数据库中不更为方便吗？。 <br />给文本字段留足余量<br />ID<br/>类型的文本字段，比如客户 ID<br/>或定单号等等都应该设置得比一般想象更大，因为时间不长你多半就会因为要添加额外的字符而难堪不已。比方说，假设你的客户 ID 为 10<br/>位数长。那你应该把数据库表字段的长度设为 12 或者 13 个字符长。这算浪费空间吗？是有一点，但也没你想象的那么多：一个字段加长 3<br/>个字符在有 1 百万条记录，再加上一点索引的情况下才不过让整个数据库多占据 3MB<br/>的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。身份证的号码从 15 位变成 18 位就是最好和最惨痛的例子。<br/><br />列[字段]命名技巧<br />我们发现，假如你给每个表的列[字段]名都采用统一的前缀，那么在编写 SQL<br/>表达式的时候会得到大大的简化。这样做也确实有缺点，比如破坏了自动表连接工具的作用，后者把公共列[字段]名同某些数据库联系起来，不过就连这些工具有<br/>时不也连接错误嘛。举个简单的例子，假设有两个表：<br />Customer 和 Order。Customer 表的前缀是 cu_，所以该表内的子段名如下：cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前缀是 or_，所以子段名是：<br />or_order_id、or_cust_name_id、or_quantity 和 or_description 等。<br />这样从数据库中选出全部数据的 SQL 语句可以写成如下所示：<br />Select * From Customer, Order Where cu_surname = &quot;MYNAME&quot; ;<br />and cu_name_id = or_cust_name_id and or_quantity = 1<br />在没有这些前缀的情况下则写成这个样子（用别名来区分）：<br />Select * From Customer, Order Where Customer.surname = &quot;MYNAME&quot; ;<br />and Customer.name_id = Order.cust_name_id and Order.quantity = 1<br />第 1 个 SQL 语句没少键入多少字符。但如果查询涉及到 5 个表乃至更多的列[字段]你就知道这个技巧多有用了。</p></span><br/><br/>
]]>
</description>
</item>
</channel>
</rss>