===========================================================
数据库设计经验谈
===========================================================

数据库设计经验谈


一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的 60 个最佳技巧,并把这些技巧编写成了本文,为了方便索引其内容划分为 5 个部分:

第 1 部分 - 设计数据库之前
这一部分罗列了 12 个基本技巧,包括命名规范和明确业务需求等。
第 2 部分 - 设计数据库表
总共 24 个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等。
第 3 部分 - 选择键
怎么选择键呢?这里有 10 个技巧专门涉及系统生成的主键的正确用法,还有何 时以及如何索引字段以获得最佳性能等。
第 4 部分 - 保证数据完整性
讨论如何保持数据库的清晰和健壮,如何把有害数据降低到最小程度。
第 5 部分 - 各种小技巧
不包括在以上 4 个部分中的其他技巧,五花八门,有了它们希望你的数据库开发工作会更轻松一些。
第 1 部分 - 设计数据库之前
考察现有环境
在设计一个新数据库时,你不但应该仔细研究业务需求而且还要考察现有的系统。大多数数据库项目都不是从头开始建立的;通常,机构内总会存在用来满足特定需求的现有系统(可能没有实现自动计算)。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的研究可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。
定义标准的对象命名规范
一定要定义数据库对象的命名规范。对数据库表来说,从项目一开始就要确定表名是采用复数还是单数形式。此外还要给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前 4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成 4 个字母长的别名;如果表的名字由 3 个单词组成,你不妨从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成 4 字母长的别名,其余依次类推)对工作用表来说,表名可以加上前缀 WORK_ 后面附上采用该表的应用程序的名字。表内的列[字段]要针对键采用一整套设计规则。比如,如果键是数字类型,你可以用 _N 作为后缀;如果是字符类型则可以采用 _C 后缀。对列[字段]名应该采用标准的前缀和后缀。再如,假如你的表里有好多“money”字段,你不妨给每个列[字段]增加一个 _M 后缀。还有,日期列[字段]最好以 D_ 作为名字打头。

检查表名、报表名和查询名之间的命名规范。你可能会很快就被这些不同的数据库要素的名称搞糊涂了。假如你坚持统一地命名这些数据库的不同组成部分,至少你应该在这些对象名字的开头用 Table、Query 或者 Report 等前缀加以区别。

如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符号来标识对象(比如 tbl_Employees)。我在和 SQL Server 打交道的时候还用过 tbl 来索引表,但我用 sp_company (现在用 sp_feft_)标识存储过程,因为在有的时候如果我发现了更好的处理办法往往会保存好几个拷贝。我在实现 SQL Server 2000 时用 udf_ (或者类似的标记)标识我编写的函数。
工欲善其事, 必先利其器
采用理想的数据库设计工具,比如:SyBase 公司的 PowerDesign,她支持 PB、VB、Delphe 等语言,通过 ODBC 可以连接市面上流行的 30 多个数据库,包括 dBase、FoxPro、VFP、SQL Server 等,今后有机会我将着重介绍 PowerDesign 的使用。
获取数据模式资源手册
正在寻求示例模式的人可以阅读《数据模式资源手册》一书,该书由 Len Silverston、W. H. Inmon 和 Kent Graziano 编写,是一本值得拥有的最佳数据建模图书。该书包括的章节涵盖多种数据领域,比如人员、机构和工作效能等。其他的你还可以参考:[1]萨师煊 王珊著 数据库系统概论(第二版)高等教育出版社 1991、[2][美] Steven M.Bobrowski 著 Oracle 7 与客户/服务器计算技术从入门到精通 刘建元等译 电子工业出版社,1996、[3]周中元 信息系统建模方法(下) 电子与信息化 1999年第3期,1999
畅想未来,但不可忘了过去的教训
我发现询问用户如何看待未来需求变化非常有用。这样做可以达到两个目的:首先,你可以清楚地了解应用设计在哪个地方应该更具灵活性以及如何避免性能瓶颈;其次,你知道发生事先没有确定的需求变更时用户将和你一样感到吃惊。

一定要记住过去的经验教训!我们开发人员还应该通过分享自己的体会和经验互相帮助。即使用户认为他们再也不需要什么支持了,我们也应该对他们进行这方面的教育,我们都曾经面临过这样的时刻“当初要是这么做了该多好..”。
在物理实践之前进行逻辑设计
在深入物理设计之前要先进行逻辑设计。随着大量的 CASE 工具不断涌现出来,你的设计也可以达到相当高的逻辑水准,你通常可以从整体上更好地了解数据库设计所需要的方方面面。
了解你的业务
在你百分百地确定系统从客户角度满足其需求之前不要在你的 ER(实体关系)模式中加入哪怕一个数据表(怎么,你还没有模式?那请你参看技巧 9)。了解你的企业业务可以在以后的开发阶段节约大量的时间。一旦你明确了业务需求,你就可以自己做出许多决策了。

一旦你认为你已经明确了业务内容,你最好同客户进行一次系统的交流。采用客户的术语并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的关系基数。这样你就可以让你的客户纠正你自己的理解然后做好下一步的 ER 设计。
创建数据字典和 ER 图表
一定要花点时间创建 ER 图表和数据字典。其中至少应该包含每个字段的数据类型和在每个表内的主外键。创建 ER 图表和数据字典确实有点费时但对其他开发人员要了解整个设计却是完全必要的。越早创建越能有助于避免今后面临的可能混乱,从而可以让任何了解数据库的人都明确如何从数据库中获得数据。

有一份诸如 ER 图表等最新文档其重要性如何强调都不过分,这对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对 SQL 表达式的文档化来说这是完全必要的。
创建模式
一张图表胜过千言万语:开发人员不仅要阅读和实现它,而且还要用它来帮助自己和用户对话。模式有助于提高协作效能,这样在先期的数据库设计中几乎不可能出现大的问题。模式不必弄的很复杂;甚至可以简单到手写在一张纸上就可以了。只是要保证其上的逻辑关系今后能产生效益。
从输入输出下手
在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。举个简单的例子:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。
报表技巧
要了解用户通常是如何报告数据的:批处理还是在线提交报表?时间间隔是每天、每周、每月、每个季度还是每年?如果需要的话还可以考虑创建总结表。系统生成的主键在报表中很难管理。用户在具有系统生成主键的表内用副键进行检索往往会返回许多重复数据。这样的检索性能比较低而且容易引起混乱。
理解客户需求
看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考虑)。不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是:“只有我看见了我才知道我想要的是什么”必然会导致大量的返工,因为数据库没有达到客户从来没有写下来的需求标准。而更糟的是你对他们需求的解释只属于你自己,而且可能是完全错误的。
第 2 部分 - 设计表和字段
检查各种变化
我在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更。比方说,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,我倾向于在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
采用有意义的字段名
有一回我参加开发过一个项目,其中有从其他程序员那里继承的程序,那个程序员喜欢用屏幕上显示数据指示用语命名字段,这也不赖,但不幸的是,她还喜欢用一些奇怪的命名法,其命名采用了匈牙利命名和控制序号的组合形式,比如 cbo1、txt2、txt2_b 等等。
除非你在使用只面向你的缩写字段名的系统,否则请尽可能地把字段描述的清楚些。当然,也别做过头了,比如 Customer_Shipping_Address_Street_Line_1,虽然很富有说明性,但没人愿意键入这么长的名字,具体尺度就在你的把握中。
采用前缀命名
如果多个表里有好多同一类型的字段(比如 FirstName),你不妨用特定表的前缀(比如 CusLastName)来帮助你标识字段。

时效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重新处理/重载数据和清除旧数据特别有用。
标准化和数据驱动
数据的标准化不仅方便了自己而且也方便了其他人。比方说,假如你的用户界面要访问外部数据源(文件、XML 文档、其他数据库等),你不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力,但如果这些过程采用数据驱动而非硬编码的方式,那么策略变更和维护都会方便得多。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
标准化不能过头
对那些不熟悉标准化一词(normalization)的人而言,标准化可以保证表内的字段都是最基础的要素,而这一措施有助于消除数据库中的数据冗余。标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,3NF 规定:
* 表内的每一个值都只能被表达一次。
* 表内的每一行都应该被唯一的标识(有唯一键)。
* 表内不应该存储依赖于其他键的非键信息。
遵守 3NF 标准的数据库具有以下特点:有一组表专门存放通过键连接起来的关联数据。比方说,某个存放客户及其有关定单的 3NF 数据库就可能有两个表:Customer 和 Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向 Customer 表里包含该客户信息的那一行。
更高层次的标准化也有,但更标准是否就一定更好呢?答案是不一定。事实上,对某些项目来说,甚至就连 3NF 都可能给数据库引入太高的复杂性。

为了效率的缘故,对表不进行标准化有时也是必要的,这样的例子很多。曾经有个开发餐饮分析软件的活就是用非标准化表把查询时间从平均 40 秒降低到了两秒左右。虽然我不得不这么做,但我绝不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表出了问题重新产生非标准化的表是完全可能的。
Microsoft Visual FoxPro 报表技巧
如果你正在使用 Microsoft Visual FoxPro,你可以用对用户友好的字段名来代替编号的名称:比如用 Customer Name 代替 txtCNaM。这样,当你用向导程序 [Wizards,台湾人称为‘精灵’] 创建表单和报表时,其名字会让那些不是程序员的人更容易阅读。
不活跃或者不采用的指示符
增加一个字段表示所在记录是否在业务中不再活跃挺有用的。不管是客户、员工还是其他什么人,这样做都能有助于再运行查询的时候过滤活跃或者不活跃状态。同时还消除了新用户在采用数据时所面临的一些问题,比如,某些记录可能不再为他们所用,再删除的时候可以起到一定的防范作用。
使用角色实体定义属于某类别的列[字段]
在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。
这里的含义不是让 PERSON 实体带有 Title 字段,而是说,为什么不用 PERSON 实体和 PERSON_TYPE 实体来描述人员呢?比方说,当 John Smith, Engineer 提升为 John Smith, Director 乃至最后爬到 John Smith, CIO 的高位,而所有你要做的不过是改变两个表 PERSON 和 PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的 PERSON_TYPE 表就包含了所有 PERSON 的可能类型,比如 Associate、Engineer、Director、CIO 或者 CEO 等。
还有个替代办法就是改变 PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。
采用常用实体命名机构数据
组织数据的最简单办法就是采用常用名字,比如:PERSON、ORGANIZATION、ADDRESS 和 PHONE 等等。当你把这些常用的一般名字组合起来或者创建特定的相应副实体时,你就得到了自己用的特殊版本。开始的时候采用一般术语的主要原因在于所有的具体用户都能对抽象事物具体化。
有了这些抽象表示,你就可以在第 2 级标识中采用自己的特殊名称,比如,PERSON 可能是 Employee、Spouse、Patient、Client、Customer、Vendor 或者 Teacher 等。同样的,ORGANIZATION 也可能是 MyCompany、MyDepartment、Competitor、Hospital、Warehouse、Government 等。最后 ADDRESS 可以具体为 Site、Location、Home、Work、Client、Vendor、Corporate 和 FieldOffice 等。
采用一般抽象术语来标识“事物”的类别可以让你在关联数据以满足业务要求方面获得巨大的灵活性,同时这样做还可以显著降低数据存储所需的冗余量。
用户来自世界各地
在设计用到网络或者具有其他国际特性的数据库时,一定要记住大多数国家都有不同的字段格式,比如邮政编码等,有些国家,比如新西兰就没有邮政编码一说。
数据重复需要采用分立的数据表
如果你发现自己在重复输入数据,请创建新表和新的关系。
每个表中都应该添加的 3 个有用的字段
* dRecordCreationDate,在 VB 下默认是 Now(),而在 SQL Server 下默认为 GETDATE()
* sRecordCreator,在 SQL Server 下默认为 NOT NULL DEFAULT USER
* nRecordVersion,记录的版本标记;有助于准确说明记录中出现 null 数据或者丢失数据的原因
对地址和电话采用多个字段
描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和 Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。

过分标准化可要小心,这样做可能会导致性能上出现问题。虽然地址和电话表分离通常可以达到最佳状态,但是如果需要经常访问这类信息,或许在其父表中存放“首选”信息(比如 Customer 等)更为妥当些。非标准化和加速访问之间的妥协是有一定意义的。
使用多个名称字段
我觉得很吃惊,许多人在数据库里就给 name 留一个字段。我觉得只有刚入门的开发人员才会这么做,但实际上网上这种做法非常普遍。我建议应该把姓氏和名字当作两个字段来处理,然后在查询的时候再把他们组合起来。

我最常用的是在同一表中创建一个计算列[字段],通过它可以自动地连接标准化后的字段,这样数据变动的时候它也跟着变。不过,这样做在采用建模软件时得很机灵才行。总之,采用连接字段的方式可以有效的隔离用户应用和开发人员界面。
提防大小写混用的对象名和特殊字符
过去最令我恼火的事情之一就是数据库里有大小写混用的对象名,比如 CustomerData。这一问题从 Access 到 Oracle 数据库都存在。我不喜欢采用这种大小写混用的对象命名方法,结果还不得不手工修改名字。想想看,这种数据库/应用程序能混到采用更强大数据库的那一天吗?采用全部大写而且包含下划符的名字具有更好的可读性(CUSTOMER_DATA),绝对不要在对象名的字符之间留空格。
小心保留词
要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,最近我编写的一个 ODBC 连接程序里有个表,其中就用了 DESC 作为说明字段名。后果可想而知!DESC 是 DESCENDING 缩写后的保留词。表里的一个 SELECT * 语句倒是能用,但我得到的却是一大堆毫无用处的信息。
保持字段名和类型的一致性
在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个表中叫做“agreement_number”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数据库呢。
仔细选择数字类型
在 SQL 中使用 smallint 和 tinyint 类型要特别小心,比如,假如你想看看月销售总额,你的总额字段类型是 smallint,那么,如果总额超过了 $32,767 你就不能进行计算操作了。
删除标记
在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
避免使用触发器
触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。
包含版本机制
建议你在数据库中引入版本控制机制来确定使用中的数据库的版本。无论如何你都要实现这一要求。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。虽然你可以通过检查新字段或者索引来确定数据库结构的版本,但我发现把版本信息直接存放到数据库中不更为方便吗?。
给文本字段留足余量
ID 类型的文本字段,比如客户 ID 或定单号等等都应该设置得比一般想象更大,因为时间不长你多半就会因为要添加额外的字符而难堪不已。比方说,假设你的客户 ID 为 10 位数长。那你应该把数据库表字段的长度设为 12 或者 13 个字符长。这算浪费空间吗?是有一点,但也没你想象的那么多:一个字段加长 3 个字符在有 1 百万条记录,再加上一点索引的情况下才不过让整个数据库多占据 3MB 的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。身份证的号码从 15 位变成 18 位就是最好和最惨痛的例子。
列[字段]命名技巧
我们发现,假如你给每个表的列[字段]名都采用统一的前缀,那么在编写 SQL 表达式的时候会得到大大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列[字段]名同某些数据库联系起来,不过就连这些工具有时不也连接错误嘛。举个简单的例子,假设有两个表:
Customer 和 Order。Customer 表的前缀是 cu_,所以该表内的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前缀是 or_,所以子段名是:
or_order_id、or_cust_name_id、or_quantity 和 or_description 等。
这样从数据库中选出全部数据的 SQL 语句可以写成如下所示:
Select * From Customer, Order Where cu_surname = "MYNAME" ;
and cu_name_id = or_cust_name_id and or_quantity = 1
在没有这些前缀的情况下则写成这个样子(用别名来区分):
Select * From Customer, Order Where Customer.surname = "MYNAME" ;
and Customer.name_id = Order.cust_name_id and Order.quantity = 1
第 1 个 SQL 语句没少键入多少字符。但如果查询涉及到 5 个表乃至更多的列[字段]你就知道这个技巧多有用了。
第 3 部分 - 选择键和索引
数据采掘要预先计划
我所在的某一客户部门一度要处理 8 万多份联系方式,同时填写每个客户的必要数据(这绝对不是小活)。我从中还要确定出一组客户作为市场目标。当我从最开始设计表和字段的时候,我试图不在主索引里增加太多的字段以便加快数据库的运行速度。然后我意识到特定的组查询和信息采掘既不准确速度也不快。结果只好在主索引中重建而且合并了数据字段。我发现有一个指示计划相当关键——当我想创建系统类型查找时为什么要采用号码作为主索引字段呢?我可以用传真号码进行检索,但是它几乎就象系统类型一样对我来说并不重要。采用后者作为主字段,数据库更新后重新索引和检索就快多了。

可操作数据仓库(ODS)和数据仓库(DW)这两种环境下的数据索引是有差别的。在 DW 环境下,你要考虑销售部门是如何组织销售活动的。他们并不是数据库管理员,但是他们确定表内的键信息。这里设计人员或者数据库工作人员应该分析数据库结构从而确定出性能和正确输出之间的最佳条件。
使用系统生成的主键
这类同技巧 1,但我觉得有必要在这里重复提醒大家。假如你总是在设计数据库的时候采用系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。
采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。
分解字段用于索引
为了分离命名字段和包含字段以支持用户定义的报表,请考虑分解其他字段(甚至主键)为其组成要素以便用户可以对其进行索引。索引将加快 SQL 和报表生成器脚本的执行速度。比方说,我通常在必须使用 SQL LIKE 表达式的情况下创建报表,因为 case number 字段无法分解为 year、serial number、case type 和 defendant code 等要素。性能也会变坏。假如年度和类型字段可以分解为索引字段那么这些报表运行起来就会快多了。
键设计 4 原则
* 为关联字段创建外键。
* 所有的键都必须唯一。
* 避免使用复合键。
* 外键总是关联唯一的键字段。
别忘了索引
索引是从数据库中获取数据的最高效方式之一。95% 的数据库性能问题都可以采用索引技术得到解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。你得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。

大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引 memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。
不要把社会保障号码(SSN)或身份证号码(ID)选作键
永远都不要使用 SSN 或 ID 作为数据库的键。除了隐私原因以外,须知政府越来越趋向于不准许把 SSN 或 ID 用作除收入相关以外的其他目的,SSN 或 ID 需要手工输入。永远不要使用手工输入的键作为主键,因为一旦你输入错误,你唯一能做的就是删除整个记录然后从头开始。

我在破解他人的程序时候,我看到很多人把 SSN 或 ID 还曾被用做系列号,当然尽管这么做是非法的。而且人们也都知道这是非法的,但他们已经习惯了。后来,随着盗取身份犯罪案件的增加,我现在的同行正痛苦地从一大摊子数据中把 SSN 或 ID 删除。
不要用用户的键
在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。这样做会迫使你采取以下两个措施:
* 在创建记录之后对用户编辑字段的行为施加限制。假如你这么做了,你可能会发现你的应用程序在商务需求突然发生变化,而用户需要编辑那些不可编辑的字段时缺乏足够的灵活性。当用户在输入数据之后直到保存记录才发现系统出了问题他们该怎么想?删除重建?假如记录不可重建是否让用户走开?
* 提出一些检测和纠正键冲突的方法。通常,费点精力也就搞定了,但是从性能上来看这样做的代价就比较大了。还有,键的纠正可能会迫使你突破你的数据和商业/用户界面层之间的隔离。
所以还是重提一句老话:你的设计要适应用户而不是让用户来适应你的设计。

不让主键具有可更新性的原因是在关系模式下,主键实现了不同表之间的关联。比如,Customer 表有一个主键 CustomerID,而客户的定单则存放在另一个表里。Order 表的主键可能是 OrderNo 或者 OrderNo、CustomerID 和日期的组合。不管你选择哪种键设置,你都需要在 Order 表中存放 CustomerID 来保证你可以给下定单的用户找到其定单记录。
假如你在 Customer 表里修改了 CustomerID,那么你必须找出 Order 表中的所有相关记录对其进行修改。否则,有些定单就会不属于任何客户——数据库的完整性就算完蛋了。
如果索引完整性规则施加到表一级,那么在不编写大量代码和附加删除记录的情况下几乎不可能改变某一条记录的键和数据库内所有关联的记录。而这一过程往往错误丛生所以应该尽量避免。
可选键(候选键)有时可做主键
记住,查询数据的不是机器而是人。
假如你有可选键,你可能进一步把它用做主键。那样的话,你就拥有了建立强大索引的能力。这样可以阻止使用数据库的人不得不连接数据库从而恰当的过滤数据。在严格控制域表的数据库上,这种负载是比较醒目的。如果可选键真正有用,那就是达到了主键的水准。
我的看法是,假如你有可选键,比如国家表内的 state_code,你不要在现有不能变动的唯一键上创建后续的键。你要做的无非是创建毫无价值的数据。如你因为过度使用表的后续键[别名]建立这种表的关联,操作负载真得需要考虑一下了。
别忘了外键
大多数数据库索引自动创建的主键字段。但别忘了索引外键字段,它们在你想查询主表中的记录及其关联记录时每次都会用到。还有,不要索引 memo/notes 字段而且不要索引大型文本字段(许多字符),这样做会让你的索引占据大量的数据库空间。
第 4 部分 - 保证数据的完整性
用约束而非商务规则强制数据完整性
如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。

只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
分布式数据系统
对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来 5 年或者 10 年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。
强制指示完整性(参照完整性?)
没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。
关系
如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。
采用视图
为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。
给数据保有和恢复制定计划
考虑数据保有策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供以后万一数据丢失可以重新处理更新。
用存储过程让系统做重活
解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我决定封装一些关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。数据库不只是一个存放数据的地方,它也是简化编码之地。
使用查找
控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。
第 5 部分 - 各种小技巧
文档、文档、文档
对所有的快捷方式、命名规范、限制和函数都要编制文档。

采用给表、列[字段]、触发器等加注释的数据库工具。是的,这有点费事,但从长远来看,这样做对开发、支持和跟踪修改非常有用。

取决于你使用的数据库系统,可能有一些软件会给你一些供你很快上手的文档。你可能希望先开始在说,然后获得越来越多的细节。或者你可能希望周期性的预排,在输入新数据同时随着你的进展对每一部分细节化。不管你选择哪种方式,总要对你的数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当你过了一年多时间后再回过头来做第 2 个版本,你犯错的机会将大大减少。
使用常用英语(或者其他任何语言)而不要使用编码
为什么我们经常采用编码(比如 9935A 可能是‘青岛啤酒’的供应代码,4XF788-Q 可能是帐目编码)?理由很多。但是用户通常都用英语进行思考而不是编码。工作 5 年的会计或许知道 4XF788-Q 是什么东西,但新来的可就不一定了。在创建下拉菜单、列表、报表时最好按照英语名排序。假如你需要编码,那你可以在编码旁附上用户知道的英语。
保存常用信息
让一个表专门存放一般数据库信息非常有用。我常在这个表里存放数据库当前版本、最近检查/修复(对 FoxPro)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。
测试、测试、反复测试
建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证你选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。
检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
Microsoft Visual FoxPro 设计技巧
对复杂的 Microsoft Visual FoxPro 数据库应用程序而言,可以把所有的主表放在一个数据库容器文件里,然后增加其他数据库表文件和装载同原有数据库有关的特殊文件。根据需要用这些文件连接到主文件中的主表。比如数据输入、数据索引、统计分析、向管理层或者政府部门提供报表以及各类只读查询等。这一措施简化了用户和组权限的分配,而且有利于应用程序函数(存储过程)的分组和划分,从而在程序必须修改的时候易于管理。


Nick4872 发表于:2005.03.08 11:16 ::分类: ( 珊珊的原创 ) ::阅读:(559次) :: 评论 (0)
===========================================================
WINDOWS XP终极设置(呕心沥血版)
===========================================================
WINDOWS XP终极设置WINDOWS XP终极设置(呕心沥血版)
 声明:以上资料均是从从互联网上搜集整理而来,本人未曾一一测试,所以在改动时要小心,做好备份,有备无患么,呵呵。

   一、系统优化设置。
  1、删除Windows强加的附件:
  1) 用记事本NOTEPAD修改winntinfsysoc.inf,用查找/替换功能,在查找框中输入,hide(一个英文逗号紧跟hide),将“替换为”框设为空。并选全部替换,这样,就把所有的,hide都去掉了,
  2) 存盘退出,
  3)再运行“添加-删除程序”,就会看见“添加/删除 Windows 组件”中多出了好几个选项;这样你可以删除好些没有用的附件。
  2、关掉调试器Dr. Watson;
  Dr.Watson是自带的系统维护工具,它会在程序加载失败或崩溃时显示。运行drwtsn32,把除了“转储全部线程上下文”之外的全都去掉。否则一旦有程序出错,硬盘会响很久,而且会占用很多空间。如果你以前遇到过这种情况,请查找user.dmp文件并删掉,可能会省掉几十M的空间。这是出错程序的现场,对我们没用。然后打开注册表,找到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAeDebug子键分支,双击在它下面的Auto键值名称,将其“数值数据”改为0,最后按F5刷新使设置生效,这样就彻底来取消它的运行了。
  另外蓝屏时出现的memory.dmp也可删掉。可在我的电脑/属性中关掉BSOD时的DUMP
  3、关闭“系统还原”:鼠标右健单击桌面上的“我的电脑”,选择“属性”,找到“系统还原”,如果你不是老噼里啪啦安装一些软件(难道你比我还厉害??),你也可以去掉,这样可以节省好多空间。

  4.关闭“休眠支持”:因为休眠功能占的硬碟空间蛮大的, 所以关闭比较好,
  控制台-->电源选项-->休眠(不要打勾)
  (蓝调注:我觉得休眠还是很有用的。)

  5、关掉不必要的服务
  单击“开始”→“设置”→“控制面板”。双击“管理工具”→“服务”,打开后将看到服务列表,有些服务已经启动,有些则没有。右键单击要配置的服务,然后单击“属性”。在“常规”选项卡上选择“自动”、“手动”或“禁用”,其中“自动”表示每次系统启动时,Windows XP都自动启动该服务;“手动”表示Windows XP不会自动启动该服务,而是在你需要该服务时手动启动该服务;而“禁用”则表示不允许启动该服务。在实际配置时,选择“手动”或者“禁用”都可以实现关闭该服务的目的,推荐使用手动功能,这样你随时可以启动一些临时需要的服务。
  有些服务是Windows XP所必需的,不能关闭,否则将会造成系统崩溃。至于各项服务
的功能,我们可以通过双击该服务或将鼠标悬停在该服务名上查看。具体服务的说明浅显,大家看得懂,可以自己选择那些要那些不要。修改的方法是:选中禁用的服务,点右键,选"属性"> "停止",将"启动类型"设置为"手动"或"已禁用"。

  6、加速XP的开关机
  1)缩短等待时间
  开启注册表编辑器,找到 HKEY_LOCAL_MACHINESystemCurrentControlSetControl,
将 WaitToKillServiceTimeout 设为:1000或更小。 ( 原设定值:20000 )
找到 HKEY_CURRENT_USERControl PanelDesktop 键,将右边视窗的
WaitToKillAppTimeout 改为 1000, ( 原设定值:20000 )即关闭程序时仅等待1秒。将 HungAppTimeout 值改为:200( 原设定值:5000 ), 表示程序出错时等待0.5秒。

  2)让系统自动关闭停止回应的程式。
  打开注册表 HKEY_CURRENT_USERControl PanelDesktop 键, 将 AutoEndTasks 值设为 1。 ( 原设定值:0 )

  3)MsConfig。大多数朋友都应该熟识MsConfig了,这是一个系统内置的Windows设置工具。点击开始菜单,选择“运行”,然后在录入框中敲入“msconfig”回车。我们要动手脚的是(启动)选项卡,点击它,这个选项卡中显示了Windows启动时运行的所有程序。这里没有一个程序对Windows来说是生死悠关的,所以放心大胆地把不要的去掉。把部分勾勾去掉之后,Windows启动会快些,同时空闲的系统资源也会多出一些。

  7、XP Prefetcher
  Windows XP自带了一个名为Prefetcher的服务,这个服务管理着Windows启动时的程序初始,其中指定的程序可以在以后使用中快速载入。Prefetcher在默认情况下就是打开的,不过它的性能还可以进一步提升。打开注册表编辑器,在注册表中找到:
  HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory
ManagementPrefetchParameters,其中有一个键值名为EnablePrefetcher,多数情况下它的值是3。推荐设置值是5,在我的机子上,设为5的时候工作状态最佳。可以随便试试不同的数值,直到找到最适合自己机子的值为止。 
  也可以把Prefetcher禁用掉,只需把值设为0就可以了。不过,除非是为了测试用途,一般人都不会傻到把它设为0。

  8、压缩文件夹
  这是一个相当好的优化,Windows XP内置了对.ZIP文件的支持,我们可以把zip文件当成文件夹浏览。不过,系统要使用部分资源来实现这一功能,因此禁用这一功能可以提升系统性能。实现方法非常简单,只需取消zipfldr.dll的注册就可以了,点击开始——运行,敲入: regsvr32 /u zipfldr.dll 。然后回车即可。

  9、不加载DLL文件  
  浏览器在使用之后往往会有部分DLL文件在内存中缓存好长一段时间,相当大一部分内存会被不用的DLL文件点用。为了防止这种事情发生,找到注册表如下位置:
  HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorer
  接下来建立一个名为AlwaysUnloadDLL,值为1的双字节值。
如果想要去除这项优化,只需把该键值设为0(也可以干脆把键删掉)。注意:该项优化要在Windows重新启动后才生效。

  10、完全关闭Windows XP文件保护功能。此招慎用
  从注册表中找到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon,修改“SFCDisable”键值为“FFFFFF9D”,如果需要重新启用该功能,重新设置为“0”就可以了。

  11、手动指定进程次序查看
  同时按下Control+Alt+Delete三个键,然后点击“Processes(进程)”选项卡,可以看到一个如上图所示的对话框,在这里可以看到目前正在运行的所有进程。如果要为一个程序分配更多的进程时间,如3D Studio Max,只需右键点击这个进程,再把鼠标指针向下移动到“Set Priority>(设置优先级)”,然后选择你想要这个程序处在哪个优先级。当我接收email时,我会把3DMAX设为“标准”,但当我离开计算机的时候,我会把它的优先急提升为最高的“实时”,这样可以计算机更专注更快速地处理3D动作

  12、关闭错误回报
  控制台---->系统---->进阶---->右下角--->错误报告---->关闭

  13、加快窗口显示速度:我们可以通过修改注册表来改变窗口从任务栏弹出,以及最小化回归任务栏的动作,步骤如下:打开注册表编辑器,找到HKEY_CURRENT_USER
Control PanelDesktopWindowMetrics子键分支,在右边的窗口中找到MinAniMate键值,其类型为REG_SZ,默认情况下此健值的值为1,表示打开窗口显示的动画,把它改为0,则禁止动画的显示,接下来从开始菜单中选择“注销”命令,激活刚才所作的修改即可。

  14、去掉“更新”选项:对于大多数的用户来说,Windows XP的Windows Update功能似乎作用不大,我们可以去掉它,操作步骤如下:打开注册表编辑器,找到
HKEY_CURRENT_USERSoftware MicrosoftWindowsCurrentVersionPolicies
Explorer子键分支,选择“编辑”菜单下的“新建”命令,新建一个类型为REG_DWORD的值,名称为NoCommonGroups,双击新建的NoCommonGroups子键,在“编辑字符串”文本框中输入键值“1”,然后单击“确定”按钮并重新启动系统即可。

  15、修改Windows XP的登录背景图案:面对长久不变的单调的登录图案,你可能日久生厌,我们可以通过注册表来把它换成自己喜欢的图案,步骤如下:打开注册表编辑器,找到HKEY_USERS.DEFAULTControl PanelDesktop子键分支,双击wallpaper,键入你选择好的图片的路径,如:c:Documents and SettingsMy DocumentsMy Picturesmypic.bmp,点击“确定”,然后找到Tilewallpaper,双击它输入键值“1”,重新启动系统即可看到效果。

  16、修改登录时的背景色:如果你还想修改登录时的背景颜色,可以按以下步骤操作:打开注册表编辑器,找到HKEY_USERS.DEFAULTControl PanelColors子键分支,双击子键分支下的Background键值名,出现“编辑字符串”对话框,在“数值数据”文本框中输入代表颜色的键值(比如黑色的RGB值为000,白色的RGB值为255 255 255,系统默认值是58 110 165),点击“确定”按钮,重新启动系统即可。
17、设置启动信息或增加警告信息:如果在启动Windows XP时,希望显示一些自己定义的个性化信息,可以按以下步骤来操作:打开注册表编辑器,找到HKEY_LOCAL_MACHINE_SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon子键分支,双击在它下面的LegalNoticeCaption健值名称,打开“编辑字符串”窗口,在“数值数据”文本框中输入信息对话框的标题,比如“你好,欢迎使用本机器”,然后双击LegalNoticeText,在随后出现的“编辑字符串”窗口中输入想要显示的警告信息,比如“请不要随意修改本级的设置,谢谢!”,单击“确定”按钮,重新启动即可看到修改后的效果了。

  18、每次启动时保持桌面设置不变:我们可以通过修改注册表来保护我们的桌面设置,无论做了什么样的修改,只要重新启动之后桌面就会恢复原样。步骤如下:打开注册表编辑器,找到HKEY_CURRENT_USERSSoftwareMicrosoftWindowsCurrentVersion Polices
Explorer子键分支,在它的下面找到NoSaveSettings,其类型为REG_SZ,将其键值改为“0”,或者直接删除该键值项,重新启动系统使设置生效。

  19、任意定制按钮颜色:尽管Windows XP本身带有多种窗口显示方案,但用户想定义某一个部位的颜色,比如把按钮的颜色由黑色改为蓝色或红色,这时就需要修改注册表了,步骤如下:打开注册表编辑器,找到HKEY_CURRENT_USERControl PanelColors子键分支,双击在它下面的Bottontext,在打开的对话框中将其键值改为你想要颜色的值,比如红色255 0 0,单击“确定”按钮,并重新启动系统即可看到效果了,此时按钮上的文字颜色将变成红色,此外你还可以修改按钮的宽度和高度及背景等参数。

  20、修改鼠标右键菜单
  我们知道在98下可以通过注册表来修改鼠标右键菜单,其实在WinXP中也可以。方法如下:这里以在鼠标右键菜单上添加“用DOS窗口在这里浏览”为例。
  1)打开注册表编辑器,找到HKEY_CLASSES_ROOTDirectoryshell,然后选中它,点击鼠标右键,新建一个主键,取名为“DOS”,然后选中新建的主键,在右边双击默认字符串值,在弹出的对话框中输入“用DOS窗口在这里浏览”,然后选中新建的主键,再建立一个主键,取名为“command”,选中“command”主键,修改默认值为“cmd.exe /k "cd %L"”即可。
  2)检查:在任意一个文件夹上按下鼠标右键,可以在弹出的菜单里面看到“用DOS窗口在这里浏览”,选择用DOS窗口在这里浏览,按下鼠标左键,看到没有,DOS窗口弹了出来!

  21、修改系统ID号(ID号在WinXP里面很重要)
  在系统属性里面的常规标签下我们可以看到一串数字,如:55661-005-0809362-22169等等。这就是ID号。正版的WinXP每一套的ID号是不相同的(应该可以猜到我的目的了吧?),那么我们可不可以修改呢?当然可以(废话!如果不可以就没有必要写这篇文章了)。跟我来,看看我的本领!
1)ID号是存放在注册表里面的。主要放在这几个键值下:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerRegistration的字符串ProductId
HKEY_LOCAL_MACHINESOFTWAREMicrosoftUser information的字符串产品标识 /*如果没有使用向微软注册的话,这里不会出现*/
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion的字符串ProductId
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion的字符串ProductId
以上4个地方就是在注册表中存放ID的键值,修改的时候要同时修改,修改完以后再看系统属性里面的常规标签,以免修改失败,导致ID还原。

  22、修改版本号:
  在关于Windows里面有一个内部版本号(正式版的是:2600.xpclient.010817-1148),这个版本号也是存放在注册表中的,具体位置是HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion, 它用一个字符串来记录,修改这个名字叫做BuildLab的字符串就可以修改你的XP的版本号。

  23、向隐藏的垃圾箱删除文件
  Windows XP垃圾箱的默认位置是在桌面的右下角,在底部系统托盘的上面。如果用户打开多个窗口,则会挡住垃圾箱,使用户无法拖曳文件及文件夹至垃圾箱。为此,微软公司专门做了非常人性化的设计,当用户拖动一批文件并移至桌面右下角时,用户可以拖动鼠标并将所有文件移至桌面最下方任务条的空白区域,并在那里停留几秒钟,届时所有打开的窗口将会自动最小化,从而允许用户将文件拖至垃圾箱。另外,无论打开的多个窗口是否最大化,用户执行上述操作均可以实现让所有窗口最小化的效果。

  24、音乐目录图片随意设
  Windows XP在以往的Windows操作系统之上提供了很多更高级的管理功能,其中包括图片册生成器,该图片册生成器可以将唱片封面图片自动放置到用户对应保存的音乐文件夹内(这些音乐文件一般是微软的WMA格式文件)。虽然这项功能非常方便,但也存在一些问题。例如如果有些用户以前已经把一些音乐CD光盘转录成MP3格式并保存在硬盘上,虽然用户能够从一些音乐网站如"
www.cdnow.com"和"www.amguide.com"下载该CD光盘的唱片封面页,但用户只能手工一个一个地将这些封面页添加至每个音乐文件夹中。这将花费较长时间,而且一旦用户重新安装操作系统,就只好重复上述复杂的操作。
  如何解决这一难题呢?其实并不复杂,当用户下载音乐唱片封面图片时,请将该图片文件名保存为"folder.jpg"并放至相应的音乐文件夹内,这样Windows XP系统会自动将其默认为该文件夹的缩略图片,而且如果用户使用Media Player for Windows XP(MPXP)播放器来播放音乐文件时,系统还会自动显示出该唱片封面图片。这样操作之后即使用户以后重新安装操作系统也没有问题。
  此外,如果用户有需求,还可以在保存上述提及的"folder.jpg"文件时再保存一个名为"albumartsmall.jpg"的较小的图片文件,这样做的好处是如果用户使用MPXP播放器播放音乐文件,但播放器的窗口小于200 X 200像素,该播放器便可以直接显示这幅较小的图片,否则播放器需要对"folder.jpg"进行处理,调整其大小,以便显示在较小的窗口,而这自然会对文件调用的速度产生一定影响。

  25、便捷地硬盘碎片整理
  电脑使用一段时间后硬盘会产生大量文件碎片,用户需要定期调用磁盘碎片整理程序进行清理。为此,这里向你提供一个可以让你更加便捷地调用整理硬盘碎片程序的方法。
  用户使用“记事本”编辑一个名为"context_defrag.inf"的注册表导入文件,并在该文件中输入下列内容:
; context_defrag.INF
; Adds Defrag to the right click context menu in Windows XP
[version]
signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddMe
[AddMe]
HKCR,"DriveShellDefragcommand",,,"DEFRAG.EXE %1"
编辑完毕后用鼠标右击该文件并选择“安装”,安装后即在Windows XP操作系统内添加了一个文本菜单。用户需要整理硬盘时,打开“我的电脑”,用鼠标右击选中需要进行整理的硬盘盘符,从弹出的文本菜单中选择"defrag"项,这时系统就会自动调用内置的"defrag.exe"程序整理硬盘。
  如果用户需要将上述安装到系统注册表的信息删除,可使用regedit.exe注册表编辑器进行编辑修改,具体操作为寻找到"HKEY_CLASSES_ROOTDriveshell"目录项,删除其中的"defrag"文件夹,最后关闭注册表编辑器。

  26、清除共享文件夹
  Windows XP操作系统一个比较不友好的用户界面是在“我的电脑”窗口上半部分显示所有共享的文件夹,如果用户设置的共享文件夹较多,每当打开“我的电脑”窗口时,就会列有很多共享文件夹信息。如何删除这些信息显示呢?使用注册表编辑器,并寻找这个主键"HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer My Computer NameSpace DelegateFolders",在该主键下有一个名为
{59031a47-3f72-44a7-89c5-5595fe6b30ee}的副键,删除该副键便可清除那些共享文件夹信息。上述修改无需重新启动便可生效
27、显示共享设置标签
  Windows 2000操作系统中用户在设置文件夹的共享属性时操作非常简便,只需用鼠标右击该文件夹并选择属性,就可以看到共享设置标签。而在Windows XP系统设置文件夹共享时则比较复杂,用户无法通过上述操作看到共享设置标签。具体的修改方法如下:打开“我的电脑”中的“工具”,选择“文件夹属性”,调出“查看”标签,在“高级设置”部分滚动至最底部将"Use simple file sharing (Recommended)"前面的选择取消,另外如果选项栏里还有"Mickey Mouse"项也将其选择取消。这样修改后用户就可以象使用Windows 2000一样对文件夹属性进行方便修改了。

  28、调用系统声音方案
  与以往的Windows操作系统相比,Windows XP提供了更加优秀的声音方案,但系统默认却没有调用该方案。为了激活该方案,我们需要执行下列操作:打开“控制面板”,选择“声音、语音、音频设备”项,从中找到“修改声音方案”的任务栏,在打开的对话框中选择“Windows默认”,此时系统会提示用户是否保存以前的声音方案设置,用户可以选择“否”并点击“确认”,完成修改

  29、加快开始菜单的显示
  Windows XP系统默认的开始菜单显示较慢,但用户可以通过编辑注册键值来加快显示,具体方法是:打开注册表编辑器,寻找"HKEY_CURRENT_USER Control Panel Desktop MenuShowDelay"主键,系统默认值为400,用户可以根据自己的喜好适当调小该键值,最低可设为“0”。如果此方法无效,请从“控制面板”中选择“显示属性”,在“显示效果”中选择“高级”,将"show menu shadow"项的选择取消,这样便可以加快开始菜单的显示了。

  30、让欢迎窗口更清晰
  Windows XP系统的显示效果得到了较大提高,这主要是基于它使用了名为"ClearType"的清晰化技术,该技术特别让使用笔记本电脑及液晶显示器的用户在运行Windows XP操作系统时感受到与以往系统不同的效果。但由于该清晰效果只有当Windows启动完毕后才能调用,因此在系统启动过程中的欢迎窗口仍然无法实现这一效果。为了使欢迎窗口更加清晰,用户可以使用注册表编辑器进行修改,寻找到这两个主键
"(default user) HKEY_USERS .Default Control Panel Desktop FontSmoothing
(String Value)"和"HKEY_USERS .Default Control Panel Desktop FontSmoothingType
(Hexadecimal DWORD Value)",将键值修改为“2”,这样便可以实现清晰显示效果了。

  31、启动时禁止自动调用"Windows Messenger"
  为了推广微软公司推出的即时聊天程序"Windows Messenger",Windows XP操作系统的默认设置是在系统启动时便调用该程序。但如果你并不习惯使用该程序,可以通过删除"HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunMSMSGS"此键来实现。

  32、在关机对话框中显示“休眠”
  Windows XP的默认设置是在关机对话框中没有让系统进入休眠状态的选项,而显示该选项的操作非常简单,当出现关机对话框时,用户可以同时按下"SHIFT"键,这样“休眠”选项便出现了。

  二、硬件优化
  1、内存性能优化
  Windows XP中有几个选项可以优化内存性能,它们全都在注册表下面位置:  HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  1)禁用内存页面调度(Paging Executive)
  在正常情况下,XP会把内存中的片断写入硬盘,我们可以阻止它这样做,让数据保留在内存中,从而提升系统性能。要注意的是,拥有很多内存的用户(256M以上)才好使用这个设置。这个设置的名字正如它的功能一样,叫“DisablePagingExecutive”。把它的值从0改为1就可以禁止内存页面调度了。
  2)提升系统缓存:把LargeSystemCache键值从0改为1,Windows XP就会把除了4M之外的系统内存全部分配到文件系统缓存中,这意味着XP的内核能够在内存中运行,大大提高系统速度。剩下的4M内存是用来做磁盘缓存的,在一定条件下需要的时候,XP还会分配更多一些。一般来说,这项优化会使系统性能得到相当的提升,但也有可能会使某些应用程序性能降低。正如前面所说的,必须有256M以上的内存,才好激活LargeSystemCache,否则不要动它。
  3)输入/输出性能:这个优化只对server用户才有实在意义——它能够提升系统进行大容量文件传输时的性能。在默认情况下,这个键值在注册表中是不存在的,必须自己建一个DWORD(双字节值)键值,命名为IOPageLockLimit。多数人在使用这项优化时都发现8到16M字节之间性能最好,具体设什么值,可以设进去试试看哪个值可以获得最佳性能。记住这个值是用字节来计算的,因此,譬如你要分配12M的话,就是12 * 1024 * 1024,也就是12582912。跟前面的内存优化一样,只有当你的内存大于256M的时候才好更改这里的值。
  2、打开DMA:到装置管理员里选择IDE ATA/ATAPI controllers ,到Primary/Secondary IDE Channel里面的进阶设定 ,将所有的转送模式都设定为使用DMA(如果可用的话) ,系统就会自动打开DMA支援(在BIOS里也应该要先设为支援DMA)

  3、XP里关闭光驱自启动(Autorun)功能:打开:我的电脑,在“移动存储设备”下,右键单击CD-ROM 驱动器,然后单击“属性”,看到“自动播放”选项卡了么?自己去改吧。

  4、设置CPU:Windows XP无法自动检测处理器的二级缓存容量,需要我们自己在注册表中手动设置,首先打开注册表(运行中输入“Regedit”),打开:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management,选择“SecondLevelDataCache”,根据自己所用的处理器设置即可,例如PIII Coppermine/P4 Willamette是“256”,Athlon XP是“384”,P4 Northwood是“512”

  5、XP安装驱动程式时,往往会出现一个窗口,说这个程序没有经过微软的验证,我们可以在控制面板——系统——硬件——设备管理员——驱动程序签名,看到了选项了么,知道该怎么做了吧。

  6、为IRQ中断请求排优先次序
计算机的每一个主要部件都设了个IRQ中断号。这里就是要通过修改每个IRQ请求的优先次序达到优化目的。这里主要的优化对象是系统/CMOS实时钟,它通过主板来提升性能。首先,要确定你想要哪个组件获得更高的性能,然后找到这个硬件正在使用的IRQ中断号。怎么找呢?打开控制面板里的系统属性(也可以按键盘上的Windows+Break热键组合打开它)。选中“硬件”选项卡,然后点击“设备管理器”按钮。右键点击要查IRQ号的组件,选择“属性”,然后点击“资源”选项卡。这里可以看到设备正在使用的IRQ中断号(如果没有IRQ中断号,选择另一个设备)。把中断号记下来,然后运行注册表编辑器regedit,找到注册表中的HKEY_LOCAL_MACHINESystemCurrentControlSetControlPriorityControl 位置。我们要在这里建立一个名为IRQ#Priority(其中“#”是具体的IRQ中断号)的DWORD双字节值,然后把它的值设为1。譬如说,我的系统CMOS实时钟的IRQ中断号是8,我要建立的键名就是IRQ8Priority。重新启动计算机之后,就会发现刚优化过的组件性能有所提高。笔者强烈建议用这个方法优化系统CMOS实时钟,因为它能改善整块主板的性能。当然也可以把多个IRQ中断号优先级提高,但这样做的效果没那么好,而且有可能造成系统不稳定。要把这个优化设置撤消的话,只要把刚才建立的注册表键值删掉就OK了。三、网络优化:
  1、加速共享:这是一项很棒的优化,在找到这项优化之前,我经常在漫长地等待窗口显示其它机子上的共享目录中敲破头皮。通常情况下,当Windows XP连接到其它计算机时,会检查对方机子上所有预定的任务——这真是多余,而且还会让你等上30秒钟,实在太糟糕了。所幸的是,很容易就可以把这个过程给禁掉。首先,在注册表中找到HKEY_LOCAL_MACHINESoftwareMicrosoftWindows/Current VersionExplorerRemoteComputerNameSpace。在这里面,应该有个
{D6277990-4C6A-11CF-87-00AA0060F5BF}键。只需把它删掉,重新启动计算机后,Windows就不再检查预定任务了,速度明显提高!

  2、解决WinXP执行时候停顿一下的问题
  开始——网络连接——本地连接,按右键,选择属性,选择“Internet协议(TCP/IP)”,点击属性,使用下面的IP地址:192.168.0.1,子网掩码:255.255.255.0,这样就好了,以後开机就不会停顿了

  3、如何让XP自动连网:
  IE—— 工具——internet选项——连接,勾选 "网路不存在时拨号" ,把 IE 拉到 "启动"
每次开机完成后, 你已经上线了 ! 还有一种方法:
进入连线内容,把「提示名称、密码、凭证等」的勾勾取消掉,然後把该连线拉到“启动”(蓝调注:估计原作者是港台的,用语不同。因为我上网用宽带,所以这里简体中文是什么用语不清楚。修改成功的朋友回个帖子,便于我修改。)

  4、在默认情况下,XP Pro 会保留一块网卡的20%的带宽。 修改的方法是,以管理员权限登陆 ,开始菜单——运行——键入 gpedit.msc ,出现“组策略”窗口, 展开 "管理模板”中的“网络” , 展开 "QoS 数据包调度程序", 在右边窗右键单击“限制可保留带宽" ,在属性中的“设置”中有“限制可保留带宽" ,选择“已启用”,然后在下方"带宽限制"栏目里选择一个数值就可以了.不能选择"禁用",因为那样做的话,系统会认为你认可了保留20%的带宽。具体修改可以参照“属性”旁边的“说明”栏目。当进行完上述修改并应用后,用户应该在网络连接的属性对话框内的一般属性标签栏中能够看到"QoS Packet Scheduler(QoS 数据包调度程序)"。Home版不支持该操作,无法去除该限制!

  5、xp内置了防火墙,默认设置是未打开。设置方法详见后面的“全面设置防火墙”。

  四、XP系统所在分区减肥方法。
  1. 删除系统文件备份 sfc.exe /purgecache (一般用户是不怎么用的)
  2 删除驱动备份 windowsdriver cachei386目录下的Driver.cab文件 (73mb)
  3. 取消系统还原 (总体来说系统还原功能还是不错的,建议除了xp安装的那个盘使用,其它盘都别用,如果哪一天硬盘的空间不够了,可以通过系统清理程序删除一些比较早的还原点)
  4、删除帮助文件(减掉40多mb) (使用中文汉化包的文件大小为92兆,刚开始使用xp的同志最好别删)
  5、删掉WINDOWSsystem32dllcache下文件(减去200——300mb)。(这是备用的dll文件,只要你拷贝了安装文件,完全可以这样做。既然这样删你没话说)
  6、把我的文档、IE的临时文件夹都转到其他盘(分区)。 (同时对系统的速度,和硬盘都有好处,如果使用的是双系统,最好把两个系统的IE临时文件都放在同一个文件夹,这样既加快速度有节省空间)
  7、把虚拟内存也转到其他盘。(就是将这些东西和平时临时下载文件放在一个不大的分区里,这样也方便整理硬盘)
  8、将应用软件装在其他盘(这对重装系统也有好处,可以省很多事)。
  9、删除windowsime下不用的输入法! (日文,韩文,繁体中文输入法,84.5MB) (到底哪个是哪个自己研究一下吧!有时候也要自己动动脑子的,锻炼一下吧!)
  10、如用ntfs装xp,本身就节省地盘。

  五、其他
  1、激活显示:
  开机后,打开开始菜单中的运行栏,打入:oobe/msoobe /a
  如果出现“Windows 产品启用”,表明Windows 已经启用

  2、制做dos启动盘:
  右键点击“3.5软盘”,选格式化,再选“建立一个MS-DOS开机磁盘”

  3、解决任务栏假死(权威的消除QQ、IE等引起任务栏假死)
  “控制面板"->"区域和语言选项"->"语言"->"详细信息",在弹出的"设置窗口"中选择"首选项"的"语言栏",关闭“在桌面上显示语言栏”,在第三项"在通知区域显示其他语言栏图标"复选框上打上勾。如果不需要手写识别、语音识别的话,也可以再勾选最后一项"关闭高级文字服务"。

  4、某些软件的兼容性(适用于家用版"HomeEdition"及专业版"Professional")
  对于QQ假死,以及其它某些程序在XP下不能正常运行的现象,可以找到该程序的执行文件,点右键,在弹出的对话框中选择"兼容性"标签,在"兼容模式"下选择相应需要的运行环境。

  5、双操作系统,怎么卸载xp
  先用启动盘启动,然后键入“a:sys c: ”,再从硬盘重新启动,然后删去 boot.ini, bootsect.dos, ntdetect.com, ntldr ,然后把xp的windows, program files, Documents and Settings等目录直接删去,或格式化 winxp 的硬盘(如果你的xp和win98不在一个分区上的话)

  6、如何判断xp是不是中文正式版。
  打开看安装文件夹i386,找到SETUPP.INI,用记事本打开,如果内容为:
如果和下面一样,那就是用英文版 corpfiles patch 的。
[Pid]
ExtraData=796674736977656D7A622E385892A4
Pid=55274270
目前流出的中文企业版SETUPP.INI 内容是
[Pid]
ExtraData=766E74737A7B787061627428828710
Pid=55394270

  7、在线更新不能升级的解决方法。
  在C:WINDOWSsystem32driversetchosts中最后一行添加
207.68.131.21www.download.windowsupdate.com就可以在线升级了。修改后的文件应该是这样的
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost
207.68.131.21www.download.windowsupdate.com


Nick4872 发表于:2005.03.07 21:36 ::分类: ( XP系统使用技巧 ) ::阅读:(831次) :: 评论 (0)
===========================================================
使你的XP 快几倍
===========================================================
绝对有效的方法,我每次我装好系统都这样!
1、减少开机磁盘扫描等待时间,开始→运行,键入:chkntfs /t:0 
2、删除系统备份文件:
在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少了。开始→运行,敲入:sfc.exe /purgecache 然后回车即可,近3xxMb。 
3、压缩文件夹 
这是一个相当好的优化,Windows XP内置了对.ZIP文件的,我们可以把zip文件当成文件夹浏览。不过,系统要使用部分资源来实现 这一功能,因此禁用这一功能可以提升系统性能。实现方法非常简单,只需取消zipfldr.dll的注册就可以了,点击开始——运行,敲入: regsvr32 /u zipfldr.dll。然后回车即可。

大家别忘了重起,然后就OK了!
Nick4872 发表于:2005.03.07 09:34 ::分类: ( XP系统使用技巧 ) ::阅读:(1374次) :: 评论 (0)
===========================================================
xp密码破解的小窍门(不用软件的哦,非常实用)
===========================================================
xp密码破解的小窍门(不用软件的哦,非常实用)

XP密码破解方法挺多的,用软件的方法前面的楼主以经说过了,我就不多说了,在这里我说说一般的方法,希望大家多多支持!!!

一、利用NET命令 
 以恢复本地用户“zhangbq”口令为例,来说明解决忘记登录密码的步骤: 
 1、重新启动计算机,在启动画面出现后马上按下F8键,选择“带命令行的安全模式”。 
2、运行过程结束时,系统列出了系统超级用户“administrator”和本地用户“zhangbq”的选择菜单,鼠标单击“administrator”,进入命令行模式。 
3、键入命令:“net user zhangbq 123456 /add”,强制将“zhangbq”用户的口令更改为“123456”。若想在此添加一新用户(如:用户名为abcdef,口令为123456)的话,请键入“net user abcdef 123456 /add”,添加后可用“net localgroup administrators abcdef /add”命令将用户提升为系统管理组“administrators”的用户,并使其具有超级权限。 
4、重新启动计算机,选择正常模式下运行,就可以用更改后的口令“123456”登录“zhangbq”用户了。 

二、利用“administrator” 
在安装Windows XP过程中,首先是以“administrator”默认登录,然后会要求创建一个新账户,以便进入Windows XP时使用此新建账户登录,而且在Windows XP的登录界面中也只会出现创建的这个用户账号,不会出现“administrator”,但实际上该“administrator”账号还是存在的,并且密码为空。 
假如忘记了登录密码的话,在登录界面上,按住Ctrl+Alt键,再按住Del键二次,即可出现经典的登录画面,此时在用户名处键入“administrator”,密码为空进入,然后再修改“zhangbp”的口令即可。 
四,
关于xp密码破解,网上流传的方法有很多误导之处。像2000那样删除sam文件是不可以的,

那样系统检测到安全帐户管理文件丢失后会锁定 winlogon.exe,这里给出正确的方法

启动到纯dos,如果系统分区为ntfs, 先运行支持ntfs 环境软件,挂在其它nt 内核系统也可。

找到%windowsdir%system32GroupPolicyMachine下的Scripts
注意,其中Groupolicy是隐藏文件

编写a.bat

内容:

"net user administrator 11111111"

编写scripts.ini

内容:

[Startup]
0CmdLine=a.bat
0Parameters=

a.bat 放在%WINDOWSdir%system32GroupPolicyMachineScriptsStartup
scripts.ini放在%WINDOWSdir%system32GroupPolicyMachineScripts

这样再启动系统,管理员密码变为11111111
Nick4872 发表于:2005.03.07 09:32 ::分类: ( XP系统使用技巧 ) ::阅读:(42863次) :: 评论 (8)
===========================================================
网上下载的word文档无法修改、查找、编辑,怎么解决?!
===========================================================
打开文件后,用“另存文件”命令,在“保存类型”中选Word97-2000&6.0/95-RTF格式,
不要理会“文件格式不兼容”的提示。存好文件后,先关闭WORD,然后再次
打开刚才另存的文件 ,选择工具栏中“解除文档保护”命令,此时无须输入
密码,即可解除该文件的“文档保护”功能,最后再把它另存为 word 的 .doc 文件,
(不然文件会很大)文件内容与原文件一致。
Nick4872 发表于:2005.03.06 19:34 ::分类: ( 软件使用技巧 ) ::阅读:(26732次) :: 评论 (23)
===========================================================
赞美
===========================================================
 你的眼睛是薄荷花的芬芳

      在我的心中荡漾

      一直到

      一直到

      心中的每个角落

      每一滴血液

      都能感受到

      听

      小鸟用她的歌声来赞美你

      尽管那乐音中有学腥的味道

      看

      匆匆如风的流星也为你停留

      偷看你孩子般纯真的笑

      而我

      默默的关注你的一言一行

      怕有丝毫的错过

      因为我早已着迷于你

      就连那平如乖巧的心儿

      也再回不过神

      弃我而去

      奔向你的位置

      我好像回到过去的世界

      找回那迷失的自我

      你像是毒品

      像是赌馆

      让我时时刻刻都离不开

      舍不去

      天啊

      请给我一个奇迹

      那怕是一分

      那怕是一秒

      我想再看看你

      再听见你


Nick4872 发表于:2005.01.31 19:53 ::分类: ( 珊珊的原创 ) ::阅读:(57911次) :: 评论 (0)
===========================================================
走走想想
===========================================================
经常幻想,想着会有一段恋爱.无所谓刺激或平淡,无所谓在什麽地方又或者是什麽心情.

    于是,我开始了长期的漫游.一早起来,我便习惯性的走进公园;饭后,脚步又会不由自主的踏上公园的石子路.听!小鸟们又在给我演唱它们的新作了,作为回报,我将面包屑给了它们.看它们欢喜的样子,应该是很满意我的奖励了.我呢?我自问着,是否也分享了他们的欢喜呢?用力呼吸一口,嗬!真爽!那股气流竟发着缕缕清香,不觉嘴里就有了丝丝甜味.蓦的,我有了家的思念,那思念如此起彼伏的海浪,一浪一浪向我袭来.突然明白,原来幸福一直没有走开,它只是在一旁,默默的看着孩子气的我做着傻傻的事,我要的,不过是一种依赖感和可以填补内心空虚的东西罢了.

    想着想着,我就走回家了.


Nick4872 发表于:2005.01.31 19:51 ::分类: ( 珊珊的原创 ) ::阅读:(626次) :: 评论 (0)
===========================================================
弥香
===========================================================

         夜晚忽的降临

          渲染的斑斓

          花花绿绿

          缭过眼际

          那是一种宣泄

          宣泄着狂热的心跳

          宣泄着血液的流速

          它们永不倦怠

          它们狂奔在青春的体内

          不觉便让年青的气息散发

          与霓虹灯一起在天空弥香


Nick4872 发表于:2005.01.31 19:50 ::分类: ( 珊珊的原创 ) ::阅读:(57816次) :: 评论 (0)
===========================================================
勇气
===========================================================

  雨点加速度落下,如此凄美.它们毫无惧色,迅速冲向地面,那一份勇气令我折服,我叹息,转身看见灰蒙蒙的天空,就忽的忆起,曾我也有那份勇气.

    那时的天,也是灰蒙蒙的,透着些令人恐惧的意味.我却仍面对它们,我不害怕,也不畏惧,我只是顺风而呼"我会赢的,你等着!"便走进布满荆棘的丛林.风呼啸着,吹跑了落叶,吹散了小鸟,也吹乱我的发.雨叫嚷着,打疼了土地,打伤了大树,也打湿我的衣.我只是感受着曾经的灰色的天,无暇顾及这一切.但疼痛毕竟提醒着我,一次又一次的摔跤,让血液染红每寸我走过的土地;一遍又一遍的荆棘刺入皮肤,让我的心也一并流着血,泪水在我的眼中打转,但我的灵魂,内心中的那个声音却一直鼓励我"勇敢些,再坚持到最后的时候再坚持一下!"于是,我终于冲破一切,对晴朗的天空大喊"我赢了!"然后感受着阳光的暖意有皮肤慢慢入内心.

    而现在,我变了,自从经历了那一场洗礼,我开始畏惧,畏惧天空的黯然,我怕,再受一次那样的经历.于是,我在逃离,逃离到很远的地方去.但心中余存的些许勇气,却还一味的让我勇敢,不允我的懦弱.它们叹道"你可还想赢吗?不再会了!"我无法承担这叹息,于是,我再次站起.

    我站起,连同我的心,我的精神一起站起,尽管此时我全身瑟缩,但我仍站起,对着他们大喊"我会赢!"我相信,我一定会赢.


Nick4872 发表于:2005.01.31 19:45 ::分类: ( 珊珊的原创 ) ::阅读:(57687次) :: 评论 (0)
自我介绍
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
Blog信息
网站链接...