资源描述
<p><span id="_baidu_bookmark_start_0" style="display: none; line-height: 0px;"></span>.
XX大学计算机学院网络工程专业
数据库原理实验报告
实验名称:
实验五 简单的数据库系统设计——图书管理系统
班 级:
网络五班
__
董迎顺
学 号:
041440516
实验地点:
机房
日 期:
2015-12-7
一、实验目的:
通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步理解和掌握数据库的设计过程及方法。
二、实验内容、要求和环境:
[实验要求]
注:将完成的实验报告重命名为:班级+学号+姓名+〔实验五,〔如:041340538张三〔实验五,发邮件到:。提交时限:本次实验后24小时之内。
1. 实验课要携带教材、学习辅导、老师下发的实验报告文档等。
2. 课前要对实验内容和步骤部分进行预习。
[实验环境]
1.SQL SERVER 2005/2008;
2.KingBase ES V7.0 ,人大金仓。
[实验内容和步骤]
一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中面向学生部分可以进行借阅、续借、归还和查询书籍等操作;面向管理员部分可以完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还的确认。
参照附录的实验报告参考实例,完成如下内容:
1.需求分析
〔1借阅人基本信息的查询,输入,插入,修改,删除。包括借阅人的图书证号,姓名,班级,,已借书目,能否能借书。
〔2图书基本信息的查询,输入,插入,修改,删除。包括图书的图书编号,书名,书号,类别,定价,入库时间,库存量等。
〔3借阅的基本信息的查询,输入,插入,修改,删除。包括借阅的借书时间,应还时间,图书证号,图书编号,是否续借等。
〔4借阅书籍基本信息的查询,输入,插入,修改,删除。包括借阅书籍的图书编号,图书证号,书名等。
〔5归还书籍基本信息的查询,输入,插入,修改,删除。包括归还书籍的图书编号,图书证号,书名等。
〔6管理基本信息的查询,输入,插入,修改,删除。包括管理的图书编号,图书证号,登记借书日期,是否在库,存放位置等。
〔7管理员基本信息的查询,输入,插入,修改,删除。包括管理员的编号,姓名,性别,值日时间,联系方式等。
2.概念结构设计〔E-R图
实体:图书信息,借阅书籍,归还书籍,借阅人,管理员
__借阅信息,管理信息。
库存量
入库时间
定价
类别
书号
书名
图书编号
是否在库
图书编号
存放位置
借书时间
图书信息
管理
借阅信息
mm
登记日期
借书时间
图书编号
应还时间
姓名
图书证号
班级
图书编号
借阅人
借阅书籍
归还书籍
姓名
管理员
图书证号
性别
书名
编号
图书证号
值日时间
已借书目
姓名
能否能借书
图书证号
图书编号
联系方式
3.逻辑结构设计
通过E-R图,写出关系模式的逻辑结构。
借阅人〔图书证号[主码],姓名,班级,,已借书目,能否能借书
图书基本信息〔图书编号[主码],书名,书号,类别,定价,入库时间,库存量
借阅的基本信息〔图书证号,图书编号[外码],借书时间[主码],应还时间,是否续借
借阅书籍基本信息〔图书编号[外码],图书证号[外码],书名
归还书籍基本信息〔图书编号[外码],图书证号[外码],书名
管理基本信息〔图书编号[外码],图书证号[外码],登记借书日期[外码],是否在库,存放位置
管理员基本信息〔编号[主码],姓名,性别,值日时间,联系方式
4.物理设计
1.图书基本信息
属性
数据类型
长度
主码/外码
图书编号
char
10
主码
书名
char
10
书号
char
10
类别
char
10
定价
money
入库时间
date
库存量
int
3. 借阅人基本信息
属性
数据类型
长度
主码/外码
姓名
char
10
char
10
班级
char
10
图书证号
char
10
主码
已借书目
int
能否能借书
char
2
4. 借阅的基本信息
属性
数据类型
长度
主码/外码
图书证号
char
10
图书编号
char
10
外码
借书时间
date
主码
应还时间
date
是否续借
char
2
5. 借阅书籍基本信息
属性
数据类型
长度
主码/外码
图书编号
char
10
外码
图书证号
char
10
外码
书名
char
10
6管理基本信息
属性
数据类型
长度
主码/外码
图书编号
char
10
外码
图书证号
char
10
外码
登记借书日期
date
外码
是否在库
char
2
存放位置
char
10
7管理员基本信息
属性
数据类型
长度
主码/外码
姓名
char
10
性别
char
2
编号
char
10
主码
值日时间
date
联系方式
char
10
5. 用SQL实现数据库的设计,并在SQL Server上调试通过。<1>建表<考虑完整性约束>
/**********图书基本信息*************/
createtable 图书基本信息
<
图书编号 char<10>primarykey,
书名 char<10>,
书号 char<10>,
类别 char<10>,
定价 money,
入库时间 date,
库存量 int
>
/**********借阅人基本信息**********/
createtable 借阅人
<
图书证号 char<10>primarykey,
姓名 char<10>,
班级 char<10>,
char<10>,
已借书目 int,
能否能借书 char<2>,
>
/***********借阅基本信息**********/
createtable 借阅的基本信息
<
图书证号 char<10>,
图书编号 char<10>references 图书基本信息<图书编号>,
借书时间 dateprimarykey,
应还时间 date,
是否续借 char<10>,
>
/******借阅书籍基本信息 *******/
createtable 借阅书籍基本信息
<
图书编号 char<10>references 图书基本信息<图书编号>,
图书证号 char<10>references 借阅人<图书证号>,
书名 char<10>>
/*******归还书籍基本信息********/
createtable 归还书籍基本信息
<
图书编号 char<10>references 图书基本信息<图书编号>,
图书证号 char<10>references 借阅人<图书证号>,
书名 char<10>>
/**********管理基本信息**********/
createtable 管理基本信息
<
图书编号 char<10>references 图书基本信息<图书编号>,
图书证号 char<10>references 借阅人<图书证号>,
登记借书日期 datereferences 借阅的基本信息<借书时间>,
是否在库 char<2>,
存放位置 char<10>>
/**********管理员基本信息************/
createtable 管理员基本信息
<
姓名 char<10>,
性别 char<2>,
编号 char<10>primarykey,
值日时间 date,
联系方式 char<10>><2>学生、图书以及借阅信息的输入、删除和修改。
/********借阅人信息输入************/
insertinto 借阅人
values<20151214,'张三','网络五班',1234564789,3,'能'>insertinto 借阅人
values<20151216,'王五','网络五班',1434564789,1,'能'>insertinto 借阅人
values<20151217,'董六','网络五班',1534564789,2,'能'>insertinto 借阅人
values<20151218,'孙七','网络五班',1634564789,3,'能'>/********图书基本信息输入************/
insertinto 图书基本信息
values<000001,'英语','b001','语言类',30,'2015-12-01',150>insertinto 图书基本信息
values<000002,'线性代数','b011','几何类',34,'2015-11-01',100>insertinto 图书基本信息
values<000003,'数据库','b101','计算机类',40,'2015-12-11',90>insertinto 图书基本信息
values<000004,'近代史','b111','历史类',25,'2015-10-01',50>/********借阅的基本信息输入************/
insertinto 借阅的基本信息
values<20151214,000001,'2015-12-11','2016-01-11','否'>insertinto 借阅的基本信息
values<20151216,000002,'2015-11-11','2015-12-11','否'>insertinto 借阅的基本信息
values<20151217,000003,'2015-12-12','2016-01-12','否'>insertinto 借阅的基本信息
values<20151218,000004,'2015-12-10','2016-01-10','否'>三、思考题:
对数据库设计的过程有了哪些进一步的理解?
答; 通过这次的课程设计,我对数据库有了进一步的了解,我熟练的掌握了数据库的一些基本语法,比如如何建表,以及添加,删除,查找,更新等操作。我也练习了创建E-R图和从E-R图得到关系图,通过设计物理结构,来创建一个图书管理系统。马上就要期末考试了,这次课程设计,帮助了我复习以前的知识。
五、教师评语:
实验成绩: 教师:〔签名 年月日
附:实验报告参考示例
零件交易中心管理系统实验报告
一、实验目的
通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步理解和掌握数据库的设计过程及方法。
二、实验内容
零件交易中心管理系统主要提供顾客和供应商之间完成零件交易的功能,其中包括供应商信息、顾客信息以及零件信息。
供应商信息包括供应商、供应商号、地址、、简介;
顾客信息包括顾客号、顾客名、地址、;
零件信息包括零件号、零件名、重量、颜色、简介等。
此系统可以让供应商增加、删除和修改所提供的零件产品,还可以让顾客增加、删除和修改所需求的零件。交易员可以利用顾客提出的需求信息和供应商提出的供应信息来提出交易的建议,由供应商和顾客进行确认后完成交易。
三、实验过程
1. 需求分析<1>供应商
供应商的操作流程如图1所示。
图1<2>顾客
顾客的地位和供应商几乎是对称的,所以功能分类上也很相似。顾客的操作流程如图2所示:
图2<3>交易员
交易员的工作就是提出交易和完成交易。需要仔细考虑的问题是:一个交易如何产生,并如何达成。这可以用图3来说明。
图3
处理交易的时候可能面临如下问题:
a.一个交易只能在交易双方都同意的情况下才可以进行,所以数据库中的供求信息只能作为达成某个交易的基础;
b.交易的双方可能不同时使用这个系统,因此需要系统提供一个双方交换信息的方式;
c.系统需要提供一种方便系统<交易员>向用户提出建议来促成交易的途径,并在保证数据库数据完整性的情况下达成交易。
2.概念模型设计
数据库需要表述的信息有以下几种:<1>零件信息;<2>供应商信息;<3>顾客信息;<4>供应商零件之间的联系<供应><5>顾客和零件之间的联系<求购>;<6>交易<三元联系>
用E-R模型表述该模型的设计,E-R图如图4所示。
图4
3.逻辑设计
通过E-R模型到关系模型的转化,可以得到如下关系模式:<1>零件关系:part</p><id,color,name,weight,intro><2>供应商关系:provider<id,name,address,tele,intro><3>顾客关系:customer<id,name,address,tele><4>供应关系:supply<partid,provideid,price,quantity><5>求购关系:after<customerid,partid,price,quantity><6>交易关系:Business<customerid,provideid,partid,price,quantity>每个关系模式的主码都用下划线标出。同时,对于从联系导出的关系供应,求购和交易,使用与之相联系的实体集的码作为自己的主码,必须符合外码的约束。
对于顾客,供应商和零件之间,不存在直接的约束,所以可以存在没有供应商供应同时也没有顾客求购的零件。
4.物理设计
为了提高在表中搜索元组的速度,在实际实现的时候应该基于码建立索引。下面是各表中建立索引的表项。
part<id>provider<id>customer<id>supply<partid,provideid>after<customerid,partid>Business<customerID,provideID,partID
5.用SQL实现设计
实现该设计的环境为Windows 2000 Professional +MS SQL Server 2000。
<1>建立各表
①建立零件表
CREATE TABLE Part<ID smallint identity<1,1>PRIMARY KEY CLUSTERED,
Color varchar<20>,
Name varchar<20>NOT NULL,
Weight int default 0,
Intro text>;
②建立Provider表
CREATE TABLE Provider<ID smallint identity<1,1>PRIMARY KEY CLUSTERED,
Name varchar<20>NOT NULL,
Password varchar<8>NOT NULL,
Address varchar<30>,
Tel varchar<20>,
Intro text>;
③建立Customer表
CREATE TABLE Customer<ID smallint identity<1,1>PRIMARY KEY CLUSTERED,
Name varchar<20>NOT NULL,
Password varchar<8>NOT NULL,
Address varchar<30>,
Tel varchar<20>>;
④建立Supply表
CREATE TABLE Supply<PartID smallint,ProvideID smallint,
Price int, Quantity int ,
CONSTRAINT PK_SUPPLY
PRIMARY KEY CLUSTERED<partid,provideid>,
CONSTRAINT PK_SUPPLY_PARTID
FOREIGN KEY<partid>REFERENCES Part<id>,
CONSTRAINT PK_SUPPLY_PROVIDERID
FOREIGN KEY<provideid>REFERENCES Provider<id>>;
⑤建立After表
CREATE TABLE After<CustomerID,smallint,PartID smallint,
Price int, Quantity int ,
CONSTRAINT PK_AFTER
PRIMARY KEY CLUSTERED<customerid, partid="">,
CONSTRAINT PK_AFTER_CUSTOMERID
FOREIGN KEY<customerid>REFERENCES Customer<id>,
CONSTRAINT PK_AFTER_PARTID
FOREIGN KEY<partid>REFERENCES Part<id>>;
⑥建立Business表
CREATE TABLE Business<
CustomerID,smallint,
PartID smallint,
ProvideID smallint,
Price int, Quantity int ,
CONSTRAINT PK_BUSSINESS
PRIMARY KEY CLUSTERED<customerid,provideid,partid>,
CONSTRAINT PK_ BUSSINESS _CUSTOMERID
FOREIGN KEY<customerid>REFERENCES Customer<id>,
CONSTRAINT PK_BUSSINESS_PROVIDERID
FOREIGN KEY<provideid>REFERENCES Provider<id>>;
CONSTRAINT PK_BUSSINESS_PARTID
FOREIGN KEY<partid>REFERENCES Part<id>>;
⑦供应商操作
a.注册<register>INSERT INTO Provider<name,address,tel,intro>VALUES<#name,#address,#tel,#intro>
在登记操作后,供应商得到一个惟一的ID,可以根据这个ID来查询和修改供应商的数据。
b.注销<unregister>DELETE Provider WHERE ID=#ID;
c.修改个人信息<update>UPDATE Provider
Set Name=#Name,Address=#Address,Tel=#Tel,Intro=#Intro
WHERE ID=#ID
d.增加供应项<add_supply_item>INSERT INTO Supply<partid,providerid,price,quantity>VALUES<#partid,#providerid,#price,#quantity>>
e.删除供应项<delete_supply_item>DELETE Supply
WHERE PartID=#PartID and ProvideID=#ProvideID>;
f.修改供应项<update_supply_item>UPDATE Supply SET Price=#Price,Quantity=#Quantity>
WHERE PartID=#PartID and ProvideID=#ProvideID;
很明显,系统并没有提供商品面向供应商修改零件信息的接口,所以供应商提供的零件必须已经在零件表中存在;可以这样假设,交易所的管理员负责更新零件信息,而供应商可以向交易所申请增加某种零件的信息。事实上顾客也可提出这样的要求。
⑧顾客
a.注册<register>INSERT INTO Customer<name,address,tel>VALUES<#name,#address,#tel>
在登记操作后,供应商得到一个惟一的ID,可以根据这个ID来查询和修改供应商的数据。
b.注销<unregister>DELETE Customer WHERE ID=#ID;
c.修改个人信息<update>UPDATE Customer Set Name=#Name,Address=#Address,Tel=#Tel
WHERE ID=#ID
d.增加需求项<add_after_item>INSERT INTO After<partid,customerid,price,quantity>VALUES<#partid,#providerid,#price,#quantity>>
e.删除需求项<delete_after_item>DELETE After
WHERE PartID=#PartID and CustomerID=#CustomerID>;
f.修改需求项<update_after_item>UPDATE After SET Price=#Price,Quantity=#Quantity>
WHERE PartID=#PartID and CustomerID=#CustomerID;
⑨交易员
针对需求分析中提出的问题,提出了"协议书"的解决方案,方案的说明如下:
· 每个交易在达成以前都作为协议书保存在数据库中,协议书具有和交易一样的完备信息,可以在条件成熟的情况下转为一个达成的交易;
· 协议书只有在供应商和顾客都签字的情况下才有效;有效的协议书由交易员签发,协议书一经签发,就生效,表明一个交易的达成,数据库中的数据将同时予以修改;
· 协议书可以由供应商、顾客或者交易员中的任意一个人提出申请。当协议书在双方没有都签字前,协议的双方或者交易员都可以删除这个协议书;但是,当协议书签字完毕后,协议书就不得删除<修改>,只能由交易员进行处理;
· 协议书有可能在转成交易的过程中失败,因为在交易达成以前,数据库中的数据有可能因为其他交易而变化,一个协议书可能失败,这是允许的。
根据以上分析,对数据库的模型作一些修改,增加协议书表,其关系模式如下:
Agreement<customerid,providerid,partid,price,quantity,customersign,providersign>对应的SQL描述为:
CREATE TABLE Agreement<
CustomerID,smallint,
PartID smallint,
ProvideID smallint,
Price int,
Quantity int ,
CustomerSign int ,
ProviderSign int,
CONSTRAINT PK_AGREEMENT
PRIMARY KEY CLUSTERED<customerid,provideid,partid>,
CONSTRAINT PK_ AGREEMENT_CUSTOMERID
FOREIGN KEY<customerid>REFERENCES Customer<id>,
CONSTRAINT PK_ AGREEMENT_PROVIDERID
FOREIGN KEY<provideid>REFERENCES Provider<id>>;
CONSTRAINT PK_ AGREEMENT_PARTID
FOREIGN KEY<partid>REFERENCES Part<id>>;
与上述其他操作相比,交易的操作对数据完整性要求比较高,其中需要注意的地方是:
· 要防止同一用户<供应商,顾客>的数据因两个交易而同时修改;
· 需要同时对供应数据库<span style="text-decoration:line-through;">、需求数据库<after>、交易数据库<business>和协议数据库<agreement>作出个性而且需要保持这些修改的原子性;
· 很显然,这些要求正是对一个事务<transaction>的要求,所以可以用一个事务来完成签发一个协议的操作。事务的描述如下:
CREATE PROC PASS_AGREEMENT
providerID int,
customerID int,
partID int
AS
DECLARE TransName VARCHAR<20>SELECT TransName=’Pass_Agreement’
BEGIN TRANSACTION TransName
DECLARE price int quantity int
SELECT price=price,quantity=quantity FROM Agreement
WHERE provideID=providerID and customerID=customerID
AND partID=partID
INSERTINTOBusiness<providerid,customerid,partid, quantity="">VALUES<providerid, quantity="">UPDATE Supply
SET quantity=quantity-quantity
WHERE ProviderID=ProviderID AND partID=partID
IF<select quantity="" from="" supply="" where="" provideid="providerID" and="" partid="partID"><9
ROLLBACK TRANSACTION TransName
DELETE FROM Supply
WHERE quantity=0
UPDATE after
SET quantity=quantity-quantity
WHERE CustomerID=CustomerID AND partID=partID
If</select><0
ROLLBACK TRANSACTION TransName
DELETE FROM A fter
WHERE quantity=0
COMMIT TRANSACTION TransShow
GO
为了使用方便,这里定义了一个存储过程,功能是完成从Agreement的一个元组到期Business的每个元组的转化工具。这里考虑到了删除空的Supply和After项,更加重要的是,这里考虑到了非法的Agreement的情况,在一段时间后,由于供应商式或者顾客修改数据,Agreement可能就非法,这时就需要把这个事务废除,所以这里检查Supply表和After表中的数据,确保数据仍然正确。
另外,交易员,或者说交易所必须承担的一项任务是更新零件列表,这里在考虑顾客和供应商的时候,并没有给予他们修改零件列表的权利,他们必须根据数据库中已有的项实现应用模式的供应信息。
由于这个数据库实际上更加偏重于模型化,而不是一个实际环境中的数据库,所以在实现应用模型的时候还需要对这个数据库的模型作一些修改。
6.实验数据示例
插入零件信息:
INSERT INTO part<color,name,weight,intro>VALUES<‘black’,’stick’,30,’of>;
显示插入的零件ID:
select id from part where name=’stick’;
以下操作同上,信息自定:
插入供应商信息:
INSERT INTO provider<name,password,address,tel,intro>VALUES<‘com1’,’1234’,’北京’,’’86784012’,’noting’>;
显示供应商ID:
select id from provider where name=’com1’;
插入顾客信息:
INSERT INTO customer<name,address,tel>VALUES<‘cus1’,’北京’,’67584612’>;
显示顾客ID
select id from provider where name=’cus1’;
插入供应商供应信息
INSERT INTO supply<partid,provideid,price,quantity>VALUES<1,1,20,100>;
插入顾客需求信息
INSERT INTO after<customerid,partid,price,quantity>VALUES<1,1,20,50>插入协议信息
INSERT INTO Agreement<customerid,providerid,partid,price, providersign="">VALUES<1,1,1,20,30,1,1>执行交易操作
PASS_AGREEMENT 1,1,1
<后面3个参数分别前面选择出的供应商id,顾客id和零件id>
显示交易后供应信息:
select quantity from supply where pardID=1 and providerID=1
需求信息:
select quantity from after where pardID=1 and customerID=1
分析上面的结果:
首先,保存在supply表中的ID的零件供应量为100,保存在after表中ID为1的零件需求量为50。在Agreement表中指出ID为1的顾客要交易30人ID为1的零件。当执行存储过程PASS_AGREEMENT之后, supply和after表中相应的数量都减少了30,交易成功。
7.实验总结
通过此次实验,完成从用户需求分析、数据库设计到上机的编程、调试和应用等全过程,进一步理解和掌握了数据库的各方面知识,并提高了实践能力。
24 / 24
<!--后面3个参数分别前面选择出的供应商id,顾客id和零件id--><!--1,1,1,20,30,1,1--></customerid,providerid,partid,price,><!--1,1,20,50--></customerid,partid,price,quantity><!--1,1,20,100--></partid,provideid,price,quantity><!--‘cus1’,’北京’,’67584612’--></name,address,tel><!--‘com1’,’1234’,’北京’,’’86784012’,’noting’--></name,password,address,tel,intro><!--‘black’,’stick’,30,’of--></color,name,weight,intro></providerid,></providerid,customerid,partid,><!--20--></transaction></agreement></business></after></span><!--供应商,顾客--></id></partid></id></provideid></id></customerid></customerid,provideid,partid></customerid,providerid,partid,price,quantity,customersign,providersign><!--修改--></update_after_item></delete_after_item><!--#partid,#providerid,#price,#quantity--></partid,customerid,price,quantity></add_after_item></update></unregister><!--#name,#address,#tel--></name,address,tel></register></update_supply_item></delete_supply_item><!--#partid,#providerid,#price,#quantity--></partid,providerid,price,quantity></add_supply_item></update></unregister><!--#name,#address,#tel,#intro--></name,address,tel,intro></register></id></partid></id></provideid></id></customerid></customerid,provideid,partid></id></partid></id></customerid></customerid,></id></provideid></id></partid></partid,provideid><!--20--><!--30--><!--8--><!--20--><!--1,1--><!--20--><!--30--><!--8--><!--20--><!--1,1--><!--20--><!--20--><!--1,1--><!--1--></customerid,partid></partid,provideid></id></id></id></customerid,provideid,partid,price,quantity><!--6--></customerid,partid,price,quantity><!--5--></partid,provideid,price,quantity><!--4--></id,name,address,tele><!--3--></id,name,address,tele,intro><!--2--></id,color,name,weight,intro><!--1--><!--三元联系--><!--6--><!--求购--><!--5--><!--供应--><!--4--><!--3--><!--2--><!--1--><!--交易员--><!--3--><!--2--><!--1--><!--20151218,000004,'2015-12-10','2016-01-10','否'--><!--20151217,000003,'2015-12-12','2016-01-12','否'--><!--20151216,000002,'2015-11-11','2015-12-11','否'--><!--20151214,000001,'2015-12-11','2016-01-11','否'--><!--000004,'近代史','b111','历史类',25,'2015-10-01',50--><!--000003,'数据库','b101','计算机类',40,'2015-12-11',90--><!--000002,'线性代数','b011','几何类',34,'2015-11-01',100--><!--000001,'英语','b001','语言类',30,'2015-12-01',150--><!--20151218,'孙七','网络五班',1634564789,3,'能'--><!--20151217,'董六','网络五班',1534564789,2,'能'--><!--20151216,'王五','网络五班',1434564789,1,'能'--><!--20151214,'张三','网络五班',1234564789,3,'能'--><!--2--><!--10--><!--10--><!--2--><!--10--><!--10--><!--2--><!--借书时间--><!--图书证号--><!--10--><!--图书编号--><!--10--><!--10--><!--图书证号--><!--10--><!--图书编号--><!--10--><!--10--><!--图书证号--><!--10--><!--图书编号--><!--10--><!--10--><!--图书编号--><!--10--><!--10--><!--2--><!--10--><!--10--><!--10--><!--10--><!--10--><!--10--><!--10--><!--10--><!--考虑完整性约束--><!--1-->
展开阅读全文