ASP和SQL网站数据库程序设计第三章.docx

上传人:b****5 文档编号:6187154 上传时间:2023-01-04 格式:DOCX 页数:16 大小:155.01KB
下载 相关 举报
ASP和SQL网站数据库程序设计第三章.docx_第1页
第1页 / 共16页
ASP和SQL网站数据库程序设计第三章.docx_第2页
第2页 / 共16页
ASP和SQL网站数据库程序设计第三章.docx_第3页
第3页 / 共16页
ASP和SQL网站数据库程序设计第三章.docx_第4页
第4页 / 共16页
ASP和SQL网站数据库程序设计第三章.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ASP和SQL网站数据库程序设计第三章.docx

《ASP和SQL网站数据库程序设计第三章.docx》由会员分享,可在线阅读,更多相关《ASP和SQL网站数据库程序设计第三章.docx(16页珍藏版)》请在冰豆网上搜索。

ASP和SQL网站数据库程序设计第三章.docx

ASP和SQL网站数据库程序设计第三章

前言

笔者经常在思考一个问题“是否有必要随波逐流地追求更新的技术呢?

”,这个问题一直困扰着我。

新的技术是用以改善旧有技术的缺陷,并且提供给用户更加便捷的操作环境、更强大的功能。

但是,用户是否可以完全发挥这些新技术的功能,享受到新技术所带来的便利呢?

事实上,运用新产品能够发挥新技术的70%的功能已经相当不错了。

旧有技术虽然有其缺点存在,但是俗话说“勤能补拙”,在程序的设计上,采取一些变通的方式,往往可以增加编写程序的功力,同时也是培养逻辑思维能力的好方法。

本书以ASP技术为基础,辅以微软最新的数据库系统“SQLServer2000”作为本书的主轴。

笔者希望可以在程序设计方面,逐步地带领读者进入ASP与SQLServer这种组合的程序设计领域。

本书分为四大部分,第一部分(第1章、第2章)介绍基础环境,包括网站的架设和编辑器的选用;第二部分(第3章~第8章)介绍SQLServer2000应用,包括数据库的建置、备份与管理,以及Transact-SQL语法;第三部分(第9章~第13章)介绍对象与ADO对象的应用,包括Response,Request对象的应用、ODBC的设置与应用、ADO对象的应用、ASP与ActiveXDLL,以及Server对象与对象的整合应用;第四部分(第14章~第15章)是实务设计。

由于作者水平有限,在本书的编写过程中,错误之处在所难免,欢迎各位读者批评指正。

作者

3

数据库基本概念

3-1 数据库系统

3-2 数据库管理系统(DBMS)

3-3 关系型数据库

3-4 数据库设计

3-5 SQL语句

MSSQLServer2000是微软公司所推出的一套在Windows平台上执行的数据库管理系统,用以提供作为应用程序的数据来源,存放各种数据,并可以让用户很容易地达成所要进行的数据存取操作。

同时它也提供了一些可视化的管理工具,协助数据库系统管理者可以更方便快速地管理及设计库数据库的内容,以及对数据库进行维护。

在开始介绍SQLServer2000数据库管理系统的各项管理、维护操作之前,先来谈谈一些有关数据库的概念,让读者对数据库系统能先有一些基本的认识。

3-1数据库系统

什么是数据库系统?

简单地说,数据库系统是一种计算机化的数据保存系统,它以特有的数据存储方式将相关的数据内容整合在一起。

我们可以将数据库本身想成是一个电子档案柜,在这个电子档案柜内,存放着一些电子数据文件。

数据库系统主要的目的在于维护信息,并在必要时提供协助取得这些信息。

3-1-1 数据库系统的类型

数据库系统被使用的范围非常广泛,从一般的微电脑到大型主机都可以使用。

一般来说,大型主机多倾向于使用多用户的数据库系统,而一般的微电脑、个人计算机则倾向于使用单用户数据库系统。

这里所谓的单用户数据库系统,是指同时最多只能有一个用户存取数据库的内容,而多用户数据库系统,则允许多个用户同时存取数据库的内容。

数据库系统的种类非常多,目前以关系型(Relational)数据库系统最为常见,所谓的关系型数据库系统是以表(Table)的类型将数据提供给用户,而所有的数据库操作都是利用旧的表来产生新的表。

除了关系型数据库系统外,其他常见的数据库系统类型还有InvertedList,Hierarchic,Network等数据库系统。

3-1-2 数据库系统的结构

不同的数据库系统有着不同的系统结构,毫无疑问,一个数据库结构并不能完全用于所有的数据库系统,在这里我们以最被广泛认同的数据库结构——ANSI/SPARC结构来进行说明。

1.ANSI/SPARC结构

在ANSI/SPARC结构中将数据库分为内部层(InternalLevel)、概念层(ConceptualLevel)以及外部层(ExternalLevel)等三层,如图3-1所示。

图3-1数据库结构图

内部层是最接近数据库实体存储位置的一层,与数据库数据实际存储方式有关,在内部层中以具体的方式来表示整个数据库。

外部层是最接近用户的部分,与用户对数据的查看方式有关,在外部层中以用户看得懂的方式来表示部分数据库的内容,每个用户所查看的数据内容不同。

概念层位于内部层与外部层之间,以用户看得懂的方式来表示整个数据库,提供每个用户一致的数据查看内容。

不管是使用哪一种数据库系统,都只会影响到ANSI/SPARC结构的外部层以及概念层内容,而与内部层无关。

例如,对于关系型数据库系统而言,在概念层中所看到的数据一定是以关系型的形式存在,在外部视域中所看的数据有可能会以关系型的形式存在,至于在内部层中的数据则一定不会是以关系型的形式存在。

2.Mapping对应

在图3-2的详细结构图中,可以发现在内部层与概念层之间以及概念层与外部层之间各有一个对应(Mapping)存在,分别对应着上下两层的内容。

图3-2数据库详细结构图

概念/内部对应(Conceptual/InternalMapping)位于概念层与内部层之间,定义数据库的概念视域内容与实际存储内容之间的对应关系。

如果改变了数据库的存储结构,只要在这个对应中修改对应的内容就可以了,而不需要改变概念视域与外部视域的内容。

外部/概念对应(external/conceptualmapping)位于外部层与概念层之间,定义特定外部视域与概念视域的对应关系,也就是定义外部视域所查看的部分数据库内容与整个数据库之间的关系。

3-1-3 数据库系统的主要组件

基本上,在数据库系统中包含了数据、软件、硬件以及用户等四个主要组件。

1.数据

这里的数据是指实际存放在数据库中的数据,通常也就是在企业应用系统中会使用到的永久性数据。

这里所谓的永久性数据并不是真的指该数据一定会存在一段很长的时间,而是用来与其他的暂时性数据(如,输入数据、输出数据、控制语句等)作为区分。

虽然说不同的数据库系统,其存储数据的方式或功能特性可能会有所不同,但一般说来,数据库内的数据通常是整合与共享的。

所谓“数据整合”是指数据库为存放多个数据文件集合的个体,而非仅能存放单一数据文件的个体,这些数据文件间若有重复的信息存在,则这些重复的数据可以被清除。

例如,在数据库中包含记录员工基本数据的Employe以及记录参加训练课程的员工数据Enrollment两个数据文件,假设我们要知道所有参加训练课程员工的部门数据,可以直接从Employe文件中取得,而不需将部门数据重复记录于Enrollment文件中。

所谓的“数据共享”,是指数据库内的数据可以被多个不同的应用程序或用户共享。

也就是说,我们只要在数据库中存储一份数据,不同的用户就可以为了相同或不同的目的来使用这个数据。

例如,在人事管理系统中以及在会计薪金系统中都会使用到员工基本数据文件,在数据库内仅需存储一份员工数据文件提供这两个系统共同使用即可,而不需要分别为不同的系统各自存储一份。

2.软件

软件是指实体数据库与用户之间的接口,通常被称为数据库管理系统(DBMS),主要是被用来协助用户存取数据库的内容。

数据与实体数据库中以特定的方式存储,用户若要直接存取实体数据,就必须知道数据存放的格式以及数据存放的实体位置。

数据库管理系统提供用户一个数据存取的接口,将数据存储的格式与位置交由DBMS来管理,所有的存取动作都交由DBMS来处理。

换句话说,DBMS将数据库由实体的硬件层提升成虚拟的视域,让用户的数据库存取操作更为简单,用户不再需要知道实际上数据库数据的存储方式或存储位置,只要知道数据库在数据库管理系统中的结构定义,就可以通过DBMS顺利存取数据库的内容。

所以说,数据库管理系统是数据库系统中最重要的一项。

3.硬件

要让数据库系统能够顺利地执行,就必须提供适当、足够的硬件设备。

数据库系统可运行的硬件种类范围非常广泛,从一般的微电脑到大型主机都有。

当然,在不同的硬件设备上,使用的数据库系统可能不同,其所提供的功能特性也可能不同。

例如,大系统通常使用多用户数据库系统,允许多个用户同时存取数据库内容;而一般的PC使用同时只能有一个用户存取的单一用户数据库系统。

与数据库系统运行有关的硬件设备可分为以下两类:

存储设备与I/O装置:

传递信息、存储数据库数据的设备。

与数据库数据量的大小有关,数据量越多,需要的存储空间也就越大。

CPU处理器与内存:

执行数据库系统软件所占用的系统资源。

系统的处理器速度及内存空间至少要能符合执行操作系统与数据库软件的最小需求。

理论上来说,CPU越快、内存越大,则执行效率就越高。

数据库的数据量除了会影响存储空间外,也会影响数据库的执行效率,当我们在规划数据库系统的硬件设备时,应该要以未来的数据量作为考虑的标准,以减少日后升级或更换硬件设备的状况。

4.用户

当然必须要有用户,数据库系统才会有意义,基本上我们可以将数据库系统的用户分为:

程序设计人员、终端用户以及数据库管理员等三类。

数据库管理员(DBA)是一个整合技术的专业人员,他主要的工作是建立一个数据库,并将企业环境的决策内容付诸于实践,同时他也必须确保数据库的执行效率以及提供其他相关的技术服务。

通常他是直接通过数据库管理系统存取、维护数据库的内容。

程序设计人员利用程序语言编写数据库应用程序,在数据库程序中可以利用DBMS所提供的功能指令,对数据库的内容进行存取。

终端用户(EndUser)通过数据库应用程序的操作,利用工作站或终端机与数据库系统建立交互,进而存取数据库的数据。

大部分的数据库系统内至少都会提供一个称为查询语言处理器(QueryLanguageProcessor)的内建应用程序,提供用户以高级的指令或语句将命令传递给DBMS。

3-1-4 数据集中化管理

在多用户的环境下,使用数据库系统维护数据将具有数据集中化管理的优势。

所谓数据集中化管理的概念是指,由数据管理者(DA)负责,就整个应用环境需求作一个通盘的了解后,对数据加以整合分析,定义出数据库的数据内容以及数据的管理、处理政策。

接着,由数据库管理者(DBA)将这些政策付诸于实践并负责维护管理。

数据集中化管理具有以下优点:

1.减少重复的数据

在非数据库系统中,每个应用程序有各自的数据文件,这样通常会造成数据重复存储,浪费硬盘的空间。

然而,这并不表示,一定要将数据库内所有的重复数据都删除。

有时候,由于技术上或实际应用上的考虑,我们必须将相同的数据重复存储成多份,并加强数据的维护。

2.避免数据不一致

若在数据库中有重复的数据存在,可以将具有重复性的部分定义在数据库管理系统(DBMS)中,交由DBMS来管理控制,以维护数据的一致性。

也就是说,若在数据库中修改一个重复性的数据内容,则DBMS会自动维护数据库内容的一致性,根据用户定义的维护内容,同时将重复的地方全部修改,或取消修改数据的动作。

3.数据可共享

数据库内的数据除了能够提供多个应用程序,多个用户共同使用外,也可以直接利用现有数据库的内容,建立一个新的数据库应用程序。

4.建立标准

这里的标准是指数据存储的表示格式,对于集中化的数据库,DBA可以确保所有数据都是应用设置的标准显示。

数据库的数据标准化可以协助数据的交换动作,同时也能够将数据库移转到其他系统上。

5.应用安全设置

将数据集中管理后,可以在数据库系统中,利用用户帐号的设置,来设置用户的存取权限并维护数据的安全性。

6.维护数据的正确

在数据库系统中,对于有规则可循的数据,我们可以依据数据的特性设置数据的准则条件,这样可以避免用户输入不合理的数据或是从数据库中快速找出违背规则的数据。

7.平衡冲突性的需求

在知道整个企业环境的需求后,DBA就可以将系统加以结构化,提供对企业环境的完整服务。

对于有冲突的部分,根据企业需求的优先等级设置,建立一个对企业而言最好的数据库。

3-1-5 数据独立

在早期系统中的应用程序通常是与数据相关的,也就是说,数据的存储方式与数据的存取技术都是根据应用程序的需要进行考虑,甚至将这些数据的存储方式与数据的存取技术建立于程序代码内。

因此,当我们修改了数据的存储方式或是数据的存取技术后,就势必会影响到应用程序。

然而,在数据库系统中,基于下列两个理由,我们应该避免应用程序与数据产生相关性,也就是说应用程序具有数据独立性。

在不同的应用程序中,可能会需要对数据库中相同的数据作不同的检查。

例如,在将数据整合前,两个应用程序使用各自的数据文件,当我们要将两个数据文件整合成数据库时,若发现共同的属性在两个数据文件中定义的数据类型不同,这时,我们仍然可以通过DBMS所提供的类型转换功能来整合数据。

因此,应用程序若与数据独立,则不需修改应用程序的内容。

数据库管理员可以在数据库中任意修改数据的存储结构或是存取技术,而不需去修改现有的应用程序内容。

例如,当我们要在数据库中增加新的数据或修改应用程序的修先等级,若应用程序与数据独立,则只需修改数据库的内容,而不需修改应用程序的内容。

所以我们可以说,数据独立是将应用程序从数据的存储结构及存取技术分离开来,在应用程序中不需以特定的存储结构或存取技术作为考虑。

不过值得注意的是,数据独立并非DBMS与生俱有的,而是需要数据库管理员自行在程序设计上加入,所以说数据独立是使用数据库的优点,到不如说是使用数据库的目标。

3-2数据库管理系统(DBMS)

前面曾经说过,数据库管理系统是数据库系统中最重要的部分,用户对数据库的所有存取动作都是通过数据管理系统来执行的,而许多的数据管理、维护也都交由DBMS来完成,因此,在数据库管理系统中至少要提供下列功能:

1.数据定义

数据定义是指定义数据库内数据的类型、数据的长度等,例如,在数据库内增加一个数据文件时,必须对数据文件内的各个属性进行数据定义。

因此,DBMS必须能够接受原有的数据定义格式,并且转换成适当的数据格式存储。

换句话说,在DBMS中必须包含每一种数据定义语言(DDLs)的语言处理组件。

2.数据处理

DBMS必须能够对数据库内现存的数据做查询、修改、删除等动作,或是在数据库中增加数据。

因此,在DBMS中必须包含数据处理语言(DML)的处理组件。

3.数据安全及正确

DBMS必须能监视用户存取数据库的需求,对于每一个数据存取需求在执行前都会与设置的准则条件加以验证,并且拒绝所有违反安全设置或验证规则的存取需求。

4.数据实时复原

数据库的数据可能会因为操作的错误或设备的损耗而损坏,这时DBMS(或是其他相关的软件组件,称为转换管理员)必须提供数据实时复原控制能力,让数据库能够在最短的时间内恢复正确的数据。

最常见的方法是将以前备份的数据重新加载。

5.数据目录

DBMS必须提供数据目录功能,存储数据库中所定义的信息,数据目录是数据库内所有不同于Schema及对应存储的地方。

换句话说,数据目录内包含详细的表示数据库系统本身所关切的各种对象。

所以,我们也可以将数据目录视为是数据库的数据库。

6.效率

在数据库中可以使用不同的存取程序来执行相同的存取动作,而不同的存取程序会有不同的执行效率。

DBMS必须提供效率最佳化功能,使所有的数据存取需求能够以最佳化的效率来执行。

这个最佳化的程序是由DBMS中的重要组件Optimizer来决定的。

因此,当用户在存取数据库的内容时,只要设置他们想要取得什么数据,而不需要指定如何去取得这些数据的程序,数据库系统将会自动以最佳化的程序来执行数据存取动作。

3-3关系型数据库

关系型数据库开始于1970末期至1980初,截至目前为止市面上已有数百种的关系型系统,已成为最通用的数据库系统。

到底什么是关系型系统呢?

简单地说,关系型数据库是以表(Table)的类型将数据提供给用户,而用户的数据存取动作都可以说是利用旧的表来产生新的表。

3-3-1 数据的表示方法

关系型系统必须符合数据库以表类型提供用户的需求,这里的表是关系型系统的逻辑结构,而非实体结构。

实际上在实体层中,系统可以使用任何的一般存储结构,如循序文件、索引、链接等。

而在逻辑层中,则是将这些实体层结构进行对应,并建立成表。

前面所说的逻辑结构,只对ANSI/SPARC结构中的概念层与外部层有作用,对于内部层而言逻辑结构不具有任何意义。

所以,在概念层与外部层中数据库可能是关系型的,而在内部层则绝对不是关系型的。

在关系型数据库中,整个信息内容只有一个表示方式,那就是明确的数据值。

也就是说,数据库内所有的数据都是Atomic,这里的Atomic是指具有意义的数据的最小单位,因此,表中单一字段对应位置内存储的一定是单一的数据值,而不会是一群数据。

比较特别的是,在关系型数据库中,是以表间相同的字段值来表示表的关联性,而不是在表中存储指针数据,将一个表连接到另一个表。

如图3-3所示,厂商数据与供应数据利用厂商数据字段进行关联,将两个表中存储相同厂商代号的数据连接在一起。

图3-3厂商数据与供应数据两个表做关联

3-3-2 表

一般来说,我们可以将数据库的结构分为数据库DataBase、表Table以及记录Record三层。

在一个数据库内可包含多个表,而每个表内则存储着数条记录。

当我们设计一个数据库程序时,通常会将所有在程序使用到的表存放在同一个数据库内,如图3-4所示。

图3-4数据库结构图

所谓的表是指直接由一个数据文件读出的完整数据,也就是代表实际存储的表本身,它通常被视为是一个特定信息内容的数据集合,如下图为“厂商数据”表画面,在这个表中存储了厂商数据有关的信息,如图3-5所示。

图3-5表画面

基本上,我们可以将表想成一个二维数组,表中的每一行代表一条记录,而每一列则代表一个字段,例如在上图的“厂商数据”表中存储了3条记录,而每一条记录都是由3个字段所构成的,这3个字段分别代表厂商代号、厂商名称、统一编号信息。

当我们在创建一个表时,必须先考虑这个表的主要用途以及它所必须包含的信息,然后再将这些信息分别定义成不同的字段。

不同的数据库系统所提供的字段设置项目不同,基本上字段的设置内容包括有字段名称、数据类型、长度、允许空等项目。

根据不同的字段特性,可以为字段指定适当的数据类型,对于需存储文字数据的字段应定义为文字类型,而对于内容只有数字或数据内容,需做数值运算的字段则应定义为数值类型。

3-3-3 键

在关系型数据库中,表间具有数据相关性,为维护数据的完整性,避免与表数据修改后丧失其关联性,在表中定义适当的主键(PrimaryKey)与外键(ForeignKey),通过定义键维护表间的关联性。

主键(PrimaryKey)是能辨识记录的最小字段组,换句话说就是表的最小IdentifyKey。

例如在客户表中,每一条客户数据有其个别的客户代号,通过客户代号的内容,就可以直接找到唯一的一条客户记录,故客户代号可以是客户表的主键。

被设为PrimaryKey的字段,其内容值必须具有唯一性且不能是空白。

外键(ForeignKey)是指表中指向于其他表PrimaryKey的字段,若被参考的PrimaryKey包含有多个数据行,则ForeignKey也必须包含有同样个数的数据行,与PrimaryKey字段一一对应。

3-3-4 表索引

在表中可以为某些字段定义索引,这个索引文件内存储着排序汇整后的字段数据内容与对应在表中的位置。

当我们要对某一字段执行数据查询操作时,可以通过该字段的索引文件找到数据在表中的位置,再取得查询的结果。

图3-6字段索引

由于通常表的索引文件会比表本身小,所以一般来说通过索引搜寻数据的速度会比直接在表上查询的速度快,不过相对的建立索引文件会占用磁盘空间,且数据更新的速度可能会较慢。

在表中为常用来查询的字段做索引文件,可以加速查询的动作,这对于包含有大量数据的表而言非常重要。

不过若是经常同时对两个字段的内容进行搜寻,则必须将两个字段的内容制作成一个索引,而不是分别各自制作各自的索引。

3-3-5 视图

当我们编写数据库程序时,经常会利用Select语句将一个或数个表的内容筛选列示出来,例如在成绩管理系统中需要列出所有总平均不及格的学生,这种通过数据选取或筛选动作而产生的虚拟表就称为视图View。

View可以由多个数据文件合并出来,或是从一个数据文件取出部分数据或部分字段所构成的虚拟表。

由于View并不像Table在数据库中是独立存在的,而且View的内容很可能会与多个表有关,因此,View可执行的动作会受到限制,用户只能对View执行数据查询的操作。

图3-7厂商数据表及View

View只是在数据库管理系统中存储定义内容,并不是真的以表存在,因此,当我们对View执行数据查询时,并无法直接操作,而必须先将查询指令进行转换。

我们可以将常用的窗体查询定义成View存储于数据库内,在程序中需要列出定义为View的数据时,只需在程序中调用执行该View的名称,即可得到所需要的数据内容。

下图为SQLServer的视图属性窗口画面,在文本框中用户可以在CreateView语句后设置View名称,在AS语句后设置视图的内容(Select语句)。

图3-8视图属性画面

3-3-6 存储过程

当我们开发数据库程序时,经常会应用到SQL语法对数据库的内容进行存取,一般都会将这些存取数据库的动作直接写在程序中。

如果数据库的内容是提供给多个程序使用或是需要以不同的程序开发相同的软件时,就必须在每一个程序中重复编写SQL语句,而且一但要修改,也必须到每一个程序中修改。

因此在数据库中允许我们将执行的操作直接定义在数据库中,编写程序时只要调用该数据库程序即可执行程序的内容,感觉上与程序模块化相似。

这样将数据库的处理动作定义在数据库服务器端不但能够将数据存取的动作集中化处理维护方便外,更能加速数据库存取动作的执行效率,因为数据库服务器会对这些服务器端的程序先进行编译。

所有执行于数据库的动作都可以定义存储为存储过程(StoredProcedure),而且在一个存储过程中可以包含多个SQL指令,也可以定义多个变量来连接多个处理动作。

我们可以将数据库中通常执行的数据处理动作定义为存储过程,以提供应用系统的调用,同时也可通过参数的设置使程序的执行更加具有弹性。

图3-9存储过程画面

上图为SQLServer“存储过程的属性”窗口,在文本框中用户可以在CreateProcedure语句后设置存储过程的名称,在CreateProcedure与AS关键词间可以声明此存储过程的参数,参数可以是传入参数也可以是传出参数,若为传出参数则需在参数声明时加上OUTPUT字样,而在AS关键词后则是设置该存储过程所有执行的数据库存取动作。

3-3-7 触发器

触发器(Trigger)触发程序也是一种存储过程,只不过它会在数据库被修改时自动执行,这与对象的事件有点相似。

在一个表中只能有一个Insert、一个Delete及一个Update触发器,这三种触发器分别在新增数据、删除数据及改变数据后触发运行,可以将这三种触发过程定义在同一个Trigger中,也可以各自独立。

下图为SQLServer的触发器属性窗口画面,用户可以在CREATETRIGGER关键词后设置触发程序的名称,在ON关键词后设置引用这个触发程序的表名称,在FOR关键词后设置引用这个触发程序的事件(Insert,Delete或Update),若同时引用于一个以上的事件需用逗号做分隔,而在AS关键词后则是设置该存储过程所有执行的数据库存取动作。

图3-10Trigger画面

3-3-8 数据目录

数据目录(Catalog)是指存储数据库所有Schema以及所有对应的地方,它包含各种与数据库系统本身有关的数据。

在关系型数据库中,Catalog也是以表的形式存在,这种表称为系统表。

基本

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1