第一章绪论文档格式.docx

上传人:b****5 文档编号:20407513 上传时间:2023-01-22 格式:DOCX 页数:28 大小:376.11KB
下载 相关 举报
第一章绪论文档格式.docx_第1页
第1页 / 共28页
第一章绪论文档格式.docx_第2页
第2页 / 共28页
第一章绪论文档格式.docx_第3页
第3页 / 共28页
第一章绪论文档格式.docx_第4页
第4页 / 共28页
第一章绪论文档格式.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

第一章绪论文档格式.docx

《第一章绪论文档格式.docx》由会员分享,可在线阅读,更多相关《第一章绪论文档格式.docx(28页珍藏版)》请在冰豆网上搜索。

第一章绪论文档格式.docx

main()

{FILE*fp;

fp=fopen(“file1.c”,”w”);

fputs(“chenwei”,fp);

putw(20000101,fp);

putw(20,fp);

fputs(“Linzi”,fp);

putw(20000102,fp);

putw(21,fp);

fclose(fp);

}

如要显示文件中数据,可使用例1.2所示程序:

例1.2

#include“stdio.h”

#defineSIZE2

structstudent_type

{charname[8];

intnum;

intage;

}stud[SIZE];

{inti;

FILE*fp;

fp=fopen(“file1.c”,”r”);

for(i=0;

i<

SIZE;

i++)

{fread(&

stud[i],sizeof(structstudent_type),1,fp);

printf(“%8s%8d%4d%\n”,stud[i].name,stud[i].num,stud[i].age);

}

如果要按一定条件显示一定范围的数据,上述程序需略作修改:

对每一组数据逐一判别是否满足要求,再按预定范围显示。

如果要修改文件中的数据,得首先使用类似于例1.2的程序,以读的方式打开文件,将文件中数据读入到变量中,修改变量中数据的值,再以类似于例1.1的程序,以写的方式打开文件,将修改后的数据输回到文件中。

数据处理全过程如图1.1所示。

 

使用数据文件的优点是数据与程序分离,分别采用两个文件各自存放数据与程序,我们称之为实现了数据的物理独立。

利用文件系统解决程序和数据文件的存取操作,程序员只需关心文件的逻辑结构,无需关心如何转为物理存储,这就使程序设计变得简单。

而且可对数据文件进行管理,单独对数据进行使用或维护。

不同的程序只要以读的方式打开数据文件,并按数据存放的格式将数据取出,便可使用这些数据,在一定的范围内可以做到数据为不同程序所共享。

数据可长期保存,大大方便了用户的使用。

在这一阶段,文件越来越多样化和结构化,索引文件方便了直接存取,链接文件、线性表文件等不同文件可适应不同应用需要,倒排表文件可作多字检索等。

使用数据文件的缺点是如果要使用数据和维护数据,必须知道数据存放的格式,即要知道数据存取的逻辑结构。

例如在前述例1.2中,必须知道共存放了二个人的记录,且每个人记录包括三个数据:

姓名,学号和年龄。

其中第一个数据是字符串类型数据,宽度为8;

第二、三个数据是整型数据,宽度为8和4。

数据个数、数据类型与宽度必须与数据文件中的数据一一对应,否则,程序所读出的数据将会出错。

我们分析其原因是数据结构和程序语句紧密相关,或者说数据和程序之间缺少数据逻辑独立性。

在实际系统中,由于数据值及逻辑结构都可能不断变化,如果每次变化都要求所有应用程序相应修改,其工作量之大实在令人无法承受。

而且,每个程序都可取用全部数据,即所有人使用数据的权限都相同,那就完全无安全性可言。

数据文件中除了数据,不再有其他信息,也就无法对数据作统一的控制和管理。

基于以上原因,这样的系统中数据共享就只能局限在一定范围内。

同一数据常需在多个地方同时存放,数据冗余度大,且这种冗余无法有效控制。

它一方面浪费存储空间,降低运行效率;

降低系统可靠性、正确性,降低系统价值,对系统进行修改、维护都麻烦。

同一数据在多个地方同时存放,那么同一数据在不同存放地的值可能不相同,称为数据不一致,将会降低信息价值,甚至造成重大损失。

从数据处理需求来看,在这一阶段,计算机辅助管理的内容开始向全系统渗透,应用面愈来愈广,部门的堡垒开始打破,数据不再只是用于计算、统计,而且作为信息的载体而被存储,成为人们宝贵的信息资源,用于检索、统计、预测及决策。

要求对人工管理系统广泛予以模拟;

要求收集并保存大量的数据;

要求不断对历史上收集的数据进行筛选、分析和提炼;

要求为决策提供大量的数据,并产生不同决策方案以供决策者参考;

要求随时将各类信息向各方面发布等等。

这就要求系统效率更加高。

要求实现更大范围的数据共享。

数据共享是指同一数据能为不同时间运行的相同或不同程序所使用;

同一数据能在同一时间为不同用户和不同程序所使用。

正是由于计算机科学与技术的发展和应用需求的推动,数据库系统管理软件应运而生。

前述例1.1,例1.2的工作变得十分简单。

例如在VFP中,为完成前述任务,首先要建立数据存储结构,可使用下述命令:

CREATETABLEfile1(namec(8),numi,agei)

如要存入两个学生数据,可使用下述命令:

INSERTINTOfile1VALUES(“chenwei”,20000101,20)

INSERTINTOfile1VALUES(“linzi”,20000102,21)

如对两个学生数据只准备输入姓名,其他留空,可用命令:

INSERTINTOfile1(name)VALUES(“chenwei”)

INSERTINTOfile1(name)VALUES(“linzi”)

请注意,在输入姓名时,与C语言程序不同,姓名的值的宽度不到预定的8个字符宽时,无需加填空格!

如要显示file1中的内容,可使用下述命令:

SELECT*FROMfile1

如要求按一定条件显示某一定范围内内容,例只显示20岁的学生姓名和年龄,可使用下述命令:

SELECTname,ageFROMfile1WHERE(age=20)

与C语言编写的程序相比,我们看到采用数据库软件后,有以下优点:

1.程序极为简单,在C语言中需要大量语句才能实现的功能,目前仅一两句即可完成。

今后我们还将看到,对数据的维护也只需要一两个语句即可实现。

2.程序中不需要了解数据的数量和顺序,只需要知道你准备操作的那部分数据的名字及数据类型。

3.可直接对数据的某一部分分量进行操作,而无需知道全面的数据结构、其他分量的个数、名字和数据类型。

4.只要初始定义的数据结构中你所需的那一部分分量的名字和数据类型不发生变化,你的程序将无需随数据结构改变而修改。

这些优点为用户和程序员均带来方便,也使数据广泛共享真正成为可能。

数据库系统管理软件是如何实现上述功能的呢?

我们可以看到,在执行了上述命令之后,在当前目录中产生了文件“filel.dbf”。

用debug对之进行观察,其内容如图1.2(注:

使用C:

\windows\command\debugfilel.dbf,再输入-d,即见):

图1.2VFP实现数据表文件DBF内容的二进制表示

其中1290:

0100H至1290:

0180H单元存放数据逻辑结构有关信息,1290:

0288H起存放用户数据。

从1290:

0288H至1290:

0299H单元存放第一个学生数据,总共占据17单元,其中第一个字节(20H)将用作删除标志,其他16字节为有效数据,前8个字节存放name的内容(“chenwei”的ASCII码),1280:

0291H至1290:

0294H四个字节存放num的内容(20000101=01312D65H),最后四个字节存放age的内容(20=14H)。

第二个学生数据也占据17个字节,在VFP中所有记录均以等长形式顺序存放。

1290:

011FH单元对数据逻辑结构进行描述,1290:

0104H单元数据02H表示数据记录数为2。

0108H单元数据88H表示结构信息占据总单元数。

010AH单元11H(十进制17)表示一条记录占据单元数,即记录长度。

011CH单元数据00H表示无备注数据和通用数据(否则数据标志为02H)。

0120H至1290:

013FH单元对学生的第一个数据(称为数据项或字段)name进行描述。

前四个字节4E414045是字段名“NAME”的ASCII码,1290:

012CH单元数据43H为name的数据类型“C”的ASCII码,之后01H表示该字段在一条记录中的起始位,1290:

0130H单元数08H表示该字段存储宽度为8个字节,1290:

0132H单元数据00表示以非二进制形式存放的数据宽度,1290:

0152H单元数04H表示num(整数型)以四位二进制数存放。

0291H单元起存放四个数据652D3101表示数据20000101(十六进制数为01312D65H)。

0180H单元数0D表示结构描述结束。

从以上格式可见,VFP数据库数据存储文件以一般数据文件为基础,把文件分成两部分,一部分存放数据结构的描述,另一部分存放数据,从而初步实现数据与数据逻辑结构描述的分离。

初步实现了数据的逻辑独立。

由于事先存储了关于结构的描述,程序员编写程序时就无需了解数据的全局结构,而只需关心他所涉及的那部分数据项,其他事可利用数据库管理系统软件(DBMS)例如VFP来帮助完成。

DBMS可以分析数据全局与各数据项结构,分析一条记录总长度,及每一个数据项的名字、类型、从第几个字节开始及共占据多少宽度等等,之后就可自动从数据区中根据需要提取数据。

这样一些繁锁的工作由软件自动完成,我们程序设计的工作就将大大简化,数据结构的变化对程序的影响也将大大减少。

由于有对数据结构整体描述的文件,在其中还可加入其他内容,例如关于记录的标识属性,关于一个数据项数据的合理范围,关于数据使用权限等等,可借之实现对数据存储使用、传送的控制,使数据更正确与安全的使用。

VFP中所有数据按记录以等长形式顺序存放,各数据项在各记录中占据宽度相同,这样一种结构可形象看作一个由行和列构成的二维表格,每一数据项为一列,每一条记录为一行,以这种形式组织数据的数据库,我们称为关系数据库。

典型的关系数据库表如表1.1所示。

传统数据库除关系数据库外,还有层次数据库和网状数据库。

不同数据库的数据结构的存储方式包括结构定义的方式都不相同。

表1.1典型的关系数据表

Name

Num

age

Chenwei

20000101

30

Lin

200102

25

1.1.2数据库技术概述

数据库指有组织地、动态地存储的相互关联的数据的集合。

设计一个数据库应用系统,首先要了解全系统数据和功能的需求;

对全系统涉及的所有数据分析和整理,分析数据之间的联系,用一定的数据模型来表示;

再求得系统全局的数据结构,用一定语言加以表示及定义;

注意考虑数据的存放位置、数据量大小、对安全保密性、数据正确性、防错纠错措施等方面的要求,设计并在计算机中建立数据库结构;

在此基础上开发相应维护和使用数据的应用程序。

在设计程序时要注意使用方便,操作简单,系统高效可靠。

要尽可能减少数据冗余。

所谓数据冗余,是指同一数据在多个不同的地方存放。

例如,同一个人的基本情况,在人事管理系统中存放,同时在财务部门也存放,在生产管理部门也存放等等。

它不仅导致数据量的增加,使系统处理速度变慢,效率降低;

而且易发生错误,多一个数据,就需要多一套维护程序,多一些发生错误的可能,会影响全系统的性能。

在实际设计中,应尽量减少数据冗余,控制冗余度。

需要正确定义全局数据结构。

用某一种数据库语言对全局数据结构的定义称为这种数据库的概念模式,简称模式。

例如前面关于“学生”数据,定义为二维表结构,包括name,num,age三个数据分量,分别为字符型、整型、整型数据类型,所占宽度分别为8、4、4个字节,这是对关系数据库“学生”的模式定义的内容之一。

关系数据库的模式除包括数据库名,数据结构方式,记录的构成等内容外,还包括记录的标识数据分量,数据范围及使用权限等等的内容。

在关系数据库中标识数据分量指能唯一标志一条记录的数据分量。

对模式常简单表示为:

模式名(数据项1,数据项2,……),例:

学生(name,num,age)。

上述数据分量我们称之为字段,数据分量名称为字段名,每条记录该数据分量的值称为字段值。

标识数据分量称关键字。

要增强数据的共享性,尽量减少数据冗余,还需要进一步提高数据的逻辑独立性,减少应用程序对全局性数据结构的依赖,让应用程序只和局部数据结构相关,为此可进一步定义概念模式的逻辑子集,称为子模式。

例如VFP中,设我们已有学生(学号,姓名,年龄)和成绩(学号,课名,分数)两个表,可以建立视图SV,其功能是列举所有不及格的学生。

用一条语句实现:

CREATEVIEWSVASSELECT学生.姓名,成绩.课名,成绩.分数FROM学生,成绩(WHERE学生.学号=成绩.学号AND成绩.分数<

60)

有了这个视图之后,可将SV视同一般表,通过它对源表“学生”和“成绩”进行操作。

由此例可见,视图实现了两个源表的联系,相当于源表模式的子集。

我们还看到,它使用的字段名与源表不同。

这样,以后若源库结构发生变化,包括上述相应字段名变化,我们可修改视图定义来局部适应这些变化,而不需要修改程序。

视图和表不同之处在于,它并没有真正地存储数据,它所存取的数据必须依附于所关联的数据表,它是一种虚的映射关系。

还有一些数据库,在关于全局数据结构的子集定义中允许改变对应的数据类型、宽度,还可加入关于权限控制方面的内容,这种用一定数据库语言对局部数据结构的描述称为子模式或称外模式。

子模式是对用户所看到的数据结构的描述,用户看到的数据结构我们称为用户视图或外部视图或称I/O视图,这些数据库要求所有应用程序只能基于子模式编程。

子模式使程序对全局数据结构变化的适应性进一步加强,而且可在各个局部范围内加强数据的安全性,对使用数据给予更强的控制。

在一些数据库中,关于数据结构的定义还需加入所存储文件名及类型、数据存储形式(顺序文件或随机文件等)、采用的指针、索引文件的结构乃至于存储设备,物理块大小等,这些有关存储方式、物理结构等的描述称为存储模式或内模式,数据库通过存储模式再借助于操作系统实现对数据存储文件的操作。

以上形式将数据库分为不同层次,各个层次面对不同类型的人员。

最终用户面对的是应用程序,他所见到的数据形式称为I/O视图。

例如人事部门用户面对有关人员资料数据的程序,工资部门用户涉及员工工资部分数据,行政管理部门用户涉及生产、行政等方面数据的程序等。

部门程序员面对I/O程序及子模式,例如人事部门程序员关心的是员工编号,姓名,性别,出生日期及职务,职称,基本工资,职务工资,福利费,公积金等数据;

工资部门程序员关心人事部门中的职工编号,姓名,参加工作日期,职务,职称,基本工资,职务工资,福利费,公积金,生产部门考勤数据和行政部门的有关房租水电等数据。

程序员所见到的数据库形式称外部视图。

数据库管理员DBA面向数据全局结构,即概念模式和存储模式,包括了前述所有部门,各类人员所有数据的按一定规则的集合。

系统管理员关心的是各个数据库及其它文件在系统中的存储和管理,面对的是各个数据库的存储模式,他看到的部分称内部视图。

以上划分视图层次的方案基于美国ANSI/X3/SPARC(美国国家标准协会的计算机与信息处理委员会中的标准计划与需求委员会)数据库小组关于三层结构:

外部级,概念级,内部级的报告,图示见图1.3。

前面我们通过VFP中数据表文件的构成说明了在数据库中,将数据库内容与逻辑结构的描述分开存储,实现了两者的分离,现在又进一步提出了数据库的三级模式。

应用程序中使用的有关数据库中数据的名字经子模式翻译解释后与概念模式中的命名对应,称为模式到程序的逻辑映像,模式定义的数据结构通过存储模式并经操作系统解释与实际操作数据的存储相对应,称为物理映像。

模式到程序的逻辑映像使程序与数据逻辑结构进而与数据尽可能分离,当程序使用数据的要求发生变化时不一定要求改变数据的全局结构,反过来数据结构在一定范围内变化时,通过子模式的调节,不一定要求改变程序,我们称之为数据的逻辑独立性。

当数据实际存储位置等物理存储结构改变时,可由存储模式适应这种变化,而不要求改变数据的全局结构,更不要修改程序,我们称之为数据的物理独立。

数据的逻辑独立与数据的物理独立合称为数据独立。

数据独立是数据共享的必备条件。

而数据共享又为减少数据冗余、保证数据的一致性提供了条件。

数据库系统还应有统一的数据控制功能,包括数据的安全性控制和数据的完整性控制。

数据的安全性指不同用户各控制在一定权限范围内使用数据。

数据的安全性控制的目的是防止数据遭到人为破坏或泄密。

数据的完整性指数据的正确性,有效性和相容性。

数据的完整性控制指在数据库的使用过程中,防止错误或不恰当的数据进入数据库。

有效性是指数据的合法性。

数据是现实世界中实际存在的客观事物、概念或事件的反映和抽象,现实世界中客观存在的可标识的事物、概念或事件称为实体。

如人,部门、课程,商品,记账活动等。

每个实体有不同特性,用不同的属性来描述。

对人一般可用代号,姓名,性别,出生日期,所在单位等属性描述,对于具体的人,关于上述属性又可用具体的数据来描述,例如20000101,吴平,男,86年2月5日,电计系等,称为属性值。

对应一个实体的所有属性值的集合称记录。

具有相同属性描述的实体的集合称为实体集,一个实体集的属性名的集合称为实体型,一般用实体名及属性名来抽象地表示实体型。

例如学生可用学号、姓名、性别等去描述,学生实体型可表示为:

学生(学号、姓名、性别)。

课程可用课程号、课程名、课程大纲等去描述,课程实体型可表示为:

课程(课程号,课程名,课程大纲)。

实体都应是可以标识的,为了数据管理方便我们常利用某一个属性或利用按一定规则设计的代码来唯一区别一个实体,我们称之为关键字(主码)。

例如,对于人,如一个集体中无同名同姓的人存在,姓名就作为关键字。

但这个前提条件常不成立,我们就设计以职工号,学号等来标识一个人,职工号、学号就作为关键字。

是否存在关键字、关键字在所有数据中是否能唯一标识一条记录常作为数据有效的标准之一,称之为实体完整性。

相容性是指表示同一个事实的两个数据应当相同。

在不同实体集之间有时有特定的联系。

例如学生要学习许多课程,每一门课程可能有许多学生学习,每个学生学习每门课程最终有一成绩。

我们常为它们建立一定联系。

例如在关系数据库中,用实体型成绩(学号,课程号,分数)来描述学生实体集与课程实体集之间的联系。

在这个关系集和学生关系集中,都存在“学号”数据,我们要求对于“成绩”中每一条记录中的学号必须在学生实体集中存在。

在关系数据库中,为了实现表与表之间的联系,有时需将一个表的主码作为数据之间联系的纽带放到另一个表中,这些在另外一个表中起联系作用的属性称为“外关键字”(“外码”)。

通过外码实现的关系之间的约束称为参照完整性。

在学生与成绩两个表中,成绩表中的学号要不为空,要不在学生表中必须存在,否则我们便认为这个关系是无意义的、学生和成绩两个表之间不相容,学号称为成绩表的“外关键字”(或称为“外码”)。

所谓正确性是指数据应当客观真实地表现周围事物。

每个属性的数据在实际生活中常具有一定范围,属性的取值范围称作域。

如性别只能是男或女,{男,女}是性别域;

年龄字段定义成整型,但是作为一般人来讲,不能超过150这个范围,也不可能为负数,{0-150}是年龄域等。

数据应当满足所规定的有效范围。

数据库技术可识别一个数据是否在一定范围内,在限定范围内的数据被认为是正确的,不在限定范围内的数据输入则是错误的。

一些数据库可通过结构定义,或通过触发器程序的设计及其他方式来确保只允许在正确范围内的数据录入。

1.2数据库的数据结构及存储结构

1.2.1数据结构

传统的数据库有三类:

层次数据库、网状数据库和关系数据库。

它们分别采用树、图和线性表三种不同数据结构。

各有其适应性。

例1.3:

一个学校有许多系:

电系、机系、化工系……每个系通过系代码,系名,系地址,系电话,系专业设置,……等数据来描述。

每个系下辖多个教研室。

如电系下辖计算机,电子信息,自动控制等教研室;

机系下辖机械制造,质检,制图等教研室;

化工系下辖化工材料,有机化工等教研室。

每个教研室有室代码,室名,室电话等数据表现其属性。

每个教研室负责管理老师,学生。

假设计算机教研室有张、王、林等老师,有A1、B1、C1等学生。

电子信息教研室有肖、吴、陈等老师,有A2、B2、C2、D2等学生。

自动控制教研室有廖、章等老师,有A3、B3等学生,机械制造教研室有任、钟、王等老师,有A4、B4、C4等学生。

质检教研室有明、任等老师,有A5、B5等学生,制图教研室有王老师,有A6、B6、C6等学生,化工材料教研室有李、吴等老师,有机化工教研室有陈、张等老师,有A7等学生。

教师用职工号、姓名、性别等描述,学生用学号、姓名、性别等描述。

如果系统常要讨论的是某个系有哪些教研室,了解有关教研室的情况、老师的情况、学生的情况,以及某个教研室有哪些老师,有哪些学生等问题。

可以使用链表将所有数据如图1.4连接进行存储,其中每个框表示一个实体型,包括各有关数据项。

电系→计算机教研室→张→王→林→A1→B1→C1→电子信息教研室→肖→吴→陈→A2→B2→C2→D2→自动控制教研室→廖→章→A3→B3→机系→机械制造教研室→任→仲→王→A4→B4→C4→质检教研室→明→任→A5→B5→制图教研室→王→A6→B6→C6→化工系→化工材料教研室→李→吴→有机化工教研室→陈→张→

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

当前位置:首页 > 高等教育 > 理学

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

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