结构化查询语言
科技名词定义
中文名称:结构化查询语言英文名称:structuredquerylanguage;SQL定义:一种对关系数据库中的数据进行定义和操作的句法,为大多数关系数据库管理系统所支持的工业标准。所属学科:地理学(一级学科);地理信息系统(二级学科)
本内容由全国科学技术名词审定委员会审定公布
百科名片
结构化查询语言(StructuredQueryLanguage)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。目录发展历史语句结构数据类型使用简要发展历史语句结构数据类型使用简要展开发展历史
1.1970:E.J.Codd发表了关系数据库理论(relationaldatabasetheory);2.1974-79:IBM以Codd的理论为基础开发了“Sequel”,并重命名为"结构化查询语言";3.1979:Oracle发布了商业版结构化查询语言4.1981-84:出现了其他商业版本,分别来自IBM(DB2),DataGeneral,RelationalTechnology(INGRES);5.结构化查询语言/86:ANSI跟ISO的第一个标准;6.结构化查询语言/89:增加了引用完整性(referentialintegrity);7.结构化查询语言/92(aka结构化查询语言2):被数据库管理系统(DBMS)生产商广发接受;8.1997+:成为动态网站(Dynamicwebcontent)的后台支持;9.结构化查询语言/2003:包含了XML相关内容,自动生成列值(columnvalues);10.结构化查询语言/2006:定义了结构化查询语言与XML(包含XQuery)的关联应用;11.2006:Sun公司将以结构化查询语言基础的数据库管理系统嵌入JavaV6语句结构结构化查询语言包含4个部分个部分:※数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。※数据操作语言(DML),例如:INSERT、UPDATE、DELETE语句。※数据查询语言(DQL),例如:SELECT语句。※数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。数据类型简要描述一下结构化查询语言中的五种数据类型:字符型,文本型,字符型文本型,数值型,数值型,逻辑型和日期型1.字符型VARCHARVSCHARVARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。假如你向一个长度为四十个字符的VARCHAR型字段中输入数据BIllGAtES。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个
字符——字符串BillGates的长度。现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要2.文本型TEXT使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。当你从HTMLfORM的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。3.数值型NUMERIC、整数INT、小数NUMERIC、钱数MONEYINTVSSMALLINTVSTINYINT通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。NUMERIC为了能对字段所存放的数据有更多的控制,你可以使用NUMERIC型数据来同时表示一个数的整数部分和小数部分。NUMERIC型数据使你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字段可以存储从
-1038到1038范围内的数。NUMERIC型数据还使你能表示有小数部分的数。例如,你可以在NUMERIC型字段中存储小数3.14。MONEYVSSMALLMONEY你可以使用INT型或NUMERIC型数据来存储钱数。但是,专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MONEY型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。4.逻辑型BIT如果你使用复选框(CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。当心,在你创建好一个表之后,你不能向表中添加BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。5.日期型DATETIMEVSSMALLDATETIME一个DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,而且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。使用简要简单的Transact-结构化查询语言查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
1.选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。1、选择所有列例如,下面语句显示testtable表中所有列的数据:SELECT*FROMtesttable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。3、更改列标题在选择列表中,可重新指定列标题。定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:SELECT昵称=nickname,电子邮件=emailFROMtesttable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。5、限制返回的行数使用TOPn[PERCENT]选项限制返回的数据行数,TOPn说明返回n行,而TOPnPERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。2.FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:3.WHERE子句WHERE子句设置查询条件,过滤掉不需要的数据行。WHERE子句可包括各种条件运算符:比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN…AND…NOTBETWEEN…AND…列表运算符(判断表达式是否为列表中的指定项):IN(项1,项2……)NOTIN(项1,项2……)模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOTLIKE空值判断符(判断表达式是否为空):ISNULL、NOTISNULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR1、范围运算符例:ageBETWEEN10AND30相当于age>=10ANDage<=302、列表运算符例:countryIN('Germany','China')3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。可使用以下通配字符:百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[]相同,但它要求所匹配对象为指定字符以外的任一个字符。4.查询结果排序使用ORDERBY子句对查询返回的结果按一列或多列排序。ORDERBY子句的语法格式为:ORDERBY{column_name[ASC|DESC]}[,…n]其中ASC表示升序,为默认值,DESC为降序。ORDERBY不能按ntext、text和image数据类型进行排序。
开放分类:开放分类:
数据库,互联网,地理学,oracle,SQL
数据库设计
百科名片
数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的
应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。目录定义信息系统特点步骤设计方法各级模式的形成过程数据库设计技巧定义信息系统特点步骤设计方法各级模式的形成过程数据库设计技巧展开定义数据库设计(DatabaseDesign)是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建议中的核心技术。由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。信息系统(1)数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。(2)数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。(3)数据库设计是信息系统开发和建设的重要组成部分。
(4)数据库设计人员应该具备的技术和知识:数据库的基本知识和数据库设计技术计算机科学的基础知识和程序设计的方法和技巧软件工程的原理和方法应用领域的知识特点数据库建设是硬件、软件和干件的结合三分技术,七分管理,十二分基础数据技术与管理的界面称之为“干件”数据库设计应该与应用系统设计相结合结构(数据)设计:设计数据库框架或数据库结构行为(处理)设计:设计应用程序、事务处理等结构和行为分离的设计传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计步骤需求分析调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。概念设计对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个等),通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—(E-R模型)联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。
逻辑设计主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。
oa工作流数据库设计
物理设计根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设计的结果就是所谓“物理数据库”。验证设计在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应用任务来验证数据库设计的正确性和合理性。一般,一个大型数据库的设计过程往往需要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面去进行修改。因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方便性。运行与维护设计在数据库系统正式投入运行的过程中,必须不断地对其进行
数据库设计步骤
评调整与修改。至今,数据库设计的很多工作仍需要人工来做,除了关系型数据库已有一套较完整的数据范式理论可用来部分地指导数据库设计之外,尚缺乏一套完善的数据库设计理论、方法和工具,以实现数据库设计的自动化或交互式的半自动化设计。所以数据库设计今后的研究发展方向是研究数据库设计理论,寻求能够更有效地表达语义关系的数据模型,为各阶段的设计提供自动或半自动的设计工具和集成化的开发环境,使数据库的设计更加工程化、更加规范化和更加方便易行,使得在数据库的设计中充分体现软件工程的先进思想和方法。设计方法手工试凑法设计质量与设计人员的经验和水平有直接关系缺乏科学理论和工程方法的支持,工程的质量难以保证数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价规范设计法基本思想:过程迭代和逐步求精典型方法:(1)新奥尔良(NewOrleans)方法:将数据库设计分为四个阶段S.B.Yao方法:将数据库设计分为五个步骤I.R.Palmer方法:把数据库设计当成一步接一步的过程(2)计算机辅助设计ORACLEDesigner2000SYBASEPowerDesigner
各级模式的形成过程1.需求分析阶段:综合各个用户的应用需求2.概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图)3.逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式4.物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。数据库设计技巧设计数据库之前1)理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。2)了解企业业务可以在以后的开发阶段节约大量的时间。3)重视输入输出。在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。4)创建数据字典和ER图表ER图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL表达式的文档化来说这是完全必要的。5)定义标准的对象命名规范数据库各种对象的命名必须规范。表和字段的设计表设计原则1)标准化和规范化数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但ThirdNormalForm(3NF)通常被认为在性能、扩展性和数据完整性方
面达到了最好平衡。简单来说,遵守3NF标准的数据库的表设计原则是:“OneFactinOnePlace”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。举例:某个存放客户及其有关定单的3NF数据库就可能有两个表:Customer和Order。Order表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer表里包含该客户信息的那一行。事实上,为了效率的缘故,对表不进行标准化有时也是必要的。2)数据驱动采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。举例,假如用户界面要访问外部数据源(文件、XML文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。3)考虑各种变化在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。4)每个表中都应该添加的3个有用的字段dRecordCreationDate,在VB下默认是Now(),而在SQLServer?下默认为GETDATE()sRecordCreator,在SQLServer下默认为NOTNULLDEFAULT?USERnRecordVersion,记录的版本标记;有助于准确说明记录中出现null数据或者丢失数据的原因?5)对地址和电话采用多个字段描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2和Address_Line3可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。6)使用角色实体定义属于某类别的列在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。举例:用PERSON实体和PERSON_TYPE实体来描述人员。比方说,当JohnSmith,Engineer提升为JohnSmith,Director乃至最后爬到John
Smith,CIO的高位,而所有你要做的不过是改变两个表PERSON和PERSON_TYPE之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的PERSON_TYPE表就包含了所有PERSON的可能类型,比如Associate、Engineer、Director、CIO或者CEO等。还有个替代办法就是改变PERSON记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。7)选择数字类型和文本类型尽量充足在SQL中使用smallint和tinyint类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767就不能进行计算操作了。而ID类型的文本字段,比如客户ID或定单号等等都应该设置得比一般想象更大。假设客户ID为10位数长。那你应该把数据库表字段的长度设为12或者13个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。8)增加删除标记字段在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。选择键和索引(数据库逻辑设计)键选择原则:1)键设计4原则为关联字段创建外键。所有的键都必须唯一。避免使用复合键。外键总是关联唯一的键字段。2)使用系统生成的主键设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,(不让主键具有可更新性)在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。4)可选键有时可做主键把可选键进一步用做主键,可以拥有建立强大索引的能力。索引使用原则:
索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。1)逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。2)大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。3)不要索引memo/note字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。4)不要索引常用的小型表不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。数据完整性设计(数据库逻辑设计)1)完整性实现机制:实体完整性:主键参照完整性:父表中删除数据:级联删除;受限删除;置空值父表中插入数据:受限插入;递归插入父表中更新数据:级联更新;受限更新;置空值DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制用户定义完整性:NOTNULL;CHECK;触发器2)用约束而非商务规则强制数据完整性采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。3)强制指示完整性在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。4)使用查找控制数据完整性
控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。5)采用视图为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。其他设计技巧1)避免使用触发器触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。2)使用常用英语(或者其他任何语言)而不要使用编码在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。3)保存常用信息让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。4)包含版本机制在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。5)编制文档对所有的快捷方式、命名规范、限制和函数都要编制文档。采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2个版本,犯错的机会将大大减少。6)测试、测试、反复测试建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。7)检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
?
1
《数据库系统概论》(第三版)萨师煊王珊
?
2
《数据库系统概论》(第四版)萨师煊王珊
Web数据库
Web数据库属于深度Web(DeepWeb)的一种资源形势,通常指在互联网中以Web查询接口方式访问的数据库资源,其结构是后台采用数据库管理系统存储数据信息,对外提供包含表单的Web页面作为访问接口,查询结果也以包含数据列表的Web页面形式返回给用户。Web数据库的数据相比搜索引擎返回的查询结果,特点是提供一个或多个领域的数据记录,且具有完整的模式信息。Web数据库集成的主要目的是为用户提供多个Web数据库资源的统一访问方式。现有的Web数据库集成方式可以分为三类:(1)数据供应模式;(2)数据收集模式;(3)元搜索模式。
asp.net
ASP是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。指ActiveServerPages(动态服务器页面),运行于IIS之中的程序。目录发展缘起世界级的工具支持强大性和适应性简单性和易学性高效可管理性
IIS处理架构Web服务器的消息流动阶段发展缘起世界级的工具支持强大性和适应性简单性和易学性高效可管理性IIS处理架构Web服务器的消息流动阶段
???????
事件模型来回模式绘制技术状态管理应用程序层级对象连接层级对象
跨机器状态管理?部件?基础部件?控件
????????????
脚本基本对象导览部件应用程序服务延展性支持一致性与多样性界面的支持
编译模型?安全性支持WebService支持扩充功能执行效率大幅提高相关课程优秀ASP.NET程序员修炼之路
展开发展缘起
ASP.NET的前身ASP技术,是在IIS2.0上首次推出(WindowsNT3.51),当时与ADO1.0一起推出,在IIS3.0(WindowsNT4.0)发扬光大,成为服务器端应用程序的热门开发工具,微软还特别为它量身打造了VisualInterDev开发工具,在1994年到2000年之间,ASP技术已经成为微软推展WindowsNT4.0平台的关键技术之一,数以万计的ASP网站也是这个时候开始如雨后春笋般的出现在网络上。它的简单以及高度可定制化的能力,也是它能迅速崛起的原因之一。不过ASP的缺点也逐渐的浮现出来:意大利面型的程序开发方法,让维护的难度提高很多,尤其是大型的ASP应用程序。直译式的VBScript或JScript语言,让效能有些许的受限。延展性因为其基础架构扩充性不足而受限,虽然有COM元件可用,但开发一些特殊功能(像文件上传)时,没有来自内置的支持,需要寻求第三方软件商开发的元件。1997年时,微软开始针对ASP的缺点(尤其是意大利面型的程序开发方法)准备开始一个新项目来开发,当时ASP.NET的主要领导人ScottGuthrie刚从杜克大学毕业,他和IIS团队的MarkAnders经理一起合作两个月,开发出了下一代ASP技术的原型,这个原型在1997年的圣诞节时被发展出来,并给予一个名称:XSPXSP,这个原型产品使用的是XSPJava语言。不过它马上就被纳入当时还在开发中的CLR平台,ScottGuthrie事后也认为将这个技术移植到当时的CLR平台,确实有很大的风险(hugerisk),但当时的XSP团队却是以CLR开发应用的第一个团队。为了将XSP移植到CLR中,XSP团队将XSP的内核程序全部以C#语言重新撰写(在内部的项目代号是"ProjectCool",但是当时对公开场合是保密的),并且改名为ASP+ASP+,作为ASP技术的后继者,并且也会提供一个简单的移转方法给ASP开发人员。ASP+首次的Beta版本以及应用在PDC2000中亮相,由BillGates主讲Keynote(即关键技术的概览),由富士通公司展示使用COBOL语言撰写ASP+应用程序,并且宣布它可以使用VisualBasic.NET、C#、Perl与Python语言(后两者由ActiveState公司开发的互通工具支持)来开发。在2000年第二季时,微软正式推动.NET策略,ASP+也顺理成章的改名为ASP.NETASP.NET,经过四年的开发,第一个版本的ASP.NET在2002年1月5日亮相(和.NETFramework1.0),ScottGuthrie也成为ASP.NET的产品经理(到现在已经开发了数个微软产品,像ASP.NETAJAX和MicrosoftSilverlight)。目前最新版本的ASP.NET4.0以及.NETFramework4.0已经在VS2010平台内应用。世界级的工具支持ASP.net构架是可以用Microsoft(R)公司最新的产品VisualStudio.net开发环境进行开发,WYSIWYG(WhatYouSeeIsWhatYouGet所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。
强大性和适应性因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows2000/2003Server/VISTA/7上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent(语言独立化)的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript,C++、F++。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。ASP.NET一般分为两种开发语言,VB.NET和C#,C#相对比较常用,因为是.NET独有的语言,VB.NET则为以前VB程序设计,适合于以前VB程序员,如果新接触.NET,没有其他开发语言经验,建议直接学习C#即可。简单性和易学性ASP.net使运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。例如ASP.net页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。高效可管理性ASP.net使用一种字符基础的,分级的配置系统,使你服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为"ZeroLocalAdministration"的哲学观念使Asp.net的基于应用的开发更加具体,和快捷。一个ASP.net的应用程序在一台服务器系统的安装只需要简单的拷贝一些必须的文件,不需要系统的重新启动,一切就是这么简单。多处理器环境的可靠性ASP.net已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。即使你现在的ASP.net应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高他们的效能,但现在的ASP却做不到这一点。自定义性和可扩展性ASP.net设计时考虑了让网站开发人员可以在自己的代码中自己定义"plug-in"的模块。这与原来的包含关系不同,ASP.net可以加入自己定义的如何组件。网站程序的开发从来没有这么简单过。安全性基于Windows认证技术和每应用程序配置,你可以确保你的原程序是绝对安全的。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,
并提供更好的安全保护。可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,把基于通用语言的程序在服务器上运行。将程序在服务器端首次运行时进行编译,比ASP即时解释程序速度上要快很多.而且是可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。当创建ASP.NET应用程序时,开发人员可以使用Web窗体或XMLWebservices,或以他们认为合适的任何方式进行组合。每个功能都能得到同一结构的支持,使您能够使用身份验证方案,缓存经常使用的数据,或者对应用程序的配置进行自定义.如果你从来没有开发过网站程序,那么这不适合你,你应该至少掌握一些HTML语言和简单的Web开发术语(不过我相信如果有兴趣的话是可以很快的掌握的)。你不需要先前的ASP开发经验(当然有经验更好),但是你必须了解交互式Web程序开发的概念,包含窗体,脚本,和数据接口的概念,如果你具备了这些条件的话,那么你就可以在Asp.net的世界开始展翅高飞了。IISIIS指InternetInformationServices(因特网信息服务)IIS是Windows2000捆绑的免费组件IIS同时也是WindowsNT4.0的可选组件此可选组件可通过因特网下载PWS的体积更小-不过拥有IIS的完整功能PWS可在Windows95/98的安装CD中找到ASP.net不仅仅是ActiveServerPage(ASP)的下一个版本,而且是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的优势。处理架构ASP.NET运行的架构分为几个阶段:在IIS与Web服务器中的消息流动阶段。在ASP.NET网页中的消息分派。在ASP.NET网页中的消息处理。
Web服务器的消息流动阶段当装载(hosting)ASP.NET的Web服务器接收到HTTP要求时,HTTP聆听程序(HTTPListener)会将要求转交给URL指定的网站应用程序的工作流程(WorkerProcess),ASP.NET的工作流程处理器(aspnet_isapi.dll,若是IIS5.0时则是aspnet_wp.exe)会解析URL,并激活位于System.Web.Hosting命名空间中的ISAPIRuntime(视版本)对象,接收HTTP要求,并调用HttpRuntime,运行HttpRuntime.ProcessRequest(),在ProcessRequest()中使用HttpApplicationFactory建立新的HttpApplication(或是指定的IHttpHandler处理器),再分派给Page中的ProcessRequest()或是IHttpHandler的ProcessRequest()方法,运行之后,再传回到ISAPIRuntime,以及aspnet_isapi.dll,最后交由HTTPListener回传给用户端,因为运行程序有如管线般顺畅的运行,因此称为HTTPPipelineMode。Mode在ASP.NET内部的HTTP处理器有:ISAPIRuntime:由aspnet_isapi.dll调用,初始化HttpWorkerRequest对象(会由IIS的版本决定要初始化的版本)。HttpRuntime:提供要求队列(RequestQueue)、调用HttpWorkerRequest中的ProcessRequest()方法,以及后续的处理工作。HttpWorkerRequest:产生HttpApplication、HttpRequest、HttpResponse等基础对象的HTTP要求对象,并将要求转送到要处理的对象(并调用它的ProcessRequest()方法)。IHttpHandler与IHttpAsyncHandler:负责处理HTTP要求的单元,由ProcessRequest()来分派与运行要求。ASP.NET网页中的事件程序当HttpWorkerRequest调用ASP.NET网页(System.Web.UI命名空间的Page类)的Page.ProcessRequest()方法时,它会依序的引发Page内的各个事件,并同时调用在Page中所有控件的相关事件,其引发顺序为:PreInit事件:运行预先初始化的工作,在ASP.NET2.0中,若要动态调整主版页面(MasterPage)、布景主题(Theme)时,要在这个事件中调整。Init事件:运行初始化工作。InitCompleted事件:在完成初始化工作后引发。Preload事件:运行预先加载的工作。Load事件:运行加载的工作,大多数的网页都拥有Page_Load事件处理程序,用户控件(usercontrol)中也有Page_Load事件例程,都会在此时调用。控件的PostBack变更通知:当网页侦测到是PostBack要求时,会引发PostBack消息通知的事件。控件的PostBack相关事件:当网页侦测到是PostBack要求时,会引发PostBack消息指定的控件的事件。LoadCompleted事件:运行加载完成后的工作。PreRender事件:处理在产生HTML结果前的工
作。SaveStateCompleted事件:处理页面状态(ViewState与ControlState)储存完成后的事件。Render事件:处理产生HTML的工作。Unload事件:处理退出网页处理时的工作。如果HttpWorkerRequest调用的是实现IHttpHandler界面的HTTP处理程序时,它只会调用IHttpHandler.ProcessRequest()方法,由它来处理程序的输出,不像Page.ProcessRequest()会处理事件顺序,因此HTTPHandler很适合轻量级的数据处理,像是输出文件数据流或是图片数据流等。事件模型ASP.NET的原始设计构想,就是要让开发人员能够像VB开发工具那样,可以使用事件驱动式程序开发模式(Event-DrivenProgrammingModel)的方法来开发网页与应用程序,若要以ASP技术来做到这件事的话,用必须要使用大量的辅助信息,像是查询字符串或是窗体字段数据来识别与判断对象的来源、事件流向以及调用的函数等等,需要撰写的代码量相当的多,但ASP.NET很巧妙利用窗体字段和JavaScript脚本把事件的传递模型隐藏起来了。ASP.NET的事件模型是由以及数个HiddenField组合而成,基于HTTP模型的限制,所有的网页程序在运行结果输出到用户端后,程序就会退出运行,为了维护在ASP.NET网页与控件的状态数据,因此在输出ASP.NET控件时,ASP.NET会将部份状态数据储存到网页的HiddenField中,这类型的状态数据称为ViewState(ID为__VIEWSTATE),在服务器端即会被解译出状态与事件数据。在大多数的内置Web控件中都有使用到这个机制,因此在使用大量ASP.NETWeb控件的网页中,会有许多的ViewState会存放在网页中并随着HTTP数据流输出到用户端,ViewState在输出时,会被加密为一组乱码字符串,其金钥值定义在计算机中,并且每一个对象都会被序列化(serialize)成字符串(因此若是自定义对象要放到ViewState时,则应要让它支持序列化),再输出到__VIEWSTATE字段中,在每次的网页来回时都会被传输,较大的ViewState会让网页大小膨胀,不利于快速的网络传输,不过ASP.NET本身有提供将ViewState关闭的功能,因此如果控件不需要状态保存时,可将它关闭以减少输出的大小。为确保控件的事件能够确实被引发,让事件驱动能够被运行,因此控件事件引发命令时需要的参数,是交由JavaScript脚本在用户端引发时,填入另一个HiddenField(ID为__EVENTTARGET以及__EVENTARGUMENT),并且引发窗体的送出指示(submit),传送到服务端后,服务端的HttpApplication中的工具函数会解析__EVENTTARGET和__EVENTARGUMENT字段中的信息,并且交由控件所实现的
RaisePostBackEvent()来引发事件,并由.NETFramework内部的事件处理器制接手处理(调用控件设置的事件处理程序)。来回模式在ASP.NET运行的时候,经常会有网页的来回动作(round-trip),在ASP.NET中称为PostBack,在传统的ASP技术上,判断网页的来回是需要由开发人员自行撰写,到了ASP.NET时,开发人员可以用Page.IsPostBack机能来判断是否为第一次运行(当ASP.NET发现HTTPPOST要求的数据是空值时),它可以保证ASP.NET的控件事件只会运行一次,但是它有个缺点(基于HTTPPOST本身的缺陷),就是若用户使用浏览器的刷新功能(按F5或刷新的按钮)刷新网页时,最后一次运行的事件会再被运行一次,若要避免这个状况,必须要强迫浏览器清空高速缓存才可以。ASP.NET2.0中有新增三个来回模式:CrossPagePostback:允许跨不同的网页运行PostBack,服务端可使用Page.IsCrossPostBack来判断是否是跨网页型的来回。AsyncPageMode:允许网页使用异步的方式运行,服务端可用Page.IsAsync来判断。Callback:ASP.NET2.0新增的由网页回呼用户端指令的功能,服务端可用Page.IsCallback来判断是否要求是来自Callback。来回模式不仅是ASP.NET运作时的内核,它也是ASP.NET应用程序的一个主要缺点,尤其是在设计复杂度高的页面时,在网页中隐藏的ViewState的大小会相当大,而在每次的来回动作中,都会传送ViewState在内的窗体信息,大量的ViewState会使得传送的时间拉长,而且每次来回动作都会让整个网页被刷新,而出现闪烁的情况(就算在本地端也一样),但在AJAX技术尚未成熟时,只能够忍受这种因底层限制所带来的问题,在ASP.NETAJAX技术发展出来后,通过UpdatePanel成功的缓解了这个问题(但ViewState传送的问题仍然未根本的解决,必须要使用像PageMethod这样的方式才能彻底的解决)。绘制技术熟悉ASP技术的人都知道,代码都是混在HTML标签之间,以输出预期需要的HTML指令,这个技术在ASP.NET中,由各控件的绘制(Render)机制包装起来了,绘制机制装载了HtmlTextWriter对象,由它来产生HTML指令,它会输出至HttpContext的Response输出数据流中(即ASP技术的Response.Write())。状态管理
状态管理(statemanagement)在Web应用程序中,一向是很重要的课题,良好的状态管理可以帮助开发人员发展出具有状态持续能力的应用程序(像是工作流程型应用程序或是电子商务应用程序),但状态管理功能会视应用程序的部署状态以及信息的共用程度来选择,在ASP.NET中,分为服务器端状态管理以及用户端状态管理,用户端状态管理为ViewState以及Cookies,服务端状态管理则是Session与Application对象。它们的差异点在于:ViewState是加密的数据流,和HTML一起输出到用户端。Cookies是加密(也可不加密)的小型数据,和HTML不同,它可以高速缓存在用户端浏览器中。Session是服务器端的状态保存机制,每个用户端均有独立的空间(以浏览器运行个体来赋与唯一的SessionID值)。Application是服务器端的状态保存机制,但应用程序所有的用户端共用同一份状态数据。应用程序层级对象Application对象会在应用程序的Application_OnStart事件中初始化,并使用名称来识别数据(它是一个NameObjectCollectionBase集合的实现品),它会储存在应用程序的范围内,所有的连接(用户)都可以使用,属于共用型的储存体,适合储存所有用户都可使用的数据,在多人使用的情况下,可以适当的使用Lock/Unlock的机制来确保应用程序状态的更新。连接层级对象连接层级的对象是Session,以浏览器的运行个体为识别单位,数据依浏览器的运行个体来储存,在浏览器的运行个体第一次连到应用程序时,ASP.NET会设置一个SessionID,并且使用它来识别Session,每一个Session都是ICollection与IEnumerate的实现,用key来识别数据值,并且具有时间的限制(timeout),若超出时限时服务器会自动清理掉,默认的Session时限为20分钟。SessionID的算法是由RNGCryptoServiceProvider(密码编译乱数产生器提供者)产生,并编码成一个SessionID字符串(例如anf4vuup3xiq0arjlqla2l55这样的字符串)储存在服务器中,用以识别不同的Session个体。为因应不同的用户端,ASP.NET设计了不同的SessionID存放机制,像是旧式的浏览器或是行动用户端这种不支持本地储存cookie的设备时,ASP.NET可以直接在URL中加上SessionID的识别,像是acme.tw/(anf4vuup3xiq0arjlqla2l55)/profile.aspx
这样的URL,可以由开发人员自行设置,或是使用AutoDetect设置来让ASP.NET自行判断要使用的SessionID存放方式。SessionID的产生方法可以由程序开发人员自定义,借由改写SessionIDManager的CreateSessionID()方法来自定义。跨机器状态管理状态管理在单一服务器上,可以储存在服务器的存储器中,但若是在大型网站中,使用许多的Web服务器来实行负载平衡(LoadBalancing)处理时,会有状态储存在哪个位置的问题,因此需要有一个可以在每个Web服务器之间做状态储存的媒介,像是独立的服务器或是数据库等等。在ASP.NET中支持了四种状态储存的媒介:InProc:储存与ASP.NET相同的运行进程中(in-procedurestate),适合单一服务器的状态储存。StateServer:储存在ASP.NET状态服务器(stateserver)中,适合跨服务器的状态储存,但因为它使用的通讯端口,因此在使用上需要注意防火墙的问题。SQLServer:储存在独立的SQLServer数据库中,适合跨服务器的状态储存。Custom:以自行实现的状态提供者(stateprovider)。部件ASP.NET是开发Web应用程序的基础架构(framework),除了它内部的运作方法外,对外也显露了许多的开发支持,让开发人员可以利用它来发展出许多强大的Web应用程序解决方案。基础部件ASP.NET最基础的底层为网页(Page),网页由System.Web.UI.Page类来提供基础支持,包含了页面的事件以及对象绘制的引发点(Page类本身是一个HTTPHandler的实现品)。ASP.NET网页在微软的官方名称中,称为WebForm,除了是要和WindowsForms作分别以外,同时也明白的刻划出了它的主要功能:“让开发人员能够像开发WindowsForms一样的方法来发展Web网页”。因此ASP.NETPage所要提供的功能就需要类似WindowsForms的窗体,每个WebForm都要有一个区块,所有的ASP.NET服务器控件都要放在这个区域中,这样才可以让ViewState等服务器控制能够顺畅的运作。使用代码后置模式的设置时,可以让ASP.NET运行引擎在加载网页时,由代码后置参数取得对应的类信息,藉以使用Reflection的方式来运行后置的代码。
ASP.NET可以支持HTML和XHTML两种网页内容,但在VisualStudio.NET中,默认是使用HTML,但在VisualStudio2005以后的版本,则一律都改用XHTML格式。控件ASP.NET的内置控件分为两种:HTML控件(HTMLcontrol):直接在HTML标记中加上runat="server",即可对应到ASP.NET指定的HTML服务器控件类,像是:HtmlAnchor:表示HTML的Web控件(Webcontrol):由ASP.NET提供,比HTML控件提供更多的功能,但操作与设置会比HTML控件要复杂许多,像是:LinkButton:一种外型为链接(。HtmlButton:表示HTML的。HtmlImage:表示HTML的。HtmlGenericControl:表示没有对应到服务器控件的对象,都会被对应到这个类。Web控件(Webcontrol):由ASP.NET提供,HTML控件提供更多的功能,比但操作与设置会比HTML控件要复杂许多,像是:LinkButton:一种外型为链接(除了内置的控件之外,ASP.NET也提供了可以自定义的控件架构,并且支持两种控件开发方法:用户控件(Usercontrol),以.ascx为扩展名,可以让开发人员用最轻松的方式来开发控件,优点是开发速度很快,但缺点是无法转散布,且无法加入参考。自定义控件(Customcontrol),可转散布型的控件,是经过编译后的代码(DLL),可单独转散布,并且可在其他的项目加入参考引用,自定义控件有三种开发模式:基础控件(GeneralControl):由System.Web.UI.Control类继承而来,或是由现有的Web控件继承而来,像是由Button控件继承。复合控件(CompositeControl):由System.Web.UI.WebControls.CompositeControl继承而来,可以用复合的方式来开发控件。样板控件(TemplateControl):可以在控件中使用样板(template),并套用数据到样板中,支持数据绑定的表达式。脚本ASP.NET的Web控件有时会包装一些用户端脚本(client-sidescripting),在控件被绘制时输出到用户端,这些脚本多数被包装在DLL的资源档中,并由ScriptResource.axd处理程序来输出,开发人员也可以利用ClientScriptManager(Page.ClientScript属性)中的方法来添加脚本到网页程序中,常用的方法有:ClientScriptManager.RegisterClientScriptBlock():注册用户端脚本区块(scriptblock)。ClientScriptManager.RegisterStartupScript():注册在起始时运行的脚
本。ClientScriptManager.RegisterOnSubmitStatement():注册在处理窗体发送时要运行的脚本。ClientScriptManager.RegisterClientScriptInclude():注册由外部文件(.js)提供的脚本来源。基本对象以往在ASP中常被使用的五大基本对象,在ASP.NET中仍然持续被支持,但它们都换了一个身份来提供:Application:包装了HttpApplication对象,在程序中使用Application指令取得的对象,都是来自于HttpContext.Current.Application属性回传而得。Request:包装了HttpRequest对象,在程序中使用Request指令取得的对象,都是来自于HttpContext.Current.Request属性回传而得。Response:包装了HttpResponse对象,在程序中使用Response指令取得的对象,都是来自于HttpContext.Current.Response属性回传而得。Session:包装了HttpSessionState对象,在程序中使用Session指令取得的对象,都是来自于HttpContext.Current.Session属性回传而得。Server:包装了HttpServerUtility对象,在程序中使用Server指令取得的对象,都是来自于HttpContext.Current.Server属性回传而得。导览部件导览部件(navigationcontrols)菜单(Menu):提供内置的鼠标侦测方式,实现层次结构式的菜单功能。网站地图(Sitemap):提供可层次化目前浏览位置的功能,可支持由Web.sitemap中的数据,或是来自数据库或XML数据档中的数据来源。树状查看(TreeView):提供层次结构化的数据浏览,类似于资源管理器的界面。应用程序服务应用程序服务(applicationservices)是在ASP.NET2.0中才开始提供,它以Provider-basedPattern为主,实现出数个网站的常用服务,包含会员服务(MembershipService)、角色服务(roleservice)与设置档服务(profileservice)等。会员服务由Membership以及其数据提供者MembershipProvider构成,应用程序使用Membership所显露的方法来操作,它会将要求转送给指定的MembershipProvider实现来处理,ASP.NET目前支持来自于数据库的SqlMembershipProvider(支持SQLServer)以及来自于活动目录的
ActiveDirectoryMembershipProvider,开发人员也可以自行由MembershipProvider继承来实现自定义的会员服务数据提供者。角色服务与会员服务类似,由Role以及其数据提供者RoleProvider构成,应用程序使用Role所显露的方法操作,由RoleProvider实现提供数据服务,目前内置的RoleProvider有来自活动目录或XML文件的AuthorizationStoreRoleProvider,由SQLServer供应数据的SqlRoleProvider,以及支持Windows角色的WindowsTokenRoleProvider三种,开发人员可自行实现RoleProvider的方法以发展出自定义的角色服务提供者。设置档服务是一个特殊的服务,它结合了.NETFramework的CodeDOM开发模式,以及System.Web.Profile命名空间的ProfileBase、ProfileInfo与ProfileManager等类,组合出完整的设置档支持,其数据来源也是以Provider-basedPattern为主,ProfileProvider提供,由ASP.NET内置由SQLServer数据库建立的SqlProfileProvider,其字段系由开发人员在ASP.NET组态档中自行定义,再由ASP.NET动态产生强型别的字段属性。设置档服务也是作为ASP.NET2.0的网页组件(WebPartFramework)所需要的设置档储存支持,WebPartFramework可以让开发人员可以开发出具备个人化能力(Personalization)的网页配置方案,让用户可以用自行新增与拖放的方式来设计自己的网页布置,所需要的设置储存即由设置档服务处理。另一个需要和应用程序服务配合使用的功能为Web事件架构(WebEventFramework),它需要由应用程序服务提供数据结构,它也有Provider-basedPattern,并可以支持数种的事件数据提供者。延展性支持除了ASP.NET网页以外,.NETFramework还提供了两种可以由开发人员自行发展处理模型的模块,一种是HTTPHandler,另一种则是HTTPModule。HTTPHandler(扩展名为.ashx)由System.Web.IHttpHandler界面定义了必要的方法(可支持异步的HTTPHandler称为HTTPAsyncHandler,由System.Web.IHttpAsyncHandler界面定义),其中最重要的方法是ProcessRequest()方法,开发人员必须要实现这个方法,才能够让HTTPHandler有作用,它也可以通过ASP.NET的组态设置,让HTTPHandler可以处理特定的扩展名,它可以被视为.NETFramework中的ISAPIExtensions实现方法。HTTPModule则是由System.Web.IHttpModule界面定义,它可以在整个网页生命周期中被调用多次,并实际处理由HttpApplication所引发
的事件,开发人员需要实现IHttpModule.Init()方法,以及处理HttpApplication事件需要的代码。它可被视为.NETFramework中的ISAPIFilter实现方法。一致性与多样性界面的支持ASP.NET在一开始的时候是缺乏范本引擎(templateengine)的,其主因是.NETFramework本身是面向对象,且需要用继承的方式才能够延伸功能,大多数的开发人员都是由System.Web.UI.Page继承并定义出新的基类,并撰写要绘制HTML的方法,以及在他们的应用程序中修改以继承该类,然而这个方法可能会被用在网站的很多地方,因而会大大的提升混合代码与标记的复杂度,这个方法也只能在运行期才能够以可视化的方式测试,无法在设计时期可视化,其他的开发人员总是使用原有的ASP方法(即指令)来把每个网页需要的部份包到网页中,防止在每个网页中都要撰写相同的导览代码。在ASP.NET2.0中,推出了主版页面(masterpage)的概念,它可以让开发人员先行定义外观版型(*.master),再使用它来套用实际运行的网页,网页与主版页面之间以ContentPlaceHolder的ID做链接,以套用正确的内容到保留区(即由ContentPlaceHolder包住的区域)中,开发人员也可以定义在保留区没有套用时需要显示的默认内容。ASP.NET3.5在中更进一步的支持设计时期的嵌套主版页面(nestedmasterpages),以及把网页的HEAD区块纳入ContentPlaceHolder的范围。与主版页面相关的,还有主题(Theme)以及面板(skin)技术,这两个技术允许开发人员或设计人员自行定义网页的样式设置以及套用的样式支持,每个主题中可以包含数个面板档,这些面板档决定了控件要输出时套用的样式,开发人员则可以利用主题来决定不同的外观要使用的样式。ASP.NET也允许在应用程序中动态的变更主版页面与主题,但必须要在页面的PreInit事件例程设置。编译模型ASP.NET在1.x时,使用的是组件为主的编译方式,一个网页只会产生一个组件,这个方式最大的优点,就是可以自由定义命名空间,且在部署应用程序时会比较方便,但由于ASP.NET1.x所处的时代,如果网站是有许多代码的情况下(即DLL档很大),加载的速度会变慢,且占用存储器的量会很多,当时的存储器价格也尚未降到现在的水平。因此在ASP.NET2.0开始,另外提供了一个预先编译(Pre-compilation)的编译模型,这个编译方法会将每个网页都各自编译成一个组件,其文件名称会是App_[乱数字符串].dll命名,在编译时期由ASP.NETPre-compilation工
具(aspnet_compiler.exe)给定,优点是可以不必加载过量的代码到存储器中,但缺点则是无法自定义命名空间,而且在更新时必须要更新所有的DLL档以及网页等,否则会造成名称不一致,让DLL无法被加载的问题。早期ASP.NET2.0仅提供预先编译模式,让它的缺点很快的被暴露出来,因此微软也为ASP.NET2.0开发了沿用ASP.NET1.x的编译模型的工具:WebApplicationProject,在VisualStudio2008中开始内置,至此,ASP.NET支持两种编译模式的架构抵定。安全性支持验证ASP.NET的验证方式有三种:Windows验证:由IIS目前运行的帐户,或者是用户模拟(userimpersonate)帐户的方式进行验证。窗体验证:由窗体的数据提供验证,开发人员自定义验证逻辑,并交由ASP.NET窗体验证工具写入验证凭证,以进行授权。Passport验证:在ASP.NET1.x中,连接WindowsLiveID(当时的旧称为MicrosoftPassport)服务以进行验证。授权ASP.NET的授权方式有两种:文件授权:由ASP.NET检查文件的访问控制表(ACL)来授权访问权限。URL授权:由开发人员设置的URL来给予权限。WebService支持ASP.NET1.0开始支持WebService的开发,是微软在本地平台上支持WebService发展的第一个实现品,但它却不是微软的第一个WebService开发工具实现品,.NETFramework中提供了一个WSDL.exe,可以连接WebService下载WSDL定义档,并产生一个ProxyClass的源代码,供用户端应用程序使用,若是使用VisualStudio开发的话,这个动作会由“加入Web参考”的动作在背后处理掉。ASP.NETWebService的发展只是平台的基础,微软在WebService的开发上提供持续的支持,尤其是在WS-I(WebServiceInteroperability)组织成立后,为符合WS-I的WebService标准,微软开发了强化WebService的增强包WebServiceEnhancement(WSE),最新版本为3.0版(搭配ASP.NET2.0),可支持许多WS-I的标准。
由于WindowsCommunicationFoundation的推出,微软将WebService的发展重心移到WCF上,原有的ASP.NETWebService即给定了一个名称:ASMXWebService。扩充功能ASP.NET在2.0版时,功能已大致底定,成为Web应用程序的基础架构,微软开始在ASP.NET2.0上开发扩充的功能,包括AJAX的支持、MVC架构的支持以及更容易开发出数据库应用的架构。
ASP.NET
执行效率大幅提高ASP.net是把基于通用语言的程序在服务器IIS上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。但是ASP.net也有一个特点,就是每修改一次程序(即代码类)必须重新编译一次,修改几次就必须重新编译几次,执行效果也会有所降低。相关课程ASP.NET2.0快速入门ASP.NETASP.NETASP.NETASP.NETASP.NET2.0安全系列课程2.0入门与提高系列课程3.03.5开发系列课程AJAX深入浅出系列课程
ASP.NETMVC框架开发系列课程ASP.NET开发实践ASP.NET新特性优秀ASP.NET程序员修炼之路“为人写程序”初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够、不全面。
写给机器的程序,往往追求的是运行正确、执行效率能满足要求。但程序员的任务仅仅就是把业务逻辑转成机器能编译的计算机语言吗?其实,程序首先(注意,是首先)是写给人的。第一,程序是写给看代码的人的。第二,程序是写给用程序的人的。了解这一点,才能理解写程序为什么要有代码规范,为什么要有各种文档,为什么写子程序时要命好名,为什么要分层,为什么要学设计模式,为什么要写测试用例,为什么要推敲按钮的摆放,为什么要按XHTML标准写Web界面,为什么要用AJAX……理解了这一点,才能更好的做好上面种种事情。谁都在说“细节决定成败”,谁都知道要注意细节。为什么大家都在讲细节,有的人能通过细节打败对手,有的人连细节在哪一方都不知道,这就是水平的高低所在。我们要有心理准备:细节不是喊一声就会出现在你面前的。感知到细节,这是一个需要不断学习和实践,甚至有人指导的过程。这个过程有长有短,要看个人的学习能力,领悟能力。但最起码,我们首先要有一个方向。找程序的细节,方向就是“为人写程序”,在你做设计,写代码,摆弄界面的时候,心里时刻记住这一点,几个项目下来,你自然能看到很多细节了。“内外兼修”武侠电影里的高手,往往都是通过奇门心法,内力陡增而成为高手的。但我们做程序的,要成为高手,“内外兼修”才能事半功倍。内,指的是需求把握,设计思想,设计模式等。外,指的是写代码时的规范,做界面时的严谨等。看武侠看多了的我们,偏内轻外的特点是很明显的。看看书店里写设计模式主题的书籍和指导代码规范的书籍的数量和销量对比就是一个很好的证明。但是就算设计模式一套一套,但写的类却给人看半天也看不出思路的话,一两年之后,你仍将陷入一个个泥潭中。再举个例子,有的人自称ASP.NET程序员,而且他写出来的后台代码也层次清晰,条理清楚,但是做出来的界面,结构与表现混杂,一大堆IDE自动生成的垃圾代码充斥其中,该用单选框的用文本框,按钮放在谁都想不到的地方,不该用户操作的要用户操作,一步可操作完的搞成几步也不能完成操作……很显然,他不可能做出成功的产品。也许他也知道界面要合理,但是就是因为他不修外功,认为我是搞.NET这种先进技术的,去补习什么HTML、JavaScript、CSS不是自贬身价吗?其实,认真研究过HTML、JavaScript这些技术的人都会体味到,运用这些技术比流行的.NET、Java更有挑战性,而且你获得直接操作用户界面元素的能力后,以前那种做界面效果、接口功能时有心无力的情形将一去不返,这是很痛快的!如何学习ASP.NET要成为一个优秀的ASP.NET程序员,不仅要掌握.NET框架,理解ASP.NET的原理,而且要对DHTML架轻就熟,甚至对各种浏览器之间的差异
也要有所了解,所以做ASP.NET程序员是一件很有挑战的工作。那么如何学习ASP.NET,并最终成为优秀的ASP.NET程序员呢?我认为可以分为两个步骤来走:首先,熟悉ASP.NET各种标准控件的用法,了解ASP.NET工作原理。接着,朝“内”和“外”两个方向扩展自己的知识和技能。在VisualStudio.NET这样优秀的IDE帮助下,我们使用各种ASP.NET控件,掌握ASP.NET基本的工作原理应该是比较容易的。如能辅以几个简单的项目练习一下比较复杂的GridView、DataList等数据绑定控件的话,基本掌握ASP.NET是应该没有多大问题的。之后,我们就可以朝两个进阶方向前进了。“修内”的话,深刻理解面向对象的编程思想是必修的,然后是各种的B/S框架的模式(比如MVC)的理解,最后是设计模式等等软件工程的概念和技术。“修外”则更重实践。首先,做项目时注意把一些可以实现在客户端的逻辑用DHTML在客户端实现出来,以此掌握结合服务端、客户端技术的方法,加深对HTML的DOM对象的理解,熟练常用的JavaScript技巧。进而练习对Web界面的结构、数据、表现三者进行分离的规划、设计与实现。如此看来,学习ASP.NET也并不是一件很难的事情,注意“为人写程序”,“内外兼修”,自然就能做出合格的应用程序。
sqlserver2000
SQLServer是一个关系数据库管理系统,它最初是由MicrosoftSybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。在WindowsNT推出后,Microsoft与Sybase在SQLServer的开发上就分道扬镳了。Microsoft将SQLServer移植到WindowsNT系统上,专注于开发推广SQLServer的WindowsNT版本;Sybase则较专注于SQLServer在UNIX操作系统上的应用。在本书中介绍的是MicrosoftSQLServer以后简称为SQLServer或MSSQLServer。SQLServer2000是Microsoft公司推出的SQLServer数据库管理系统的一个版本。该版本继承了SQLServer7.0版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行MicrosoftWindows98的膝上型电脑到运行MicrosoftWindows2000的大型多处理器的服务器等多种平台使用。
SQLServer2000的特性Microsoft&;reg;SQLServer?2000的特性包括:1.Internet集成。SQLServer2000数据库引擎提供完整的XML支持。它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQLServer2000程序设计模型与WindowsDNA构架集成,用以开发Web应用程序,并且SQLServer2000支持EnglishQuery和Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。2.可伸缩性和可用性。同一个数据库引擎可以在不同的平台上使用,从运行MicrosoftWindows&;reg;98的便携式电脑,到运行MicrosoftWindows2000数据中心版的大型多处理器服务器。SQLServer2000企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大Web站点所需的性能级别。3.企业级数据库功能。SQLServer2000关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQLServer2000分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是SQLServer2000数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。4.易于安装、部署和使用。SQLServer2000中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQLServer的过程。SQLServer2000还支持基于标准的、与WindowsDNA集成的程序设计模型,使SQLServer数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。这些功能使您得以快速交付SQLServer应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。数据仓库。SQLServer2000中包括析取和分析汇总数据以进行联机分析处理(OLAP)的工具。SQLServer中还包括一些工具,可用来直观地设计数据库并通过EnglishQuery来分析数据。SQLServer2000共有4个版本,分别是个人版,标准版,企业版和开发版sqlserver2008是微软出的SQL系列最新版本。其主要特点如下:(1)高性能设计,可充分利用WindowsNT的优势。(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。(3)强壮的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。标准版、企业版、开发版、标准版、企业版、开发版、个人版区别对于新接触SQL数据库的人来说,类似这几个问题的有关于SQL版本的问题可以说不少,但又懒得去仔细研究。问题虽然简单,可是影响却不小。版本区别SQLServer2000有四个版本:企业版/标准版/个人版/开发版企业版和标准版需要安装在服务器操作系统上,如WindowsNTServer/Windows2000Server/Windows2003Server等个人版需要安装在个人操作系统上,如Windows98/Windows2000Professional/WindowsXPHome/WindowsXPProfessional等开发版可以安装在任何微软的操作系统上。SQLServer2000企业版作为生产数据库服务器使用。支持SQLServer2000中的所有可用功能,并可根据支持最大的Web站点和企业联机事务处理(OLTP)及数据仓库系统所需的性能水平进行伸缩。SQLServer2000标准版作为小工作组或部门的数据库服务器使用。SQLServer2000个人版供移动的用户使用,这些用户有时从网络上断开,但所运行的应用程序需要SQLServer数据存储。在客户端计算机上运行需要本地SQLServer数据存储的独立应用程序时也使用个人版。SQLServer2000开发版供程序员用来开发将SQLServer2000用作数据存储的应用程序。虽然开发版支持企业版的所有功能,使开发人员能够编写和测试可使用这些功能的应用程序,但是只能将开发版作为开发和测试系统使用,不能作为生产服务器使用。SQLServer2000WindowsCE版使用Microsoft?SQLServer2000?Windows?CE版(SQLServerCE)在WindowsCE设备上进行数据存储。能用任何版本的SQLServer2000复制数据,以使WindowsCE数据与主数据库保持同步。SQLServer2000企业评估版可从Web上免费下载的功能完整的版本。仅用于评估SQLServer功能;下载120天后该版本将停止运行。
除了这些版本的SQLServer2000之外,SQLServer2000DesktopEngine组件允许应用程序开发人员用他们的应用程序分发SQLServer2000关系数据库引擎的复本。因为SQLServer2000DesktopEngine中的数据库引擎的功能与SQLServer各版本中的数据库引擎相似,所以DesktopEngine数据库的大小不能超过2GB。SQLSERVER联机丛书上的。版本兼容性:概述下面是这几个版本的简单对比:SQLServer包括企业版,标准版,个人版,开发版,桌面引擎(MSDE),评估版,CE版1.评估版用于评估,CE版用于WindowsCE,就不多说了2.从功能上,企业版和开发版是一对,标准版和个人版是一对。企业版和开发版主要用于大用户,可以支持更多的CPU,内存,可以支持集群(Cluster),日志传输(logshipping),并行DBCC,并行创建索引,索引视图等高级功能。3.从安装上看,企业版和标准版是一对,个人版,开发版和桌面引擎是一组,企业版和标准版只能安装在Windows的Server版(NT,2000,2003)上,个人版,开发版和桌面引擎可以安装在更多的系统(包括NTWorkstation,2000professional,XP等。98只能安装个人版或桌面引擎,但桌面引擎得数据库不能超过2G)。4.投入运行时使用企业版,标准版或桌面引擎,(个人版,开发版分别用于对应标准版,企业版的开发)。关于标准版和企业版两者之间的差别,主要体现在:1是否支持MSCS群集2是否支持全文索引3是否支持分布式分区视图4是否支持日志传送5是否支持索引视图的CPU利用企业版提供最高的可用性,稳定性和并发个人版和MSDE中硬性填入某些代码使得并发用户在五个以上之后性能大打折扣。标准版:数据库引擎功能缺少故障转移群集(最多四个节点)、支持SQLServer企业管理器中的故障转移、日志传送、并行DBCC、并行CREATEINDEX、增强的预读和扫描、索引视图、联合数据库服务器、支持系统区域网络(SAN)、支持语言设置的图形实用工具,对于AnalysisServices缺少用户定义OLAP分区、分区向导、链接OLAP多维数据集、ROLAP维度支持、支持HTTPInternet、计算单元、回写到维度、支持超大型维度、实时OLAP、分布式分区多维数据集,win2000下最大只支持4个CPU的SMP,NT下最大只支持8个CPU(企业版)
,买10个授权是不可以上20个用户的(一般是限制并发用户数,连接数决定于OS)企业版:作为生产数据库服务器使用。支持SQLSERVER2000中的所有可用功能,并根据支持最大的Web站点和企业联机事务处理(OLTP及数据仓库系统所需要的性能水平进行伸缩。标准版:作为工作组或者部门数据库服务器使用。
Java的简介那么Java到底有何神奇之处呢?Java语言其实最早是诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。在Java出现以前,Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力,而SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都想到:噢,这正是我想要的。于是Java成了一颗耀眼的明星,丑小鸭一下了变成了白天鹅。Java的开发环境有不同的版本,如sun公司的JavaDevelopmentKit,简称JDK。后来微软公司推出了支持Java规范的MicrosoftVisualJ++Java开发环境,简称VJ++。
Java的特点
1.平台无关性1.平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(Java
VirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。2.安全性2.安全性Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。3.面向对象3.面向对象Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。4.分布式4.分布式Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。5.健壮性5.健壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Bytecode校验等功能。C/C++语言Java与C/C++语言Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但C和C++被大家接受,所以Java设计成C++形式,让大家很容易学习。Java去掉了C++语言中的指针运算、结构、typedefs、#define、需要释放内存等功能,减少了平常出错的50%,让Java的语言功能很精炼。而且,因为Java很小,所以整个解释器只需215K的RAM,并增加了一些很有用的功能,如自动收集碎片。Java实现了C++的基本面象对象技术并有一些增强,(为了语言简单,删除了一些功能)。Java处理数据方式和用对象接口处理对象数据方式一样。Java与C和C++直接相关.Java继承了C的语法,Java的对象模型是从C++改编而来的.现代程序设计始于C,而后过渡到C++,现在则是JAVA.通过
大量的继承,JAVA提供了一个强大的,可以更好地利用已有成果的,逻辑一致的程序设计环境,并且增加了在线环境需求的新功能.或许最重要的一点在于,由于它们的相似性,C,C++和JAVA为专业程序员定义了一个统一的概念架构.程序员从其中的一种语言转到另一种语言时,不会遇到太大的困难.Java与Internet我们知道,早先的www仅可以传送文本和图片,Java的出现实现了互动的页面,是一次伟大的革命。Java并不是为Internet、www而设计的,它也可以用来编写独立的应用程序。Java是一种面向对象语言,Java语言类似于C++语言,所以已熟练掌握C++语言的编程人员,再学习Java语言就容易得多!Java程序需要编译,它被放置在Internet服务器上,当用户访问服务器时,Java程序被下载到本地的用户机上,由浏览器解释运行。实际上有两种Java程序:一种Java应用程序是一个完整的程序,如Web浏览器。另一种Java小应用程序是运行于Web浏览器中的一个程序。Java程序和它的浏览器HotJava,提供了可让你的浏览器运行程序的方法。你能从你的浏览器里直接播放声音,你还能播放页面里的动画,Java还能告诉你的浏览器怎样处理新的类型文件。当我们能在2400baud线上传输视频图象时,HotJava将能显示这些视频。Java与电子商务电子商务是当今的热门话题,然而传统的编程语言难以胜任电子商务系统,电子商务要求程序代码具有基本的要求:安全、可靠、同时要求能与运行于不同平台的机器的全世界客户开展业务。Java以其强安全性、平台无关性、硬件结构无关性、语言简洁同时面向对象,在网络编程语言中占据无可比拟的优势,成为实现电子商务系统的首选语言。
php语言
目录php语言PHP的特性PHP43.0版增强的功能PHP技术的应用集合数据库连接php语言
PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:HypertextPreprocessor)的缩写。PHP是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执
行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP独特的语法混合了C、Java、Perl以及PHP自创新的语法。它可以比CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,充分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户在一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。PHP最初是1994年RasmusLerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。1995年以PersonalHomePageTools在(PHPTools)开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要且增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。第二版定名为PHP/FI(FormInterpreter)。PHP/FI加入了对mSQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用PHP/FI;时间到了1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了ZeevSuraski及AndiGutmans,而第三版就定名为PHP3。2000年,PHP4.0又问世了,其中增加了许多新的特性。PHP的特性开放的源代码:所有的PHP源代码事实上都可以得到。PHP是免费的。基于服务器端:由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。
简单的语言:PHP坚持脚本语言为主,与Java以C++不同。效率高:PHP消耗相当少的系统资源。图像处理:用PHP动态创建图像PHP3与PHP4的比较PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000万。加上它的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP都将在WebCGI的领域上,掀起巅覆性的革命。对于一位专业的WebMaster而言,它将也是必修课程之一。PHP4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比PHP3.0要快,其脚本描述更强大并且更复杂,最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP脚本引擎重新设计产生的结果:引擎由AndiGutmans和ZeevSuraski从底层全面重写。PHP4.0脚本引擎——Zend引擎,使用了一种更有效的编译——执行方式,而不是PHP3.0采用的执行——当解析时模型。PHP43.0版增强的功能PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。(2)扩充了API模块:PHP4.0为扩展的API模块的提供了扩展PHP接口模块,它比旧的API版本显著地快。PHP模块已有的及最常用的接口多数被转换到使用这个扩展的接口。(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。(4)布尔类型:PHP4.0支持布尔类型。(5)进程生成:在UNIX环境下的PHP4.0提供了一个很智能和通用的生成进程,使用了一种名为基于automake/libtool的系统生成技术。(6)COM/DCOM支持:PHP4.0提供COM/DCOM支持(仅用于Windows环境)可以无缝地存取和访问COM对象。
(7)与PHP3.0兼容性很好:PHP4.0是与PHP3.0代码向后兼容性接近100%。由于PHP4的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。PHP介绍(8)配置:PHP4重新设计和增强了PHP。ini文件,这使得用PHP。ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows注册(Windows环境)。(9)加密支持:PHP4实现了完整的加密,这些加密功能是一个完整的mycrypt库,并且PHP4.0支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1也是可使用的一些加密算法。(10)类型检查:PHP4.0支持同一操作符用于评类型检查:===(3等号运算符),为在两个值和其类型之间作检查。例如,3===3将视为假(类型是不同的),而3==3(相等判断)将视为真。(11)FTP支持:PHP4.0支持FTP。通常,你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而,如果你确实有需要,可以使用PHP。(12)PHP4新增函数或功能增强函数:PHP4.0新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。array_count_values()eval()foreach()nclude()ob_end_clean()ob_end_flush()ob_get_contents()ob_start()strip_tags()unset()(13)here打印:PHP4.0的Here打印是与Perl类似的,尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在HTML文件中,不会漏掉任何一个字符,例如目录标记。(14)HTTPSessionfallback系统:为HTTPSession管理的一个fallback系统在PHP4.0被实现。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在URL的查询字符串中被携带。(15)ISAPI支持:PHP4.0能作为一个个性化的ISAPI模块作为IIS插件。这比PHP3.0更有效,它作为一个外部的程序来运行。(16)内存:PHP4.0能更有效的使用内存,导致较少的内存占用消耗,这主要归功于引用计数技术的实现。(17)其他类成员函数:在PHP4.0你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。(18)多维数组:在PHP4.0,利用GET,POST,Cookies的进行的数据传输支持多维数组。(19)个性化的HTTPSession支持:HTTPSession处理,包括fallback系统管理,在PHP4.0被它的新库函数实现。在版本3.0中处理Session
要求使用PHPLIB和第三方的库函数,它比把Session直接地由PHP支持慢了许多。(20)个性化的Java支持:PHP4.0支持和java的交互。这种个性化的Java支持为PHP在Java对象上创建和使用方法提供一个简单并且有效的工具。21)对象和数嵌套组:PHP4.0实现了功能更加强大的对象,移去了PHP3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此,可以根据你的需要实现嵌套。(22)面向对象的编程:PHP4.0为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。(23)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用PHP4的面向对象的特征存取他们自身的功能。使用这个特征的一个COM模块已经被实现了。(24)输出缓冲支持:PHP提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在PHP4的输出缓冲支持允许HTML头信息存放,无论HTML的正文是否输出。头信息((header(),contenttype,andcookies)不采用缓冲。(25)增加了PCRE库:PHP4.0包括一个Perl兼容的正则表达式(PCRE)库,和正常regex库一起与PHP绑定。split和replacePCRE功能被支持。PCRE和Perl正规表达式之间有一些细微差别。(26)PHP.ini文件:PHP.ini文件在PHP4.0被重新设计,使用的PHP的配置PHP.ini是更容易并且更有效的。全部文件能被Apache在运行时间操作(在Apache环境下)或由Windows注册表(在Windows下面)。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。(27)引用计数:PHP4.0为系统中的每个数值提供了引用计数,包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP3.0中,每次递归另外的SQL结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。(28)支持引用:通过引用可以改变一个变量的值。(29)函数的运行时绑定:PHP4.0的运行时间绑定功能允许你在他们被声明以前调用,无论声明是否在代码以后或是在运行时间。(30)类的运行时信息:PHP4.0支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。(31)服务器抽象层:为支持Web服务器提供了增强型SAPI(服务器API)接口,是PHP4。0不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务
器提供透明的支持,这些服务器包括Apache,IIS(ISAPI),以及AOL服务器。--------------------------------------------------------------------------------------------------------------------------PHP5新特性:更加面向对象化的PHPPHP5引入了新的对象模型(ObjectModel)。完全重写了PHP处理对象的方式,允许更佳性能和更多特性。PHP处理对象部分的内核完全重新开发过,提供更多功能的同时也提高了性能。在以前版本的php中,处理对象和处理基本类型(数字,字符串)的方式是一样的。这种方式的缺陷是:当将对象赋值给一个变量时,或者通过参数传递对象时,对象将被完全拷贝一份。在新的版本里,上述操作将传递引用(可以把引用理解成对象的标识符),而非值。很多PHP程序员可能甚至没有察觉到老的对象处理方式。事实上,大多数的php应用都可以很好地运行。或者仅仅需要很少的改动。私有和受保护成员PHP5引入了私有和受保护成员变量的概念。我们可以用它来定义类成员的可见性。私有方法和受保护方法PHP5也引入了私有方法和受保护方法的概念。以前的不使用类的老代码,没有访问修饰符(public,protected,private)的代码可以不经改动运行。抽象类和抽象方法Php5也引入了抽象类和抽象方法的概念。抽象方法只是声明了方法的签名并不提供它的实现。包含抽象方法的类必须被声明成抽象类。抽象类不能被实例化。以前的不使用抽象类的老代码可以不经改动运行。接口Php5引入了接口。一个类可以实现多个接口。以前的不使用接口的老代码可以不经改动运行类的型别提示PHP5依然是弱类型的,不过在定义函数参数时,可以使用类的型别提示来声明期望传入的对象类型和其他强类型语言一样,php5类的型别提示在运行期间检查而非编译期间检查。FinalPHP5引入了final关键字来声明final成员和final方法。final成员和final方法不能被子类覆盖。
更进一步,可以把类声明成final。将类声明成final可以阻止这个类被继承。final类里面的方法缺省地都是final的,无需再声明一次。属性不能定义成为final.以前的不使用final的老代码可以不经改动运行.对象克隆Php4没有提供一种机制来让用户自己定义复制构造子(copyconstructor)控制对象的复制过程。Php4做二进制的拷贝,因而很精确地复制了对象的所有属性。精确地复制对象的所有属性可能并不是我们一直想要的。有个例子可以很好地说明我们确实需要复制构造子:比如一个GTKWindow的对象a。a持有它所需要的全部资源。当复制的这个GTKWindow到对象b时候,我们更希望b持有新的资源对象。再举个例子:对象a包含了一个对象c,当你把对象a复制到对象c的时候。我们可能更希望对象b包含一个新的对象c的copy,而不是一个对象c的引用。对象的复制是通过clone这个关键字达到的(Clone调用被克隆对象的__clone()方法)。对象的__clone方法不能够直接被调用。当developer创建对象的一份拷贝的时候,php5将会检查__clone()方法是否存在。如果不存在,那么它就会呼叫缺省的__clone()方法,复制对象的所有属性。如果__clone()方法已经定义过,那么_clone()方法就会负责设置新对象的属性。为了方便起见,Engine会缺省地复制所有的属性。所以在__clone()方法中,只需要覆盖那些需要更改的属性就可以了。统一构造函数Php5允许开发者声明一个类的构造方法。拥有构造方法的类在每次创建新的对象的时候都会呼叫这个方法,因此构造方法适合对象在被使用之前的初始化工作Php4中,构造方法的名称和类的名称一样。考虑到从子类构造方法呼叫父类构造方法的情况是非常普遍的,而将类从一个继承体系中搬迁引起的父类变更就常常导致需要更改类的构造方法,php4的做法显然是不太合理的。Php5引入了一个声明构建函数的标准方法:__construct().为保持向后的兼容性,如果php5不能够找到__construct(),它会寻找老式的构造方法,即与类同名的方法。简单的说,只有当老代码里包含了一个__construct()方法的时候,才存在一个兼容性的问题。析构方法对于面向对象的编程来说,可以定义析构方法是非常有用的一个功能。析构方法可以用来记录调试信息,关闭数据库连接等等一些清除收尾的工作。Php4中没有析构方法,尽管php4已经支持可以注册一个函数以便请求结束的时候被调用。
Php5引进的析构方法的概念和其他面向对象的语言(比如java)是一致的。当指向这个对象的最后一个引用被销毁的时候,析构方法被调用,调用完成后释放内存。且析构方法不接受任何参数。和构建方法一样,父类的析构方法也不会被隐含调用。子类可以在自己的析构方法通过调用parent::__destruct()来显式地调用它。ConstantsPhp5引入了class级别的常量。老的没有使用const的代码仍然正常运行。Php4没有异常控制。Php5引入了和其它语言(java)相似的异常控制模式。应该注意的是php5里面支持捕捉全部异常,但是不支持finally子句。在catch语句块里面,可以重新抛出异常。也可以有多个catch语句,在这种情况下,被捕捉到的异常从上往下依次比较和catch语句比较异常,第一个类型匹配的catch语句将会被执行。如果一直搜索到底还没有发现匹配的catch子句,则寻找下一个try/catch语句。最后不能捕捉的异常将被显示出来。如果异常被捕捉,那么程序会接着catch语句块的下面开始执行。可以定义一个并不继承自Exception的异常类,但是,最好还是从Exception继承并定义自己的异常。这是因为系统内建的Exception类能够收集到很多有用的信息,而不继承它的异常类是得不到这些信息的。如果我们定义的一异常类都是继承自Exception基类无兼容性问题。老的代码不会受到这一特性的影响。Php4中不能再次引用函数返回的对象以进一步呼叫返回对象的方法,而php5是可以的。静态成员变量能够被初始化。静态方法PHP5引入了静态方法,可以在不实例化类的情况下呼叫静态方法。伪变量$this不能够在静态方法方法中使用。Php5引入了instanceof关键字,允许用它来测试一个对象是一个类的实例,或者是一个派生类的实例,或者实现了某个接口现在,静态变量在编译阶段处理。因此程序员可以通过引用为静态变量赋值。这可以改善性能,不过,不能够使用对静态变量的间接引用了。按引用传递的函数参数现在也可以设置缺省值了。__autoload()拦截函数在一个未声明的类被初始化的时候自动调用。该类的名字会被自动传递给__autoload()函数。而__autoload()也只有这么唯一的一个参数。可重载的方法呼叫和属性访问
方法呼叫和属性访问都能够通过__call,__get()and__set()方法重载。迭代当和foreach一起使用对象的时候,迭代的方式被重载过了。缺省的行为是迭代类的所有属性。一个类的所有对象都能够被迭代浏览到,如果这个类实现了一个空的接口:Traversable.换句话说,实现了Traversable接口的类可以和foreach一起使用。接口IteratorAggregate和Iterator允许指定类的对象在代码中如何迭代。IteratorAggregate接口有一个方法:getIterator()必须返回一个数组新的__toString方法可以通过覆盖__toString方法来控制对象到字符串的转换。ReflectionAPIPhp5引入了全套的反射API,以支持对类,接口,函数,方法的反向工程。它也提供了API以从程序中提取注释文档。新内存管理机制Php5有一个全新的内存管理机制,使得它在多线程的环境下可以更有效地运行。在分配和释放内存时,不再使用mutex锁定/解除锁定PHP技术的应用集合1,伪静态2,静态页面生成3,数据库缓存4,过程缓存5,div+cssw3c标准6,大负荷7,分布式8,jquery框架集成9,flex10,桌面程序应用数据库连接PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样
的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性
数据库系统(databasesystems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。目录定义构成性能含义领域特点基本要求数据模式用户对数据库系统的访问过程定义构成性能含义领域特点基本要求
数据模式用户对数据库系统的访问过程展开定义数据库系统(databasesystems),是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。数据库系统DBS(DataBaseSystem,简称DBS)是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。计算机的高速处理能力和大容量存储器提供了实现数据管理自动化的条件。数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程牌,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使计算机走出科研机构进入各行各业、进入家庭。构成数据库系统一般由4个部分组成:①数据库,即存储在磁带、磁盘、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。②数据库管理系统(DBMS)。它是一组能完成描述、管理、维护数据库的程序系统。它按照一种公用的和可控制的方法完成插入新数据、修改和检索原有数据的操作。③数据库管理员(DBA)。④用户和应用程序。性能①能够保证数据的独立性。数据和程序相互独立有利于加快软件开发速度,节省开发费用。②冗余数据少,数据共享程度高。③系统的用户接口简单,用户容易掌握,使用方便。④能够确保系统运行可靠,出现故障时能迅速排除;能够保护数据不受非受权者访问或破坏;能够防止错误数据的产生,一旦产生也能及时发现。⑤有重新组织数据的能力,能改变数据的存储结构或数据存储位置,以适应用户操作特性的变化,改善由于频繁插入、删除操作造成的数据组织零乱和时空性能变坏的状况。⑥具有可修改性和可扩充性。⑦能够充分描述数据间的内在联系。含义数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、
技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。领域数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程牌,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使计算机走出科研机构进入各行各业、进入家庭。特点数据的结构化,数据的共享性好,数据的独立性好,数据存储粒度小,数据管理系统,为用户提供了友好的接口。数据库系统的核心和基础,是数据模型,现有的数据库系统均是基于某种数据模型的。数据库系统的核心是数据库管理系统。数据库系统一般由数据库、数据库管理系统(DBMS)应用系统、、数据库管理员和用户构成。DBMS是数据库系统的基础和核心。基本要求对数据库系统的基本要求是:①能够保证数据的独立性。数据和程序相互独立有利于加快软件开发速度,节省开发费用。②冗余数据少,数据共享程度高。③系统的用户接口简单,用户容易掌握,使用方便。④能够确保系统运行可靠,出现故障时能迅速排除;能够保护数据不受非受权者访问或破坏;能够防止错误数据的产生,一旦产生也能及时发现。⑤有重新组织数据的能力,能改变数据的存储结构或数据存储位置,以适应用户操作特性的变化,改善由于频繁插入、删除操作造成的数据组织零乱和时空性能变坏的状况。⑥具有可修改性和可扩充性。⑦能够充分描述数据间的内在联系。数据模式数据模型是信息模型在数据世界中的表示形式。可将数据模型分为三类:层次模型、网状模型和关系模型。(1)层次模型特点:层次模式的特点(2)网状模型特点:网状模式的特点(3)关系模型特点:关系模式的特点用户对数据库系统的访问过程数据库管理系统是数据库系统的核心,对数据库的一切操作,如原始数据的装入、检索、更新、再组织等等,都是在DBMS的指挥、调度下进行的,它是用户与物理数据库之间的桥梁,根据用户的命令对数据库执行必要的操作。