首页数据库数据库实验四,数据库实验总结

数据库实验四,数据库实验总结

编程之家2023-10-1886次浏览

大家好,今天小编来为大家解答数据库实验四这个问题,数据库实验总结很多人还不知道,现在让我们一起来看看吧!

数据库实验四,数据库实验总结

数据库的发展简史

使用计算机后,随着数据处理量的增长,产生了数据管理技术。数据管理技术的发展与计算机硬件(主要是外部存储器)系统软件及计算机应用的范围有着密切的联系。数据管理技术的发展经历了以下四个阶段:人工管理阶段、文件系统阶段、数据库阶段和高级数据库技术阶段。

数据管理的诞生

数据库的历史可以追溯到五十年前,那时的数据管理非常简单。通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片。而数据管理就是对所有这些穿孔卡片进行物理的储存和处理。然而,1950年雷明顿兰德公司(Remington Rand Inc)的一种叫做Univac I的计算机推出了一种一秒钟可以输入数百条记录的磁带驱动器,从而引发了数据管理的革命。1956年IBM生产出第一个磁盘驱动器—— the Model 305 RAMAC。此驱动器有50个盘片,每个盘片直径是2英尺,可以储存5MB的数据。使用磁盘最大的好处是可以随机存取数据,而穿孔卡片和磁带只能顺序存取数据。

1951: Univac系统使用磁带和穿孔卡片作为数据存储。

数据库系统的萌芽出现于二十世纪60年代。当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。传统的文件系统已经不能满足人们的需要,能够统一管理和共享数据的数据库管理系统(DBMS)应运而生。数据模型是数据库系统的核心和基础,各种DBMS软件都是基于某种数据模型的。所以通常也按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。

最早出现的网状DBMS,是美国通用电气公司Bachman等人在1961年开发的IDS(Integrated Data Store)。1964年通用电气公司(General ElectricCo.)的Charles Bachman成功地开发出世界上第一个网状DBMS也即第一个数据库管理系统——集成数据存储(Integrated Data Store IDS),奠定了网状数据库的基础,并在当时得到了广泛的发行和应用。IDS具有数据模式和日志的特征,但它只能在GE主机上运行,并且数据库只有一个文件,数据库所有的表必须通过手工编码生成。之后,通用电气公司一个客户——BF Goodrich Chemical公司最终不得不重写了整个系统,并将重写后的系统命名为集成数据管理系统(IDMS)。

数据库实验四,数据库实验总结

网状数据库模型对于层次和非层次结构的事物都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍。在数据库发展史上,网状数据库占有重要地位。

层次型DBMS是紧随网络型数据库而出现的,最著名最典型的层次数据库系统是IBM公司在1968年开发的IMS(Information Management System),一种适合其主机的层次数据库。这是IBM公司研制的最早的大型数据库系统程序产品。从60年代末产生起,如今已经发展到IMSV6,提供群集、N路数据共享、消息队列共享等先进特性的支持。这个具有30年历史的数据库产品在如今的WWW应用连接、商务智能应用中扮演着新的角色。

1973年Cullinane公司(也就是后来的Cullinet软件公司),开始出售Goodrich公司的IDMS改进版本,并且逐渐成为当时世界上最大的软件公司。网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而后来出现的关系数据库较好地解决了这些问题。

1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础。尽管之前在1968年Childs已经提出了面向集合的模型,然而这篇论文被普遍认为是数据库系统历史上具有划时代意义的里程碑。Codd的心愿是为数据库建立一个优美的数据模型。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。但是当时也有人认为关系模型是理想化的数据模型,用来实现DBMS是不现实的,尤其担心关系数据库的性能难以接受,更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。为了促进对问题的理解,1974年ACM牵头组织了一次研讨会,会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。这次著名的辩论推动了关系数据库的发展,使其最终成为现代数据库产品的主流。

1969年Edgar F.“Ted” Codd发明了关系数据库。

1970年关系模型建立之后,IBM公司在San Jose实验室增加了更多的研究人员研究这个项目,这个项目就是著名的System R。其目标是论证一个全功能关系DBMS的可行性。该项目结束于1979年,完成了第一个实现SQL的 DBMS。然而IBM对IMS的承诺阻止了System R的投产,一直到1980年System R才作为一个产品正式推向市场。IBM产品化步伐缓慢的三个原因:IBM重视信誉,重视质量,尽量减少故障;IBM是个大公司,官僚体系庞大,IBM内部已经有层次数据库产品,相关人员不积极,甚至反对。

数据库实验四,数据库实验总结

然而同时,1973年加州大学伯克利分校的Michael Stonebraker和Eugene Wong利用System R已发布的信息开始开发自己的关系数据库系统Ingres。他们开发的Ingres项目最后由Oracle公司、Ingres公司以及硅谷的其他厂商所商品化。后来,System R和Ingres系统双双获得ACM的1988年“软件系统奖”。

1976年霍尼韦尔公司(Honeywell)开发了第一个商用关系数据库系统——Multics Relational Data Store。关系型数据库系统以关系代数为坚实的理论基础,经过几十年的发展和实际应用,技术越来越成熟和完善。其代表产品有Oracle、IBM公司的 DB2、微软公司的MS SQL Server以及Informix、ADABAS D等等。 1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。SQL集成实现了数据库生命周期中的全部操作。SQL提供了与关系数据库进行交互的方法,它可以与标准的编程语言一起工作。自产生之日起,SQL语言便成了检验关系数据库的试金石,而SQL语言标准的每一次变更都指导着关系数据库产品的发展方向。然而,直到二十世纪七十年代中期,关系理论才通过SQL在商业数据库Oracle和DB2中使用。

1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。SQL标准有3个版本。基本SQL定义是ANSⅨ3135-89,“Database Language- SQL with Integrity Enhancement”[ANS89],一般叫做SQL-89。SQL-89定义了模式定义、数据操作和事务处理。SQL- 89和随后的ANSⅨ3168-1989,“Database Language-Embedded SQL”构成了第一代SQL标准。ANSⅨ3135-1992[ANS92]描述了一种增强功能的SQL,叫做SQL-92标准。SQL-92包括模式操作,动态创建和SQL语句动态执行、网络环境支持等增强特性。在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。

1976年IBM E.F.Codd发表了一篇里程碑的论文“R系统:数据库关系理论”,介绍了关系数据库理论和查询语言SQL。Oracle的创始人Ellison非常仔细地阅读了这篇文章,被其内容震惊,这是第一次有人用全面一致的方案管理数据信息。作者E.F.Codd 1966年就发表了关系数据库理论,并在IBM研究机构开发原型,这个项目就是R系统,存取数据表的语言就是SQL。Ellison看完后,敏锐意识到在这个研究基础上可以开发商用软件系统。而当时大多数人认为关系数据库不会有商业价值。Ellison认为这是他们的机会:他们决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央情报局做过的项目名。几个月后,他们就开发了Oracle 1.0。但这只不过是个玩具,除了完成简单关系查询不能做任何事情,他们花相当长的时间才使Oracle变得可用,维持公司运转主要靠承接一些数据库管理项目和做顾问咨询工作。而IBM却没有计划开发,为什么蓝色巨人放弃了这个价值上百亿的产品,原因有很多:IBM的研究人员大多是学术出身,他们最感兴趣的是理论,而非推向市场的产品,从学术上看,研究成果应公开发表论文和演讲能使他们成名,为什么不呢?还有一个很主要的原因就是IBM当时有一个销售得还不错的层次数据库产品IMS。直到1985年IBM才发布了关系数据库DB2,Ellision那时已经成了千万富翁。Ellison曾将IBM选择Microsoft的MS-DOS作为IBM-PC机的操作系统比为:“世界企业经营历史上最严重的错误,价值超过了上千亿美元。”IBM发表R系统论文,而且没有很快推出关系数据库产品的错误可能仅仅次之。Oracle的市值在1996年就达到了280亿美元。随着信息技术和市场的发展,人们发现关系型数据库系统虽然技术很成熟,但其局限性也是显而易见的:它能很好地处理所谓的“表格型数据”,却对技术界出现的越来越多的复杂类型的数据无能为力。九十年代以后,技术界一直在研究和寻求新型数据库系统。但在什么是新型数据库系统的发展方向的问题上,产业界一度是相当困惑的。受当时技术风潮的影响,在相当一段时间内,人们把大量的精力花在研究“面向对象的数据库系统(object oriented database)”或简称“OO数据库系统”。值得一提的是,美国Stonebraker教授提出的面向对象的关系型数据库理论曾一度受到产业界的青睐。而Stonebraker本人也在当时被Informix花大价钱聘为技术总负责人。

然而,数年的发展表明,面向对象的关系型数据库系统产品的市场发展的情况并不理想。理论上的完美性并没有带来市场的热烈反应。其不成功的主要原因在于,这种数据库产品的主要设计思想是企图用新型数据库系统来取代现有的数据库系统。这对许多已经运用数据库系统多年并积累了大量工作数据的客户,尤其是大客户来说,是无法承受新旧数据间的转换而带来的巨大工作量及巨额开支的。另外,面向对象的关系型数据库系统使查询语言变得极其复杂,从而使得无论是数据库的开发商家还是应用客户都视其复杂的应用技术为畏途。二十世纪六十年代后期出现了一种新型数据库软件:决策支持系统(DSS),其目的是让管理者在决策过程中更有效地利用数据信息。于是在1970年,第一个联机分析处理工具——Express诞生了。其他决策支持系统紧随其后,许多是由公司的IT部门开发出来的。

1985年,第一个商务智能系统(business intelligence)由Metaphor计算机系统有限公司为Procter& Gamble公司开发出来,主要是用来连接销售信息和零售的扫描仪数据。同年, Pilot软件公司开始出售第一个商用客户/服务器执行信息系统——Command Center。同样在这年,加州大学伯克利分校Ingres项目演变成Postgres,其目标是开发出一个面向对象的数据库。此后一年, Graphael公司开发了第一个商用的对象数据库系统—Gbase。

1988年,IBM公司的研究者Barry Devlin和Paul Murphy发明了一个新的术语—信息仓库,之后,IT的厂商开始构建实验性的数据仓库。1991年,W.H. Bill Inmon出版了一本“如何构建数据仓库”的书,使得数据仓库真正开始应用。

1991: W.H.“Bill” Inmon发表了”构建数据仓库”

二十世纪九十年代,随着基于PC的客户/服务器计算模式和企业软件包的广泛采用,数据管理的变革基本完成。数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。Internet的异军突起以及XML语言的出现,给数据库系统的发展开辟了一片新的天地。

数据库实验总结

数据库实验总结【一】

试验内容

1、数据表的建立

基本表《简单的》带有主键

带有外码约束的(外码来自其他表或者本表)

2、数据表的修改

添加删除列

修改列属性类型

添加删除约束(约束名)

元组的添加,修改,删除

删除数据表

试验过程

1、create table student

(

sno char(9) primary key,/*sno是主码列级完整性约束条件*/

sname char(20) unique,/*sname取唯一值*/

ssex char(2),

sage smallint,/*类型为smallint*/

sdept char(20)/*所在系*/

);

create table course

(

cno char(4) primary key,/*列级完整性约束条件,cno是主码*/

cname char(40),

cpno char(4),/*cpno的含义是先行课*/

ccredit smallint,

foreign key(cpno) references course(cno)

/*表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno*/

);

create table sc

(

sno char(9),

cno char(4),

grade smallint,

primary key(sno,cno),

/*主码有两个属性构成,必须作为表级完整性进行定义*/

foreign key(sno) references student(sno),

/*表级完整性约束条件,sno是外码,被参照表是student*/

foreign key(cno) references course(cno),

/*表级完整性约束条件,cno是外码,被参照表示course*/

);

例1、create table s

(

cno varchar(3),/*变长的字符串,输入2个字符就是两个字符不会补空格*/

sname varchar(20),

status int,

city varchar(20),

constraint pk_sno primary key(sno),/*约束条件的名字为pk_sno*/

);

create table p

(

pno varchar(3),

pname varchar(20),

color varchar(3),

weight int,

constraint pk_pno primary key(pno),/*约束条件的名字是pk_pno*/

);

create table j

(

jno varchar(3),

jname varchar(20),

city varchar(20),

constraint pk_jno primary key(jno)/*约束条件的名字为pk_jno*/

);

例2、create table spj

(

sno varchar(3),/*第一个表中的主码*/

pno varchar(3),

jno varchar(3),

qty int,/*数量*/

constraint pk_spj primary key(sno,pno,jno),/*主码由3个属性组成*/

foreign key(sno) references s(sno),

/*表级完整性约束条件,sno是外码,被参照表是s*/

foreign key(pno) references p(pno),

/*表级完整性约束条件,pno是外码,被参照表是p*/

foreign key(jno) references j(jno),

/*表级完整性约束条件,jno是外码,被参照表是j*/

);

2、数据表的更改

在s表中添加一个concat列

alter table s add concat varchar(20)

在s表中删除concat列

alter table s drop column concat

更改s表 concat列的属性把长度由20改为30

alter table s alter column concat varchar(30)

联系方式名字为concat修改属性为唯一的属性名为con_concat

alter table s add constraint con_concat unique(concat)

删除约束关系con_concat

alter table s drop constraint con_concat

/*插入一个元组*/

insert into s valus(‘s1’,’精益’,20,’天津’)/*20不能写成’20’*/

试验中的问题的排除与总结:

1、在创建spj时

有三个实体所以从3个实体中取主码,还有一个数量属性也要写上

主码由那3个主码确定

2、更改一个数据库中数据表时一定要先使该数据库处于正在使用状态

3、constraint

是可选关键字,表示 primary key、not null、unique、foreign key或 check约束定义的开始。约束是特殊属性,用于强制数据完整性并可以为表及其列创建索引。

4、--go可以不加但是要注意顺序注:go--注释提示错误

5、注意添加一个空元素用 null

附 sql备份

--创建一个数据库 student

create database student

go

--在数据库student中创建表student course sc注意顺序

use student

----------------------------------------------------------------

create table student

(

sno char(9) primary key,/*sno是主码列级完整性约束条件*/

sname char(10) unique,/*sname取唯一值*/

ssex char(2),

sage smallint,/*类型为smallint*/

sdept char(20)/*所在系*/

);/*;要加*/

-----------

数据库实验总结【二】

我在sql server索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。

对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个操作。这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。

区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 kb)。这意味着 sql server数据库中每 mb有 16个区。

为了使空间分配更有效,sql server不会将所有区分配给包含少量数据的表。sql server有两种类型的区:

统一区,由单个对象所有。区中的所有 8页只能由所属对象使用。

混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。

通常从混合区向新表或索引分配页。当表或索引增长到 8页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8页,则对该索引的所有分配都使用统一区进行。

为何会这样呢?

其实很简单:

读或写 8kb的时间与读或写 64 kb的时间几乎相同。

在 8 kb到 64 kb范围之内,单个磁盘 i/o传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。

因此,从数学上来讲,当需要传输 64 kb以上的 sql数据时,

尽可能地执行 64 kb磁盘传输是有益的,即分成数个64k的操作。

因为 64 kb传输基本上与 8 kb传输一样快,而每次传输的 sql server数据是 8 kb传输的 8倍。

我们通过一个实例来看有and操作符时候的最常见的一种情况。我们有下面一个表,

create table [dbo].[member]( [member_no] [dbo].[numeric_id] identity(1,1) not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default(getdate()), [expr_dt] [datetime] not null default(dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default(0), [curr_balance] [money] null default(0), [member_code] [dbo].[status_code] not null default(''))

这个表具备下面的四个索引:

索引名细节索引的列

member_corporation_link nonclustered located on primary corp_no

member_ident clustered, unique, primary key located on primary member_no

member_region_link nonclustered located on primary region_no

memberfirstname nonclustered located on primary firstname

当我们执行下面的sql查询时候,

select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like'k%' and m.region_no> 6 and m.member_no< 5000go

sql server会根据索引方式,优化成下面方式来执行。

select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like'k%' and m.member_no< 5000) a,--这个查询可以直接使用 memberfirstname非聚集索引,而且这个非聚集索引覆盖了所有查询列--实际执行时,只需要逻辑读取 3次

(select m.member_no, m.region_no from dbo.member as mwhere m.region_no> 6) b

--这个查询可以直接使用 member_region_link非聚集索引,而且这个非聚集索引覆盖了所有查询列--实际执行时,只需要逻辑读取 10次

where a.member_no= b.member_no

不信,你可以看这两个sql的执行计划,以及逻辑读信息,都是一样的。

其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server不会优化成下面的方式。是因为 and操作符优化的另外一个原则。

1/26的数据和 1/6的数据找交集的速度要比 1/52的数据和 1/3的数据找交集速度要慢。

select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like'k%'-- 1/26数据) a,

(select m.member_no, m.region_no from dbo.member as mwhere m.region_no> 6 and m.member_no< 5000-- 1/3* 1/ 2数据) bwhere a.member_no= b.member_no

当然,我们要学习sql如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。

比如下面的查询语句

select m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(0))where m.firstname like'k%' and m.region_no> 6 and m.member_no< 5000go

select m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(1))where m.firstname like'k%' and m.region_no> 6 and m.member_no< 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(membercovering3))where m.firstname like'k%' and m.region_no> 6 and m.member_no< 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(memberfirstname, member_region_link))where m.firstname like'k%' and m.region_no> 6 and m.member_no< 5000go

这里 index计算符可以是 0,1,指定的一个或者多个索引名字。对于 0,1的意义如下:

如果存在聚集索引,则 index(0)强制执行聚集索引扫描,index(1)强制执行聚集索引扫描或查找(使用性能最高的一种)。

如果不存在聚集索引,则 index(0)强制执行表扫描,index(1)被解释为错误。

总结知识点:

简单来说,我们可以这么理解:sql server对于每一条查询语句。会根据实际索引情况(sysindexes系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的计划。

成本代价计算的一个主要组成部分是逻辑i/o的数量,特别是对于单表的查询。

and操作要满足所有条件,这样,经常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节省成本。

的项目中,竟然出现了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个非常大的失误。这篇博客就是从这个角度来罗列索引的基础知识。

使用索引的意义

索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。

使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

使用索引的代价

索引需要占用数据表以外的物理存储空间。

创建索引和维护索引要花费一定的时间。

当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。

创建索引的列

主键

外键或在表联接操作中经常用到的列

在经常查询的字段上最好建立索引

不创建索引的列

很少在查询中被引用

包含较少的惟一值

定义为 text、ntext或者 image数据类型的列

heaps是staging data的很好选择,当它没有任何index时

excellent for high performance data loading(parallel bulk load and parallel index creation after load)

excellent as a partition to a partitioned view or a partitioned table

聚集索引提高性能的方法,在前面几篇博客中分别提到过,下面只是一个简单的大纲,细节请参看前面几篇博客。

何时创建聚集索引?

clustered index会提高大多数table的性能,尤其是当它满足以下条件时:

独特,狭窄,静止:最重要的条件

持续增长的,最好是只向上增加。例如:

identity

date, identity

guid(only when using newsequentialid() function)

聚集索引唯一性(独特型的问题)

由于聚集索引的b+树结构的叶子节点必须指向具体数据。如果你要建立聚集索引的列不唯一,并且你指定的创建的聚集索引是非唯一的聚集索引,则会有以下情况:

如果未使用 unique属性创建聚集索引,数据库引擎将向表自动添加一个四字节 uniqueifier列。必要时,数据库引擎将向行自动添加一个 uniqueifier值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

急!求个数据库课程的设计!!

《数据库原理及应用》课程设计

数据库原理课程设计任务书

一、目的

1.掌握计算机管理信息系统设计的一般方法,主要包括系统分析、系统设计的组织和实施。

2.关系型数据库管理系统的编程技术,并能独立完成一般小系统的程序设计、调试运行等工作。

3.培养把所学知识运用到具体对象,并能求出解决方案的能力。

二、任务(任选其一)

A.运用关系型数据库管理系统,实现本院图书馆管理信息系统。具体要求如下:

—图书、资料的登记、注销和查询。

—借书证管理,包括申请、注销借书证,查询借书证持有人等。

—借还图书、资料的登记、超期处理,超期拒借等。

—图书、资料查询,借、还图书和资料情况查询。

—图书、资料借阅情况的统计分析,拒此作为图书馆图书、资料订够的依据之一。(本项不作为基本要求)

B.运用关系型数据库管理系统,实现服务电话管理系统

向客户现场派技术人员的服务公司可以用服务电话管理系统跟踪客户、员工、工作订单、发票、付款等等。

要求:

数据库要存储以下信息:

—客户信息

—客户工需单信息

—完成工需单所需人工

—完成工需单所需部件

—部件信息

—付款信息

—雇员信息

完成的功能:

—输入/查看客户工需单信息

—输入/查看部件、雇员等其它信息

—付款

—打印发票等

三、结果形式

1.设计报告:含E-R图、数据字典、关系模式、关系实例、查询描述、关系代数、SQL实现的查询语言及查询结果。

2.上机实现。

四、考核

1.课程设计态度(20分)。

2.递交的书面材料(40分)。

3.上机运行情况(40分)

目录

1.问题描述 2

1.1背景 2

1.2数据需求 2

1.3事物需求 3

1.4关系模式 3

2.方案图表设计 3

2.1 E-R图 3

2.2数据流程图 8

2.3数据字典 9

2.4关系图: 11

3.数据库源代码 12

3.1数据库建立 12

3.2数据初始化 14

4.结果数据处理 17

4.1单表查询 17

4.2超期处理 19

4.3还书操作 20

4.4借书操作 22

4.5书籍状态 24

4.6读者状态 24

5.结束语 26

5.1课程设计心得 26

1.问题描述

1.1背景

随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。

另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。

提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。

1.2数据需求

图书馆管理信息系统需要完成功能主要有:

1.读者基本信息的输入,包括借书证编号、读者姓名、读者性别。

2.读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。

3.书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。

4.书籍类别信息的查询、修改,包括类别编号、类别名称。

5.书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。

6.书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。

7.借书信息的输入,包括读者借书证编号、书籍编号、借书日期。

8.借书信息的查询、修改,包括借书证编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期等。

9.还书信息的输入,包括借书证编号、书籍编号、还书日期。

10.还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。

11.超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。

12.超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等

1.3事物需求

(1)在读者信息管理部分,要求:

a.可以查询读者信息。

b.可以对读者信息进行添加及删除的操作。

(2)在书籍信息管理部分,要求:

a.可以浏览书籍信息,要求:

b.可以对书籍信息进行维护,包括添加及删除的操作。

(3)在借阅信息管理部分,要求:。

a.可以浏览借阅信息。

b.可以对借阅信息进行维护操作。

(4)在归还信息管理部分,要求:

a.可以浏览归还信息

b.对归还信息可修改维护操作

(5)在管理者信息管理部分,要求:

a.显示当前数据库中管理者情况。

b.对管理者信息维护操作。

(6)在罚款信息管理部分,要求:

a.可以浏览罚款信息

b.对罚款信息可以更新

1.4关系模式

(一)书籍类别(种类编号,种类名称)

(二)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期)

(三)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称,出版日期,登记日期)

(四)借阅(借书证编号,书籍编号,读者借书时间)

(五)还书(借书证编号,书籍编号,读者还书时间)

(六)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书时间)

以上通过关系代数方法的进行运算得到所需要的结果,在实验结果中可以看到。

2.方案图表设计

2.1 E-R图

根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。

图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体。用E-R图一一描述这些实体。

2.1.1类别实体E-R图:

图2-1类别实体E-R图

2.1.2读者信息实体E-R图:

图2-2读者信息实体E-R图

2.1.3信息实体E-R图:

图2-3信息实体E-R图

2.1.4.记录信息实体E-R图:

图2-4记录信息实体E-R图

2.1.5记录信息实体E-R图:

图2-5记录信息实体E-R图

2.1.6罚款信息实体E-R图:

图2-6罚款信息实体E-R图

2.1.6总的信息实体E-R图:

图2-7总的信息实体E-R图

2.2数据流程图

D5

归还信息录入基本信息录入

D2

D1

基本信息录入基本信息录入

D3

D4

借阅信息录入

读者信息返回书籍信息返回

图2-7系统的数据流程图

2.3数据字典

表2-1 book_sytle书籍类别信息表

表中列名数据类型可否为空说明

bookstyleno varchar not null(主键)种类编号

bookstyle Varchar not null种类名称

表2-2 system_readers读者信息表格

表中列名数据类型可否为空说明

readerid varchar not null(主键)读者借书证号

readername varchar not null读者姓名

readersex varchar not null读者性别

readertype varchar null读者种类

regdate datetime null登记日期

表2-3 system_book书籍信息表

表中列名数据类型可否为空说明

bookid Varchar Not null(主键)书籍编号

bookname Varchar Not null书籍名称

bookstyle Varchar Not null书籍类别

bookauthor Varchar Not null书籍作者

bookpub Varchar Null出版社名称

bookpubdate Datetime Null出版日期

bookindate Datetime Null登记日期

isborrowed Varchar Not Null是否被借出

表2-4 borrow_record借阅记录信息表

表中列名数据类型可否为空说明

readerid Varchar Not null(外主键)读者借阅证编号

bookid Varchar Not null(外主键)书籍编号

borrowdate Varchar Not null读者借书时间

表2-5 return_record借阅记录信息表

表中列名数据类型可否为空说明

readername Varchar Not null(外主键)读者借阅证编号

readerid Varchar Not null(外主键)书籍编号

returndate datetime Not null读者还书时间

表2-6 reader_fee罚款记录信息表

readerid varchar Not null读者借书证编号

readername varchar Not null读者姓名

bookid varchar Not null(外主键)书籍编号

bookname varchar Not null书籍名称

bookfee varchar Not Null罚款金额

borrowdate datetime Not Null借阅时间

2.4关系图:

图2-8数据库存表关系图

3.数据库源代码

3.1数据库建立

3.1.1创建数据库

USE master

GO

CREATE DATABASE librarysystem

ON

( NAME= librarysystem,

FILENAME='d:\librarysystem.mdf',

SIZE= 10,

MAXSIZE= 50,

FILEGROWTH= 5)

LOG ON

( NAME='library',

FILENAME='d:\librarysystem.ldf',

SIZE= 5MB,

MAXSIZE= 25MB,

FILEGROWTH= 5MB)

GO

3.1.2书本类别表建立

create table book_style

(

bookstyleno varchar(30) primary key,

bookstyle varchar(30)

)

3.1.3创建书库表

create table system_books

(

bookid varchar(20) primary key,

bookname varchar(30) Not null,

bookstyleno varchar(30) Not null,

bookauthor varchar(30),

bookpub varchar(30),

bookpubdate datetime,

bookindate datetime,

isborrowed varchar(2),

foreign key(bookstyleno) references book_style(bookstyleno),

)

3.1.4借书证表建立

create table system_readers

( readerid varchar(9)primary key,

readername varchar(9)not null,

readersex varchar(2) not null,

readertype varchar(10),

regdate datetime

)

3.1.5借书记录表建立

create table borrow_record

( bookid varchar(20) primary key,

readerid varchar(9),

borrowdate datetime,

foreign key(bookid) references system_books(bookid),

foreign key(readerid) references system_readers(readerid),

)

3.1.6还书记录表建立

create table return_record

( bookid varchar(20) primary key,

readerid varchar(9),

returndate datetime,

foreign key(bookid) references system_books(bookid),

foreign key(readerid) references system_readers(readerid)

)

3.1.7罚款单表建立*/

create table reader_fee

( readerid varchar(9)not null,

readername varchar(9)not null,

bookid varchar(20) primary key,

bookname varchar(30) Not null,

bookfee varchar(30),

borrowdate datetime,

foreign key(bookid) references system_books(bookid),

foreign key(readerid) references system_readers(readerid)

)

3.2数据初始化

3.2.1将书籍类别加入表book_style中

insert into book_style(bookstyleno,bookstyle)values('1','人文艺术类')

insert into book_style(bookstyleno,bookstyle)values('2','自然科学类')

insert into book_style(bookstyleno,bookstyle)values('3','社会科学类')

insert into book_style(bookstyleno,bookstyle)values('4','图片艺术类')

insert into book_style(bookstyleno,bookstyle)values('5','政治经济类')

insert into book_style(bookstyleno,bookstyle)values('6','工程技术类')

insert into book_style(bookstyleno,bookstyle)values('7','语言技能类')

3.2.2将已有的图书加入system_books表中(定义相同的作者出版社的书本编号不一样)

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed)

values('00125415152','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed)

values('00125415153','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('00456456','数据库原理','6','萨师煊','高等教育出版社','2007-07-02','2007-09-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed)

values('12215121','C程序设计','6','谭浩强','清华大学出版社','2002-04-02','2004-03-14','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('9787308020558','计算机体系结构','6','石教英','浙江大学出版社','2004-10-03','2006-11-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('45456141414','数据结构(C语言版)','6','吴伟民,严蔚敏','清华大学出版社','2002-06-28','2004-01-21','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('5455515','中华历史5000年','1','吴强','北京大学出版社','2005-04-03','2006-05-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('015115','古代埃及','3','赵文华','北京大学出版社','2001-02-02','2002-09-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('1514514','日本文化','1','吴小鹏','北京大学出版社','2002-04-02','2004-03-14','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('15154656','微观经济学','5','李小刚','北京大学出版社','2000-10-03','2001-11-15','1');

insert

into system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('5658','影视文学','4','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');

insert into

system_books(bookid,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed)

values('565800020','探索宇宙奥秘','2','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');

3.2.3将已有图书证的读者加入system_readers表中*/

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('X05620207','陈远鹏','男','学生','2005-9-23 14:23:56')

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('X05620206','陈特','男','学生','2005-09-30 13:24:54.623')

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('X05620204','赵铭静','女','学生','2005-09-27 11:24:54.123')

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('X05620202','潘虹','女','学生','2005-09-30 13:24:54.473')

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('008415','蒋伟','男','教师','2004-04-30 09:24:54.478')

insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('001456','李叶风','女','教师','2004-04-30 09:24:54.478')

3.2.4添加已借书读者的记录,同时将在已借出的借阅标记置0*/

insert into borrow_record(bookid,readerid,borrowdate)

values('00125415152','X05620202','2007-09-27 11:24:54.123')

update system_books

set isborrowed=0

where bookid='00125415152'

insert into borrow_record(bookid,readerid,borrowdate)

values('00125415153','X05620206','2007-12-27 08:26:51.452')

update system_books

set isborrowed=0

where bookid='00125415153' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)

values('5455515','X05620207','2007-12-27 08:26:51.452')

update system_books

set isborrowed=0

where bookid='5455515' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)

values('015115','X05620204','2007-10-21 12:11:51.452')

update system_books

set isborrowed=0

where bookid='015115' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)

values('15154656','001456','2007-12-28 14:11:51.312')

update system_books

set isborrowed=0

where bookid='15154656' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)

values('565800020','008415','2007-08-28 15:11:31.512')

update system_books

set isborrowed=0

where bookid='565800020' and isborrowed='1'

4.结果数据处理

4.1单表查询

4.1.1表book_style中查询演示:

图4-1表book_style中内容

4.1.2表system_books中查询演示:

图4-2表system_books中内容

4.1.3将已有图书证的读者加入system_readers表中结果查询:

图4-3表system_readers中内容

4.1.4借书纪录表borrow_record结果查询:

图4-4表borrow_record中内容

4.2超期处理

4.2.1现在对已有借书证的读者进行查询借书是否超期(这里归定30天):

说明:当前的getdate()以日期为2008年1月6日计算

图4-4选出借出超过30天的读者

4.2.2同时也可以用语句超过天数的读者进行罚款,加入到罚款单里面,一天以0.3元扣除计算:

SQL语言:

insert into reader_fee(readerid,readername,bookid,bookname,bookfee,borrowdate)

select system_readers.readerid读者借书证编号,readername读者姓名,

system_books.bookid书籍编号,bookname书名,

0.3*(Datediff(day,convert(smalldatetime,borrowdate),getdate())-30)超过时间天数,

borrowdate借书时间

from borrow_record,system_readers,system_books

where system_readers.readerid=borrow_record.readerid

and system_books.bookid=borrow_record.bookid

and Datediff(day,convert(smalldatetime,borrowdate),getdate())>=30

(所影响的行数为 3行)

select readerid书读者借书证编号,readername读者姓名,

bookid书籍编号,bookfee超期罚款

from reader_fee

形成各本书对应的罚款金额,按0.3元每天算

图4-5查看罚款单

4.3还书操作

4.3.1现在对某一读者进行还书操作:

1.首先还书要在还书纪录中添加一条还书纪录

2.其次删除相应书本的借阅纪录

3.最后在书库中标记该本书为1,表示归还了未借,可供其他读者借阅

说明:学号为X05620207姓名为陈远鹏借阅的565800020书籍编号进行归还。

SQL语言:

insert into return_record(bookid,readerid,returndate)

select bookid,readerid,getdate()

from borrow_record

where bookid='565800020'

(所影响的行数为 1行)

delete

from borrow_record

where bookid='565800020'

(所影响的行数为 1行)

update system_books

set isborrowed=1

where bookid='565800020'

(所影响的行数为 1行)

三个表的结果如图:

图4-6增加了565800020纪录

图4-7 565800020这本书在借书纪录里没有了

图4-8标记设为了‘1’

说明:这本书重新回到未被借出标记为1(注,相同的书其编号是不同的)

其结果为还书成功,相应的各表都有变化,对于罚款单通过借阅记录表borrow_record中更新。

4.4借书操作

4.4.1查询未被借出的书本:

图4-9

4.4.2查询已被借出的书本:

图4-10

4.4.3申请借书证:

SQL语言:

Insert into system_readers(readerid,readername,readersex,readertype,regdate)

values('X05620211','小华','男','学生',getdate())

图4-11

说明:查询相应的纪录增加了小华这样一个读者的借书证纪录:

4.4.4注销借书证:

说明:

1.在注销之前执行所有的还书过程,就是上面写到的所述SQL语句,然后执行

delete from system_readers where readerid=' X05620211',

2.小华借书证纪录就被删除了,同时要删除和小华归还纪录的内容

delete from return_record where readerid=' X05620211',

4.4.5查询所有书所对应的类别:

图4-12

4.5书籍状态

4.5.1查询所有工技术类的书:

图4-13

4.5.2查询清华大学出版社出版的书:

图4-14

4.6读者状态

4.6.1查询什么人借了什么书:

SQL语言:

select readername读者姓名,bookname书籍名称

from borrow_record,system_books,system_readers

where system_readers.readerid=borrow_record.readerid

and system_books.bookid=borrow_record.bookid

图4-15

4.6.2指定潘虹借了什么书:

SQL语言:

select readername读者姓名,bookname书籍名称

from borrow_record,system_books,system_readers

where system_readers.readerid=borrow_record.readerid

and system_books.bookid=borrow_record.bookid

and readername='潘虹'

图4-16

5.结束语

5.1课程设计心得

通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对灵据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,将SQL语的查询语句用得淋漓尽致,增强了自己在数据库中应用SQL语言的灵活性,其中包括,插入、删除、修改、查询,牵涉表和表之间的联系,主建与外主键的定义,约束项的设置,使逻辑更严密,在学习过程中,我也能过上网查了不少资料,也看了一些别人设计的图书馆管理信息系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中在学到用,从用又到学,不断修改,系统更新。虽然不能达到完善系统,但也做到了尽善尽美,加强理论学习对完善系统会有很多帮助,不管怎么说,对这次做的课程设计自己觉得还算满意。

文章到此结束,如果本次分享的数据库实验四和数据库实验总结的问题解决了您的问题,那么我们由衷的感到高兴!

主机mac地址怎么查?电脑mac地址怎么查配一个电脑主机多少钱?组装一台电脑主机要多少钱