1、信息工程学院数据库课程设计论文题 目:学校教材购销系统数据库设计学 号:2020012834专业班级:计算机科学与技术102班姓 名:指导老师:李书琴完成日期:2012-1-13教材购销系统数据库设计姓名:张勇(信息工程学院计算机科学与技术10级2班)摘 要:通过了解,现在市场上很多学校的教材购销还处于人工管理阶段,存在着效率低下,耗费人力 教材购销的业务模式简单,操作流程却复杂。教材购销系统是典型的进销存系统,它是针对改善当前人工管理的诸多缺点而设计的,能够处理进书、销书、存储管理等业务,包括有出版社管理、采购退书管理、学生购书管理、顾客退书管理、商品储存管理等功能,并且通过使用触发器、存储
2、过程、视图等数据库技术,使得系统具有安全、实用、方便、基本业务功能完备等特点,基本上解决了人工管理的缺点,有助于实现学校的现代化、信息化、高效化、规模化。关键字:数据库;SQL语言;索引;视图;触发器;教材;仓库目 录1需求分析11.1引言11.2.系统任务概述11.2.1目标11.2.2用户的特点21.3需求规定21.3.1对功能的规定21.3.2对性能的规定21.4运行环境规定31.5.数据流程、功能描述和设计32数据库结构设计62.1 概念设计62.1.1 分E-R图建立72.1.2 全局/整体E-R图92.2 逻辑设计102.2.1建立关系模式102.2.2 关系模式规范化处理112.
3、2.3 用户子模式建立122.2.4 关系模式逻辑结构定义123 数据库物理设计134数据库实施与测试134.1 数据库实施134.1.1 数据库及数据库对象建立134.1.2 数据入库204.2 数据库测试205总结206附录2110级计算机科学与技术专业2班数据库应用系统课程设计课程论文1需求分析主要包括内容:处理对象及组织;信息处理及系统功能;数据库系统性能需要,数据库系统开发环境需求等。在阐述信息及其处理过程时,要辅助业务流程图、数据流程图及数据字典。对上述三个问题可以以附录的形式详细罗列,但正文中必须指明做了哪些业务流程图、数据流程图和数据字典的规模。1.1引言本系统是学校教材科内部
4、的一个教材订购系统,实现教材的销售和采购。该系统还和学校财务科进行资金数据来往,.由本系统向财务处提供销售情况,实行教材的安全发放和采购.并顺便和各书店联营向个别人员单独售书。1.2.系统任务概述1.2.1目标本系统可细化为两个子系统:销售系统,采购系统和存储系统 销售系统的工作过程为:首先由教师或班长提交购书单,经书库教材发行人员审核是有效购书单后,开售书单、登记并返给教师或班长领书单,教师或班长即可去书库领书。 采购系统的主要工作过程为:若是脱销教材或者没有班长购买的图书,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书通知给班长或老师。 下面给出系统的初步概图,方便用户和读者
5、充分认识本系统的最初实现情况,并对系统有个初步的了解,也方便开发人员把握开发方向,最终实现本系统.教材购销系统 出库表 缺书登记表 待购教材表 教材库存表 进库表 购书表 采 购系 统销 售系 统 进书通知 图1 教材购销系统概图1.2.2用户的特点 本系统主要在学期开学发书、学期结束订书时大幅度使用,这时候也是本系统最需要维护的时候,所以在这时候要对本系统进行必要的检修,防止数据出错。1.3需求规定1.3.1对功能的规定本系统在向班长售书时主要输入班长学号、班级代号、购书数量、购书书名信息,然后打印领书单返回给班长领取书籍。本系统在查询数据库时主要输入需要查询的相关信息,包括图书编号、图书书
6、名、出版社信息、图书特色等信息方便操作人员把握图书信息。本系统还兼顾一点财务信息的管理,在发生单人购书时,系统直接向购书者收取现金,内部形成一个小小的财务管理。1.3.2对性能的规定 对系统中输入的数据要按照数据字典的规定严格输入,尽量避免数溢出处和数据的不合法性。1.4运行环境规定使用Windows NT 或 Windows 2000 Server以上操作系统1.5.数据流程、功能描述和设计根据前面的需求分析,进一步得出系统的数据流程和必须的数据字典,然后实现系统的相关功能,为下一步编码做好充分准备。先面给出系统的第一层数据流图和各个分解的数据流程图。图 图1.1 学校教材购销系统顶层DFD
7、下面把系统分为销售,采购和存储三个模块进行进一步分解,如图1.2。显然外部项班长或教师应与销售子系统联系。三个子系统之间也存在联系:其一是缺书单,又销售子系统把脱销书籍和未进书籍传给采购子系统;其二是进书通知,直接由采购子系统将教材入库信息通知销售系统。图1.2 学校教材购销系统第二层DFD继续分解,得到第三层数据流程图,其中图1.3由采购子系统扩展而成, 图1.4由销售子系统扩展而成。 图1.3 第三层DFD-采购模块 图1.4第三层DFD-销售子系统图1.3中,采购子系统被分解为3个子加工,编号从P1.1.到P1.3,学校提交购书单,然后出版社根据学校的购书单那填写发书单发给学校,学校验书
8、,如果合格则入库,填入库单和进书记录,如果不合格,则退书填写退书理由为不合格订单,填写退书记录。售书时,班长或教师持购书单申请购书,所购书存在就发给领书单到书库领取所购书籍。若所购书籍暂时没有就登记缺书登记单,汇总缺书登记单通知采购子系统购书,并最终汇总成为学校购书单,待书籍到库时通知班长或教师领书。关于销售子系统的特殊说明,在售书过程中产生的补售书单只针对教师或者行政班级,对个人购书情况不做处理,也就是说个人所购之书有就代理,没有就不单独采购。采购子系统可分为两个方面来加工:一是采购书,二是采购缺书。下面将为本系统提供必要的数据字典,以方便系统是最终实现。下面将分别针对教材购销系统的数据流程
9、土的各个项目进行定义。2数据库结构设计2.1 概念设计概念设计是将需求分析得到的用户需求抽象为概念模型的过程,这个阶段主要的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于DBMS的概念模型(E-R图)。对这个阶段的要求有:(1)能真实、充分地反映现实世界,包括事物与事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;(2)易于理解,因此可以用它和不熟悉计算机的用户交换意见;(3)易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;(4)易于向关系、网状、层次等各种数据模型转换。实现概念设计的任务和方法:(1)设计分E-R图,生成初步E-R图;(2)通过
10、合并等方法,消除冲突、冗余等,生成全局E-R图。2.1.1 分E-R图建立分E-R图就是全局概念模式下的底层概念模式向E-R图的转化。先从用户全局需求出发,逐曾细化得到底层需求,把每个底层需求转换为一个概念模式,再逐层合成概念模式得到全局概念模式。每个底层概念模式都要转化为分E-R图。设计分E-R图的思想是,以中层数据流为切入点,利用抽象机制对需求分析阶段收集到的数据进行分类、聚集、概括,形成实体、实体的属性、标识实体的码、确定实体之间的联系类型(1:1,1:n,m:n),再逐一设计分E-R图。下面是教材购销系统的4个分E-R图: 图2.1学生购书ER图:图2.2 图书出版社ER图:图2.3
11、购书退书ER图 图2.4 图书仓库ER图2.1.2 全局/整体E-R图由分E-R图到全局E-R图的过程就是视图集成的过程,有两种方式:(1)多个分E-R图一次集成,难度较大;(2)逐步集成,用累加的方式一次集成两个分E-R图,可以降低复杂度。无论采用哪种方式,每次集成局部E-R图时都需要分两步走:(1)合并;(2)修改和重构。在合并分E-R图时,主要是为消除各分E-R图之间的冲突,包括属性冲突、命名冲突、结构冲突。在消除属性冲突时,需要调整属性域和属性的取值单位;消除命名冲突,主要是为预防同名异义或异名同义的情况;结构冲突包括的比较多,每种都有自己的解决方法,主要有:(1)同一对象在不同应用中
12、具有不同的抽象,解决时通常是把属性变换为实体或把实体转换为属性,使同一对象具有相同的抽象;(2)同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同,可以通过取该实体属性为各分E-R图中属性的并集,再适当调整属性的次序;(3)实体间的联系在不同的分E-R图中为不同的类型,可以根据应用的语义对实体联系的类型进行综合或调整。修改或重构主要是为消除不必要的冗余。消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余;此外也可以用规范化理论来消除冗余。当然,并非所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,也会不得不以冗余
13、信息作为代价,这个需要根据用户的整体需求来确定。在合并和修改或重构之后,教材购销系统的全局E-R图如图2-5所示 图2.5 总ER图2.2 逻辑设计2.2.1建立关系模式将E-R模型转换为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。转换一般遵循以下原则:一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。实体间的联系的转化情况:一个1:1联系可以转换为一个独立的关系,也可以与任意一段对应的关系模式合并;一个1:n联系可以转化为一个独立的关系模式,也可以与n端的关系模式合并;一个m:n的联系必须转化为一个关系模式。由于出版社和出版社发书单以
14、及班长和班长订书单之间的关系都是1:n联系,所以可以直接将出版社的码合并到出版社发书单中,将班长的码合并到班长订书单中。而虽然书库和图书之间的存储关系也是1:n联系,但是为表达清晰,故虽然存在部分数据冗余,但也可将存储关系也转化为一个关系模式。出版社、图书、班长、书库、出版社发书单、进书关系、班长订书单、购买关系,这些都需要转换为关系模式.转换结果:出版社(出版社编号,出版社名称,出版社地址,出版社电话)班长(学号,姓名,班级,学院,专业)出版(出版社编号,图书名称,图书编号)图书(图书编号,图书出版社,图书名称,图书进价,图书售价,书库编号)购买(购买单号,班长学号,图书编号,图书数量,图书
15、总价,购买日期)存储(图书编号,书库编号,剩数量)书库(书库编号,库管理员姓名,书库电话)进书(进书单号,书库编号,出版社编号,图书编号,图书数量,进书日期)退书(退书单号,书库编号,出版社编号,图书编号,图书数量,退书理由)完全函数依赖F:出版社编号出版社名称出版社编号出版社地址出版社编号出版社电话班长学号班长姓名班长学号学院 班长学号班级班长学号专业 图书编号图书出版社 图书编号图书名称 图书编号图书进价 图书编号图书售价 图书编号书库编号 库管员编号 库管员姓名 销售员编号销售员姓名 采购员编号采购员电话 班长学号顾客电话 图书编号图书名称图书编号,书库编号剩余量班长学号,图书编号,购买
16、单号图书数量班长学号,图书编号,购买单号图书总价班长学号,图书编号,购买单号购买日期出版社编号,书库编号,进书单号图书编号出版社编号,书库编号,进书单号进书日期出版社编号,书库编号,退书单号图书编号出版社编号,书库编号,退书单号图书数量出版社编号,书库编号,退书单号退书理由2.2.2 关系模式规范化处理出版社(出版社编号,出版社名称,出版社地址,出版社电话) 满足3NF班长(学号,姓名,班级,学院,专业) 满足3NF出版(出版社编号,图书名称,图书编号) 满足3NF图书(图书编号,图书出版社,图书名称,图书进价,图书售价,书库编号) 满足3NF购买(班长学号,图书编号,购买单号,图书数量,图书
17、总价,购买日期) 满足3NF存储(图书编号,书库编号,剩数量) 满足3NF书库(书库编号,库管理员姓名,书库电话)满足3NF进书(出版社编号,书库编号,进书单号,图书编号,图书数量,进书日期) 满足3NF退书(出版社编号,书库编号,退书单号,图书编号,图书数量,退书理由) 满足3NF2.2.3 用户子模式建立目前关系数据库管理系统一般都提供了视图概念,可利用这一功能设计更符合全局用户使用的需要的用户外模式。表2-1 (教材购销系统)关系外模式序号视图名称作用备注1stack_view查询仓库信息2book_view查询教材信息3back_view查询退书单信息4BookRemain_View查
18、询书籍剩余量m5monitor_view班长信息视图6bssave_view仓库图书剩余量视图2.2.4 关系模式逻辑结构定义根据关系模式的转换原则,该教材购销系统可以抽象为九个关系模式。在定义关系模式时,有关系模式的逻辑结构定义、关系的完整性和安全性等内容。其中关系模式的逻辑结构定义包括关系模式各属性的确定、码的确定、外码的确定、各属性的约束等等。具体关系模式的逻辑结构如下表编号关系名称模式说明TSupplier(出版社)(详见附录41)(详见附录11)T2Monitor(班长表)(详见附录42)(详见附录12)T3Publish(出版)(详见附录43)(详见附录13)T4Book(书)(详
19、见附录44)(详见附录14)T5Buy(学生购书)(详见附录45)(详见附录15)T6Save(存储)(详见附录46)(详见附录16)T7Stack(仓库)(详见附录47)(详见附录17)T8Intobook(进书)(详见附录48)(详见附录18)T9Backbook(退书)详见附录49)(详见附录19)3 数据库物理设计数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。通常关系数据库物理设计的内容主要包括:(1)为关系模式选择存取方法;(2)设计关系、索引等数据库文件
20、的物理存储结构。4数据库实施与测试4.1 数据库实施4.1.1 数据库及数据库对象建立 数据库的建立:create user zhangyongidentified by zhangyong default tablespace userstemporary tablespace tempprofile defaultgrant connect to zhangyong ;grant resource to zhangyong;grant dba to zhangyong;出版社表create table Supplier( BSNumber char(20) primary key, BSu
21、pportName char(40) not null, BSaddress char(100) not null, BSPhone char(20) not null);班长表create table Monitor( StuNumber char(15) primary key, StuName char(20) not null, StuDep char(40) not null, StuMajor char(40) not null, StuClass char(30) not null)出版表create table Publish( BSNumber char(15) primar
22、y key, BNumber char(10) not null, BName char(50) not null, foreign key (BSNumber) references Supplier(BSNumber)图书表create table Book( BNumber char(20) primary key, BName char(40) not null, BSPricre number not null, BIPrice number not null, Sto_ID char(5) not null )购买表 create table Buy ( SBBNumber cha
23、r(20), StuNumber char(20) , BNumber char(20), BBAmount int, BSPrice number not null, BIPrice number not null, BuyDate Date, primary key (SBBNumber,StuNumber,BNumber), foreign key(StuNumber) references Monitor(StuNumber), foreign key(BNumber) references Book(BNumber) ) 存储表create table BSave ( Sto_ID
24、char(20) , BNumber char(20), BRemain int, primary key(Sto_ID,BNumber), foreign key(Sto_ID) references Stack(Sto_ID), foreign key(BNumber) references book(BNumber), ) 仓库表create table Stack ( Sto_ID char(20) primary key, StoManger char(5) not null, StoPhone char(15) not null )进书表 create table InBook (
25、 BSNumber char(20), Sto_ID char(20), BBNumber char(20), BNumber char(20), BIPrice number not null, BBAmount int, BIdate date, primary key (BSNumber,Sto_ID,BBNumber), foreign key(Sto_ID) references Stack(Sto_ID), foreign key(BSNumber) references Supplier(BSnumber) )退书表 create table BackBook ( BackNum
26、ber char(20), Sto_ID char(20), BSNumber char(20), BNumber char(20), BackAmount int not null, BIdate date, BCancel_Result char(200) not null, Primary key(BackNumber,Sto_ID,BSNumber), foreign key(Sto_ID) references Stack(Sto_ID), foreign key(BSNumber) references Supplier(BSnumber)视图的建立:仓库视图create view
27、 stack_viewasselect sto_id, stomanger, stophonefrom stack视图结果:图书视图:create view book_viewasselect bnumber,bname,sto_id,bsnumberfrom book视图结果:退书视图create view back_viewasselect backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bcancel_resultfrom backbook班长视图:create view monitor_viewasselect stunumbe
28、r,stuname,studep,stumajor,stuclassfrom monitor图书剩余量视图create view bssave_viewasselect bnumber,sto_id,bremainfrom bsave触发器类:学校购书触发器:create or replace trigger Save_triger after insert or update on inbook for each rowbegin update bsave set bsave.bremain=bsave.bremain+:new.bbamount where :new.bnumber=bsa
29、ve.bnumber; end Sav_triger;验证触发器insert into inbook(bsnumber,sto_id,bbnumber,bnumber,biprice,bbamount,bidate)values(012,01,142,787302109235 ,23,50,to_date(2012-1-11,YYYY-MM-DD);插入数据前插入数据后学校退书触发器:create or replace trigger Back_triger after insert or update on backbook for each rowbegin update bsave se
30、t bremain=bremain-:new.backamount where bnumber=:new.bnumber;end Back_trigerinsert into inbook(backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bacancle_result)values(231,01,012,787302109235 ,50,to_date(2012-1-11,YYYY-MM-DD),发书错误);学生买书触发器:create or replace trigger buy_triger after insert on buy
31、for each rowbegin update bsave set bsave.bremain=bsave.bremain-:new.bbamount where :new.bnumber=bsave.bnumber;end buy_triger;验证触发器:insert into buy(sbbnumber,stunumber,bnumber,bbamount,bsprice,buydate)values(34,01108008,787302109235 ,39,25,to_date(2012-1-11,YYYY-MM-DD);commit购买之前购买之后:存储过程类:教材库添加新书的存储
32、过程declare in_BNumber char(20):=486548715421; in_bname char(40):=数据库系统概论; in_BSpricer number:=45; in_BIpricer number:=35; in_sto_ID char(5):=02; in_BSnumber char(20):=012;begin in_Book( in_BNumber,in_bname,in_BSpricer, in_BIpricer,in_sto_ID,in_BSnumber); dbms_output.put_line(in_BNumber|-|in_bname|-|i
33、n_BSpricer|-|in_BIpricer|-|in_sto_ID|-|in_BSnumber);commit;end;验证存储过程:declare in_BNumber char(20):=486548715421; in_bname char(50):=数据库系统概论; in_BSpricer double:=25; in_BIpricer double:=35; in_sto_ID char(5):=02; in_BSnumber char(20):=012begin i_Book( in_BNumber,in_bname,in_BSpricer, in_BIpricer,in_s
34、to_ID,in_BSnumber); dbms_output.put_line(in_BNumber|-|in_bname|-|in_BSpricer|-|in_BIpricerr|-|in_sto_ID|-|in_BSnumber);end;存储过程运行前:存储过程运行后:学校退书存储过程Create or replace procedure back_book(vvv backbook.backnumber%type, STO backbook.sto_id%type,bsn backbook.bsnumber%type,bnu backbook.bnumber%type,bac bac
35、kbook.backamount%type,bid backbook.bidate%type,bca backbook.bcancel_result%type)asbegin insert into backbook(backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bcancel_result) values(vvv,Sto,bsn,bnu,bac,bid,bca); commit;end;验证存储过程:declare a char(8):=011; b char(8):=001; c char(20):=008; d char(20)
36、:= 787302109242; e int:=30; f date:=to_date(2012-1-12,YYYY-MM-DD); g char(50):=发书错误begin back_book(a,b,c,d,e,f,g);end;退书之前:退书之后:对图书信息更新的存储过程create or replace procedure update_Goods isbegin update book set bspricre= 40where bname = 数据库系统概论; commit;end ;执行后:begin update_goods;end;存储过程运行前:存储过程运行后:删除书库中
37、图书的存储过程create or replace procedure delete_book isbegindelete from book where bname = 数据库系统概论; commit;end ;执行;begin delete_book;end;执行前:执行后4.1.2 数据入库数据入库过程就是数据录入的过程。在SQL中,可以用EXCEL批量导入的方法录入,也可以逐条录入。由于学校定书的数量很大,所以采用EXCEL批量导入的方式录入。4.2 数据库测试数据库测试是数据库设计必不可少的阶段,它是对整个数据库设计合不合格的检验,也是判定此数据库设计是否达到目标的标准。由于这次的实习
38、的时间较紧许多复杂的功能在此次实习中没有完成,只完成了一些简单的功能。5总结两个周的数据库实习给我留下了一个感觉,就是累。由于这次的实习是和考试穿插进行的,然而考试的科目都是比较难的科目,所以我们往往是白天一天实习,晚上还要上自习,一天基本上没有什么休息时间了。虽然很累但是感觉这两个周是我大学生活中过的最充实的两个周了,这两个周让我学到了很多的东西。通过这次实习让我更加深刻的理解了书本上的知识,得到了一个建立数据库的实践机会,将课本上的知识变为实践。通过这两个周的实习也大大的锻炼了我分析解决问题的能力,在建立数据库的初期,我觉得数据库的建立好像不难,但是越往后做越发现,越做越难,因为在往后做的
39、过程中,发现了前面的数据项有问题或者是关系模式不对,因此就又要回过头去修改数据,修改E-R图,因此浪费了很多的时间。令人遗憾的是在这次实践中,我所做的教材购销系统并没有是想预期的功能,本来是想着挺简单的,但是实践起来真的很难,再加上时间紧迫,所以就只实现了一些简单的功能。虽然这次实习圆满结束了,但我感觉到有点遗憾,因为没能与实际的编程语言联系起来,没能设计出应用程序和图形界面,总觉得有点缺憾。如果能设计出一个能真正使用的数据库应用系统那就更好了。总之,通过这次数据库实习,我收获很大,感受颇深6附录附录1 数据项的定义:数据项编号数据项名数据项含义与其他数据相关系类型长度取值范围D1-1BSNu
40、mber出版社编号Char10D1-2BSupportName出版社名称Char50D1-3BSaddress出版社地址Char50D1-4BSPhone出版社电话Char11D2-1StuNumber班长学号Char20D2-2StuName班长姓名Char20D2-3StuMajor班长专业Char20D2-4StuClass班长班级Char20D3-1BNumber图书编号Char20D3-2BName图书名称Char20D3-3BSPrice图书进价Char20D3-4BIprice图书售价number0999D3-4BPublish图书出版社Char30D3-5BRemain图书剩余量Int0100000D4-1SBBNumber班长购书单编号Char20D4-2BBAmount购书数量Int01000D4-3BBnumber学校购书单号Char20D4-4PDelivery出版社发书单Char20D4-5PPerson出版社发货人Char20D5-1BackNumber退书单号Char20D5_2BCancel_Result退书理由Char500D5_3Sale_ID销售单Char20D6-1Sto_ID仓库编号Char10D6_2StoManger仓库管理员Char20D6_3Sto