数据库设计教材管理系统

更新时间:2024-04-25 13:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数据库系统原理》课程设计

2011年12月日

10 目录

教材管理系统分析与设计 ............................ 错误!未定义书签。

摘要 .......................................... 错误!未定义书签。 第1章 可行性研究 ........................... 错误!未定义书签。

1.1 系统开发背景 ........................... 错误!未定义书签。 1.2 系统开发的意义 ......................... 错误!未定义书签。 1.3 系统的开发目标和规模 ................... 错误!未定义书签。 1.4 经济可行性分析 ......................... 错误!未定义书签。 1.5 操作可行性分析 ......................... 错误!未定义书签。 1.6 系统设计的要求 ......................... 错误!未定义书签。 1.7系统实现功能描述 ....................... 错误!未定义书签。 第2章需求分析与设计 .......................... 错误!未定义书签。

2.1系统设计的任务 ......................... 错误!未定义书签。 2.2 教材管理系统的流程 ..................... 错误!未定义书签。 2.3 教材系统的数据流图 ......................................7 2.4 数据字典 9

第3章 总体设计 ..............................................14

3.1 软件设计流程图 ........................................14 3.2 软件功能模块图 ........................................15 第4章 系统详细设计 ........................... 错误!未定义书签。

4.1系统功能概述 ........................... 错误!未定义书签。 4.2 系统界面 错误!未定义书签。

第5章 系统测试与运行 ........................ 错误!未定义书签。

5.1 登录界面的测试 ......................... 错误!未定义书签。 5.2 教材入库界面测试 ....................... 错误!未定义书签。 5.3 教材出库界面测试 ....................... 错误!未定义书签。 5.4 班级信息录入界面的测试 ................. 错误!未定义书签。 5.5 查询界面的测试 ......................... 错误!未定义书签。 5.6信息统计与分析 ......................... 错误!未定义书签。 第6章系统使用说明书 .......................... 错误!未定义书签。

6.1使用说明: 错误!未定义书签。 6.2操作说明: 错误!未定义书签。

第7章小结 .................................... 错误!未定义书签。 参考文献 ...................................... 错误!未定义书签。

教材管理系统设计

1、系统概述

开发该教材管理系统是为了更好地管理学校的各类教材,便于教材管理人员订书、领书、查询教材资料及其书款情况。使教材信息管理工作系统化、规范化、自动化,从而达到提高教材管理效率的目的。

教材管理系统主要提供学生以班级为单位能从学校教材管理中心完成每学期领到所订教材的功能,其中包括班级信息、教材管理员信息、财务室信息、教师信息、教材信息、出版社信息。此系统可以让教师增加、删除和修改某一学期所定的教材信息,教材管理员可以依据教师提供的应订教材要求和出版社联系订书,还可以让出版社增加、删除和修改预定教材的信息。如果信息无误,财务室根据学生交的教材费给教材管理员拨款,订书成功后,开学初可以将所定教材成功发放给学生所在班级。

系统实现功能描述—— 本系统应该实现的功能如下:

1、系统管理模块:首先是对本系统的操作用户设置权限以及用户基本信息的添加、修改、删除其次是设置有系统初始化,能够在系统出现问题或者有大量错误、冗余数据时进行初始化设置,使系统恢复期初始状态;

2、书费管理局模块:财务科根据学生订书情况和教材费用收缴学生订书费用,并记录相应的数据; 3、教材出入库模块:教材科根据学生订书数量和教材基本信息想学生发放教材的出库管理和向书商下达供书订单并打印教材报表,便于用户直接查看;

4、综合查询模块:根据用户的类型和需求查询教材的库存信息,班级信息以及费用收缴信息; 5、统计分析模块:录入班级信息闭和教师单位信息并设置打印报表功能供用户查看然后操作员根据订书情况统计分析学生买书的人数比例和学生不购买教材的原因分析,一次给校方提供相应的数据,便于改进学校的教材管理措施,满足学生对教材的需求;

6、 帮助模块:介绍本系统的相关信息和操作指南。

2、需求分析

教材管理是教学管理中的组成部分,一般学校的教材管理模式是在学年制基础上以班级为单位进行处理的。院校的教材管理随着学生规模的日益增大、教材日益多样化、学生个人之间教材差异越来越大的现实面前已呈现出无法应对的局面。因此,建立一套与选课相配套的教材管理模式和管理系统具有十分重要的意义和实际应用的迫切性,而且现有的条件、管理理念和技术水平已使之成为可能。

(1)班级信息

班级 交费 财务管理员 登记信息 修改信息 删除信息 领书

班级信息操作流程图

1. 教材管理员信息

教材管理员 管理 教材 登记信息 修改信息 删除信息 发书

教材管理员信息操作流程图

2. 财务管理员信息

财务管理员 拨款 教材管理员 登记信息 修改信息 删除信息 购买教材

财务管理员信息操作流程图

3. 教师信息

教师 选定 教材 统计人数 修改人数 删除人数 预订教材

教师信息操作流程图

4. 教材信息

教材 分类 班级 登记领取信息 修改领取信息 删除领取信息 被领取

教材信息操作流程图

5. 出版社信息

出版社信息操作流程图

被订购 分类 联系购买商 整理信息 教材 出版社 出版 三、概念模型设计

从课程设计选题中可以得知,我们设计的教材管理系统数据库需具备以下功能: (1)可随时查询教材库中订购的教材的种类、数量、订购班级。

(2)可随时查询班级某一学期订购教材的情况。包括订购班级、教材号、教材名称、教材数量、书费等。

(3)当需要时,可通过数据库中保存的出版社电话、邮编及地址等信息向有关书籍的出版社增购有关教材。

(4)查询某种教材被哪些班级订购过(显示班级号、班级名称、班级人数、领书状态)。 (5)查询出版某书籍的出版社的出版社名、电话、地址 (6)查询各种图书借阅次数(显示书名,书号,借阅次数)。

(7)查询图书所属出版社的相关信息(显示书名,书号,出版社名,电话,邮编,地址) (8)查询书库中某种类书籍的书名、书号

(9)查询借阅了多种图书的读者的姓名、借书证号 (10)查询某书架上放置的图书的书名、书号、数量

(11)查询作者投稿的出版社的出版社名、出版社电话、地址 (12)查询读者投稿时间、出版社名

在普通教材的管理应用中,一般的流程有以下几个:

1、管理员可以对用户进行管理,如添加用户,分配用户的角色,如“普通用户” 、“用户管理员” ;删除用户信息;修改用户信息。

2、每个班级将需要订购的教材费用交由财务科科,财务科再通知教材科,根据上报的教材数量找到供应商订购教材,并详细记录教材信息。

3、每个班级按照缴费情况,到教材科领书,并记录领取信息。并且教材管理处根据教库存信息决定是否订购书。

4、校方高层管理人员可在学校教材发放完毕后根据教材科和财务科所提供的学生购书人数比例。

5、当系统出现异常、人为故障时,或者在使用过程中出现了大量的冗余、错误数据时,可通过系统初始化设置使系统恢复初始状态。

其系统流程图如下图所示:

财务科 收缴书费 统计分析表 通知发书 领教材通知 领取教材单 库存报表 各院、系 班级信息报表 学校 教材管理处 定货单 入库单 出版社

2.3 教材系统的数据流图

数据流程图

缴费领书信息查询查询发用户管放理层教材发放核查对询教用户信息不符权材验证用户信息出入库权限用户验证用户密教材科教码材管库修改、分析理费存权收台管理员费用权符账用户信息处理合查询上报缴费信财务科息验证缴费信 息订购教材入库缴费单供书书商2.3.3 E-R图

班号 管理员号 姓名 性别 财务管理员1 交费 专业 n 班级 所属院系 预收费用 管理员号 性别 1 拨款 学校名称 人数 n 应付费用 n 教材管理员 姓名 n 管理 使用 ISBN m m n 教材 教材名 作者 所属类别 预定 1 价格 1 专业 m 选定 来源 n 教师 教师编号 n 出版社 姓名 商标号 出版社名 性别 所选教材 所教课程 所在省市 8 2.4 数据字典

2.4.1.把各数据项的描述信息按下表格式组成数据字典

班级表的结构 字段名 班级名 入学时间 所在院系 班长 班长联系电话 班主任 班主任联系电话 操作员 最后修改时间 书费 所学专业 班级总人数 买书人数 单位信息表的结构 字段名 单位名 负责人 联系电话 书费 操作员 最后修改时间

数据类型 文本(索引) 日期/时间 文本 文本 文本 文本 文本 文本 日期/时间 货币 文本 数字 数字 说明 主键,字段大小为20 字段大小为20 字段大小为8 字段大小为20 预算科目代码,字段大小为8 预算科目代码,字段大小为20 业务金额,字段大小为8 字段大小为20 整型 整型 数据类型 文本(索引) 文本 文本 货币 文本 日期时间 说明 主键,字段大小为20 字段大小为8 字段大小为50 字段大小为8 9

学生书费历史表的结构 字段名 班级名 上期费用 本次费用 本期费用 经办人 上期数量 本次数量 操作员 最后修改时间 说明 班级人数 id 教材表的结构 字段名 教材名 出版社 作者 获奖情况 出版年月 订书单位 经办人 教材数量 教材单价 使用说明

数据类型 文本 货币 货币 货币 文本 数字 数字 文本 日期时间 文本 数字 自动编号 说明 字段大小为20 字段大小为8 整型 整型 字段大小为8 字段大小为50 整型 主键,长整型 递增 数据类型 文本 文本 文本 文本 日期时间 文本 文本 数字 货币 文本 说明 字段大小为50 字段大小为50 字段大小为8 字段大小为50 字段大小为50 字段大小为8 整型 字段大小为50 10

入库时间 说明 操作员 最后修改时间 Id 日期时间 文本 文本 日期时间 自动编号 字段大小为50 字段大小为8 主键,长整型 递增 教材出入库历史表的结构 字段名 教材名 出版社 获奖情况 出版年月 经办单位 经办人 上期数量 本次数量 本期数量 教材单价 使用说明 入库时间 说明 操作员 最后修改时间 id 操作用户表的结构 字段名 用户名 密码

数据类型 文本 文本 文本 日期时间 文本 文本 数字 数字 数字 货币 文本 日期时间 文本 文本 日期时间 自动编号 说明 字段大小为50 字段大小为50 字段大小为50 字段大小为50 字段大小为8 整型 整型 整型 字段大小为50 字段大小为50 字段大小为8 主键,长整型 递增 数据类型 文本 文本 说明 主键,字段大小为8 字段大小为8 11

所在单位 权限一 权限二 权限三 权限四 操作员 最后修改时间 不购书原因记录 字段名 班级名 所在专业 太贵 与专业不符 没必要 其他

文本 是/否 是/否 是/否 是/否 文本 日期/时间 字段大小为50 管理权 收费权 出入库权 查询权 字段大小为8 数据类型 文本 文本 数字 数字 数字 数字 说明 主键 字段大小为50 整型 整型 整型 整型

12

2.4.2数据库关联图

13

第3章 总体设计 3.1 软件设计流程图

系统初始化建立不购书人数统计建立基本教材数据建立班级教材数据操作用户信息建立用户信息班级选择教材建立教材库存数据采购教材数据信息征订教材数据信息不购书原因分析

14

3.2 软件功能模块图

图3.2.1 软件功能模块图

15

对象如下:

(1)班级

班级领书过程图

(2)教材管理员

教材管理员的工作流程图

(3)财务室

(4)教师

(5)教材

(6)出版社

处理要求及功能

(1)能够存储一定数量的图书信息,并方便有效的进行相应的书籍数据操作和管理,这主要包括:

? 图书信息的录入、删除及修改。 ? 图书信息的多关键字检索查询。 ? 图书的出借和返还。

(2)能够对一定数量的读者进行相应的信息存储与管理,这其中包括:

? 读者信息的录入、删除及修改。 ? 读者资料的统计与查询。

(3)能够对一定数量的出版社进行相应的信息存储与管理,这其中包括:

? 出版社信息的录入、删除及修改。 ? 出版社资料的统计与查询。

(4)能够对一定数量的书架进行相应的信息存储与管理,这其中包括:

? 书架信息的录入、删除及修改。 ? 书架资料的统计与查询。

(5)能够对一定数量的作者进行相应的信息存储与管理,这其中包括:

? 作者信息的录入、删除及修改。

16

? 作者资料的统计与查询。 (6)对查询、统计的结果能够列表显示。

4、 概念模型设计

根据数据对象各实体的属性先设计出局部E-R图,然后设计出出总体E-R图,最后解决各局部E-R图间的冲突问题。

数据库需要表达的信息有以下几种:设计分步E-R图如下:

(1)班级信息

(2)教材管理员信息 (3)财务室信息 (4)教师信息 (5)教材信息 (6)出版社信息

数据字典(略)

设计总E-R图如下:

4、逻辑设计

通过E/R模型到关系模型的转化,可以得到如下关系模式: (1)Class(ID,College,Depart,Major,Members,Costs) (2)TestbookManager(ID,Name,Sex)

(3)FinanceManger(ID,Name,Sex,Incomes)

(4)Teacher(ID,TName,Sex,Classname, Testbook)

(5)Testbook(ISBN,Bookname,Autuer,Type,Price,Major) (6)Publisher(ID,Pubname,Address)

5、物理设计

为了提高在表中搜索元组的速度,在实现时应该基于码建立索引。建立索引的表项如下: (1)Part(ID)

(2)Provider(ID) (3)Customer(ID)

17

(4)Supply(PartID, ProviderID) (5)OfferToBuy(CustomerID, PartID)

(6)Business(CustomerID, ProviderID, PartID)

6、用SQL实现

(1)建立Part表

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 );

(2)建立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 );

(3)建立Customer表

CREATE TABLE Customer( ID smallint

IDENTITY(1,1)

PRIMARY KEY CLUSTERED, Name varchar(20)NOT NULL, Address varchar(30), Tel varchar(20), );

(4)建立Supply表

CREATE TABLE Supply( PartID smallint, ProviderID smallint, Price int, Quantity int,

CONSTRAINT PK_SUPPLY

PRIMARY KEY CLUSTERED(PartID, ProviderID), CONSTRAINT PK_SUPPLY_PARTID

18

FOREIGN KEY(PartID) REFERENCES Part(ID), CONSTRAINT PK_SUPPLY_PROVIDERID FOREIGN KEY(ProviderID) REFERENCES Provider(ID) );

(5)建立OfferToBuy表

CREATE TABLE OfferToBuy( CustomerID smallint, PartID smallint, Price int,

Quantity int,

CONSTRAINT PK_OFFERTOBUY

PRIMARY KEY CLUSTERED(PartID, ProviderID), CONSTRAINT PK_OFFERTOBUY_CUSTOMERID FOREIGN KEY(CustomerID) REFERENCES Part(ID), CONSTRAINT PK_OFFERTOBUY_PARTID FOREIGN KEY(PartID) REFERENCES Part(ID) );

(6)建立Business表

CREATE TABLE Business(

CustomerID smallint, ProviderID smallint, PartID smallint, Price int, Quantity int,

CONSTRAINT PK_BUSINESS

PRIMARY KEY CLUSTERED(PartID, ProviderID,CustomerID), CONSTRAINT PK_BUSINESS_PROVIDERID FOREIGN KEY(ProviderID) REFERENCES Provider(ID), CONSTRAINT PK_BUSINESS_CUSTOMERID FOREIGN KEY(CustomerID) REFERENCES Customer(ID) CONSTRAINT PK_BUSINESS_PARTID FOREIGN KEY(PartID) REFERENCES Part(ID) );

(7)供应商操作 1)注册

INSERT INTO Provider(Name,Address,Tel,Intro) VALUES(#Name, #Address, #Tel, #Intro);

19

2)注销

DELETE Provider WHERE(ID=#ID); 3)修改个人信息

UPDATE Provider

SET(Name=#Name, Address=#Address, Tel=#Tel, Intro=#Intro) WHERE(ID=#ID); 4)增加供应项

INSERT INTO Supply(PartID,ProviderID,Price,Quantity) VALUES(#PartID, #ProviderID, #Price, #Quantity); 5)删除供应项

DELETE Supply

WHERE(PartID=#PartID AND ProviderID=#ProviderID);

6)修改供应项

UPDATE Supply SET(Price=#Price, Quantity=#Quantity)

WHERE(PartID=#PartID AND ProviderID=#ProviderID); 注意:系统没有提供面向供应商修改零件信息的接口,所以供应商提供的零件必须已经在零件表中存在;可以这样假设,交易所的管理员负责更新零件信息,而供应商可以向交易所申请增加某种零件的信息。事实上,顾客也可以提出这样的要求。

(8)顾客操作

1)注册

INSERT INTO Customer(Name,Address,Tel) VALUES(#Name, #Address, #Tel); 2)注销

DELETE Customer

WHERE(ID=#ID);

3)修改个人信息

UPDATE Customer SET(Name=#Name, Address=#Address, Tel=#Tel) WHERE(ID=#ID);

4)增加需求项

INSERT INTO OfferToBuy(PartID,CustomerID,Price,Quantity) VALUES(#PartID, #CustomerID, #Price, #Quantity); 5)删除需求项

DELETE OfferToBuy

WHERE(PartID=#PartID AND CustomerID=#CustomerID); 6)修改需求项

UPDATE OfferToBuy SET(Price=#Price, Quantity=#Quantity) WHERE(PartID=#PartID AND CustomerID=#CustomerID );

(9)交易员操作

针对需求分析中提出的问题,我们提出了“协议书”的解决方案,方案说明如下:1)每个交易在达成以前都作为协议书保存在数据库中,协议书具有和交易一样的完备信息,可以在条件成熟的情况下转为一个达成的交易;

2)协议书只有在供应商和顾客都签字的情况下才有效;有效的协议书由交易员签发,协议书一经签发,就生效,表明一个交易的达成,数据库中的数据将同时予以修改;

20

3)协议书可由供应商、顾客或交易员中的任意一个人提出申请。当协议书在双方都没有签字前,协议的双方或者交易员都可以删除这个协议书;但是当协议书签字完毕后,协议书就不可删除或修改,只能由交易员进行处理;

4)协议书有可能在转成交易的过程中失败,因为在交易达成之前,数据库中的数据有可能因为其他交易而变化,一个协议书可能失效,这是允许的。

根据以上对业务的分析,对数据库的模型作一些修改,增加协议书表,可建立其关系模式。交易关系模式及对应的SQL描述:

Agreement(CustomerID,ProviderID,PartID,Price,Quantity, CustomerSign,ProviderSign) CREATE TABLE Agreement( CustomerID smallint, ProviderID smallint, PartID smallint, Price int, Quantity int,

CustomerSign int, ProviderSign int,

CONSTRAINT PK_AGREEMENT

PRIMARY KEY CLUSTERED(CustomerID,ProviderID,PartID) CONSTRAINT PK_AGREEMENT_CUSTOMERID FOREIGN KEY(CustomerID) REFERENCED Customer(ID), CONSTRAINT PK_AGREEMENT_PROVIDERID FOREIGN KEY(ProviderID) REFERENCED Provider(ID), CONSTRAINT PK_AGREEMENT_PARTID FOREIGN KEY(PartID) REFERENCED Part(ID) );

对交易的操作与其他操作相比,对数据的完整性要求比较高,其中需要注意:1)要防止同一用户(供应商、顾客)的数据因两个交易而同时修改;2)需要同时对供应数据库、需求数据库、交易数据库、协议数据库作出修改,而且需要保持这些修改的原子性。

很显然,这些要求正是一个事务的要求,我们可以用一个事务来完成签发一个协议的操作。可以用CREATE PROC来建立一个签发协议事务。

CREATE PROC PASS_AGREEMENT @provideID int, @customerID int,

@partID int, AS

DECLARE @TransName varchar(20)

SELECT @TransName='Pass_Agreement'

BEGIN TRANSACTION @TransName

DECLARE @price int, @quantity int

21

SELECT @price=price, @quantity

FROM Agreement

WHERE providerID=@providerID AND customerID=@customerID AND partID=@partID

INSERT INTO Businees(ProviderID, CustomerID,PartID, Price, Quantity) VALUES ( @providerID, @customerID, @partID, @price, @quantity )

UPDATE Supply

SET quantity=quantity-@quantity

WHERE ProviderID=@providerID AND partID=@partID

IF( SELECT quantity FROM Supply

WHERE ProviderID=@providerID AND PartID=@partID )<0 ROLLBACK TRANSACTION @TransName

DELETE FROM Supply

WHERE quantity=0 UPDATE OfferToBuy

SET quantity=quantity-@quantity

WHERE CustomerID=@CustomerID AND partID=@partID

IF ( SELECT quantity FROM OfferToBuy

WHERE CustomerID=@customerID AND PartID=@partID ) <0 ROLLBACK TRANSACTION @TransName DELETE FROM OfferToBuy WHERE quantity=0

COMMIT TRANSACTION @TransName GO

为了使用方便,这里定义了一个存储过程,功能是完成从Agreement的一个元组到Business的一个元组的转化工作。这里考虑到了删除空的Supply和OfferToBuy项;更重要的是,这里考虑到了非法的Agreement的情况,在一段时间后,由于供应商或者顾客修改数据,Agreement可能就非法,这时就需要把这个事务废除,所以这里检查了Supply表和OfferToBuy表中的数据,确保数据仍然正确。 另外,交易员必须承担的一项任务是更新零件列表。这里在考虑顾客和供应商的时候,并没有给予他们修改两件列表的权利,所以他们必须根据数据库中已有的项更新自己的供求信息。

7、查询与测试结果

使用的DBMS环境。

输入测试数据,并列举10个左右的查询与查询结果(略)。 设计报告中要有屏幕操作截图。

22

8、课程设计总结

通过课程设计,完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步了解和掌握了数据库各方面知识,并提高了动手实践的能力。

体会和收获(要具体一些)。

1.1 将E-R图转换成关系模型

读者、图书、书架、作者和出版社均为实体,因此它们各自转换成一个独立关系模式,实体的属性就是关系的属性,实体的码就是关系的码。由于读者与图书、图书与书架、出版社与作者之间的联系方式为m:n,所以其联系需转化为独立的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。而图书与出版社的联系方式为n:1,所以将其之间的联系与n端实体合并。

所以,具体的总体E-R图向关系模型的转化如下: 读者信息(姓名,借书证号,借书人单位) 图书信息(书名,书号,种类,总数量) 出版社信息(出版社名,电话,邮编,地址) 书架信息(书架号,书架名) 作者信息(姓名,性别,电话)

借阅信息(借书证号,书号,借书日期) 归还信息(借书证号,书号,归还日期) 放置信息(书号,书架号,数量) 供应信息(书号,出版社名,数量) 投稿信息(出版社名,姓名,投稿时间)

(注:标有红色下划线的为主关键字,标有绿色波浪线的为外部关键字)

23

1.2 关系模式优化

1.2.1 关系规范化

1.2.2 关系完整性约束

根据实体完整性、参照完整性和用户定义完整性的规则,设计数据表(注:带红色下划线的为主关键字,带绿色波浪线的为外部关键字):

表4.1 读者信息表

列名

姓名 借书证号 借书人单位

数据类型

Char Char Char

长度

8 10 40

可否为空

not null not null

索引

升序 升序

表4.2 图书信息表

列名

书名 书号 种类 总数量

数据类型

Char Char Char int

长度

40 10 10

可否为空

not null not null not null not null

索引

升序 升序

表4.3 借阅信息表

列名

借书证号 书号 借书日期

数据类型

Char Char Datetime

长度

10 10

可否为空

not null not null not null

索引

升序 升序 升序

表4.4 归还信息表

列名

借书证号 书号 归还日期

数据类型

Char Char Datetime

长度

10 10

可否为空

not null not null not null

索引

升序 升序 升序

表4.5 出版社信息表

列名

出版社名 电话

数据类型

Char Char

长度

20 20

可否为空

not null

索引

升序

24

邮编 地址

Char Char

10 40

表4.6 书架信息表

列名

数据类型

长度

可否为空

索引

书架号 Char 10 not null 升序 书架名

Char

10

表4.7 放置信息表

列名

数据类型

长度

可否为空

索引

书架号 Char 10 not null 升序 书号 Char 10 not null 升序 数量

Int

4

not null

表4.8 供应信息表

列名

数据类型

长度

可否为空

索引

书号 Char 10 not null 升序 出版社名 Char 20 not null 升序 数量

int

4

not null

表4.9 投稿信息表

列名

数据类型

长度

可否为空

索引

姓名 Char 8 not null 升序 出版社名 Char 20 not null 升序 投稿时间

Datetime

not null

升序

表4.10 作者信息表

列名

数据类型

长度

可否为空

索引

姓名 Char 8 not null 升序

性别 Char 10 not null

联系方式

Char

20

2 数据库的实施与维护

2.1 建立数据库及其对象

2.1.1 创建模式

创建数据库“图书管理”

25

1、 打开企业管理器,单击目录树窗口中的sql server服务器,选择工具——向导菜单命令。

2、 在打开的“选择向导”对话框表中双击“数据库”,展开节点,显示数据库操作向导,单击“创建数据库向导”。

3、 单击确定按钮,打开创建数据库向导的欢迎对话框。

4、 单击下一步按钮,打开命名数据库对话框,将对话框的“数据库名称”文本框中显示的默认数据库

名称“Administrator数据库”修改为“图书管理”,数据库文件位置使用默认值。 5、 单击下一步按钮,打开命名数据库文件对话框,将数据文件的初始大小修改为2。 6、 单击下一步按钮,打开定义数据文件增长对话框,选中“文件增长的最大值”,并将其后的文本框的数字修改为4。

7、 单击下一步按钮,打开命名事务日志文件对话框,将文件初始大小修改为2。 8、 单击下一步按钮,打开定义日志增长对话框,选中“事务日志文件不自动增长”,不允许事务日志文件自动增长。

9、 单击下一步按钮,打开完成信息对话框。

10、单击完成按钮,执行创建数据库操作。 11、单击确定按钮,有提示是否为数据库创建维护计划,单击否.至此,完成数据库创建操 作。

5.1.2创建数据表

1、打开查询分析器,在数据库下拉表框中选择“成图书管理”数据库。2、在查询窗口中输入下

面的sql语句。 3、单击工具栏中执行按钮执行查询,完成数据表创建操作。

(1)读者信息表的建立。命令如下: create table 读者信息 (姓名 char(8) not null,

借书证号 char(10) primary key not null, 借书人单位 char(40))

(2)出版社信息表的建立。命令如下:

create table 出版社信息

(出版社名 char(20) primary key not null, 电话 char(20), 邮编 char(10),

26

地址 char(40))

(3)图书信息表的建立。命令如下: create table 图书信息

(书名 char(40) not null,

书号 char(10) primary key not null, 种类 char(10)not null, 总数量 int not null )

(4)借阅信息表的建立。命令如下: create table 借阅信息

(借书证号 char(10) foreign key references 读者信息 not null, 书号 char(10) foreign key references 图书信息 not null, 借书日期 datetime not null, primary key(借书证号,书号))

(5)归还信息

create table 归还信息

(借书证号 char(10) foreign key references 读者信息 not null, 书号 char(10) foreign key references 图书信息 not null, 归还日期 datetime not null,

27

primary key(借书证号,书号))

(6)放置信息

create table 放置信息

(书架号 char(10) foreign key references 书架信息 not null, 书号 char(10) foreign key references 图书信息 not null, 数量 int not null,

primary key(书架号,书号))

(7)书架信息

create table 书架信息

(书架号 char(10) primary key not null, 书架名 char(10) )

(8)供应信息

create table 供应信息

(书号 char(10) foreign key references 图书信息 not null, 出版社名 char(20) foreign key references 出版社信息 not null, 数量 int not null

28

primary key(书号,出版社名))

(9)投稿信息

create table 投稿信息

(姓名 char(8) foreign key references 作者信息 not null,

出版社名 char(20) foreign key references 出版社信息 not null, 投稿日期 datetime not null, primary key(姓名,出版社名))

(10)作者信息

create table 作者信息

(姓名 char(8) primary key not null, 性别 char(10) not null, 联系方式 char(20))

5.1.3 创建索引

(1)考虑到在连接中会频繁使用到表 图书管理.读者信息中的“姓名”和“借书证号”两列,同时“借书证号”列已经存在唯一索引,所以在表图书管理.读者创建一个名为“读者情况”的非聚簇索

29

引,索引关键字为“姓名”、“借书证号”。命令如下:

create nonclustered index 读者情况 on 读者信息(借书证号,姓名)

(2)在表图书上创建名为“图书情况”的非聚簇索引,索引关键字为“书名”、“书号”。命令如下: create nonclustered index 图书情况 on 图书信息(书号,书名)

(3)在表借阅信息上创建名为“借阅时间”的非聚簇索引,索引关键字为“借书日期””。命令如下:

create nonclustered index 借阅时间 on 借阅信息(借书日期)

(4)在表归还信息上创建名为“归还时间”的非聚簇索引,索引关键字为“借书日期””。命令如下:

create nonclustered index 归还时间 on 归还信息 (归还日期)

(5)在表出版社信息上创建名为“出版社情况”的非聚簇索引,索引关键字为“出版社名””。命令如下:

create nonclustered index 出版社情况 on 出版社信息(出版社名)

(6)在表书架信息上创建名为“书架情况”的非聚簇索引,索引关键字为“书架号”。命令如下: create nonclustered index 书架情况 on 书架信息(书架号)

(7)在表投稿信息上创建名为“投稿时间”的非聚簇索引,索引关键字为“投稿日期””。命令如下:

create nonclustered index 投稿时间 on 投稿信息(投稿日期)

(8)在表作者信息上创建名为“作者情况”的非聚簇索引,索引关键字为“姓名””。命令如下: create nonclustered index 作者情况 on 作者信息(姓名)

5.1.4 数据库关系图

为“图书管理”数据库创建关系图

1) 打开企业管理器,并在窗口中选中“图书管理”数据库,在内容窗口中使用鼠标右键单击“关系图”

项目,在弹出的快捷菜单中选择“新建数据库关系图”命令

2) 在打开的“创建数据库关系图”对话框向导中单击“下一步”按钮,打开向导的选择数据表对话框,

在对话框的“可用的表”列表框中分别双击“图书”、“出版社”、“借阅信息”和“读者”数据表,

30

将其铁甲到“要添加到关系图中的表”列表框中

3) 单击“下一步”按钮,打开向导的完成信息对话框,单击“完成”按钮关闭向导。(因为已经创建

了“图书”、“出版社”、“借阅信息”和“读者”数据表之间的关联,所以向导自动绘制出了表之间

的关系连线。

312.2 数据入库

32

33

34

35

准备表“读者信息”数据

“读者信息”数据可以使用记事本创建,如图,注意各个数据项之间使用用以的分隔符,如英文的逗号活空格,一个记录数据为一行。将文件保存为“读者信息.txt”。

1、 在开始菜单中选择Microsoft SQL Server—导入和导出数据。

2、 单击下一步按钮,打开向导的选择数据源对话框。在“数据源”下拉列表框中选中“文本文件”选

36

项,在“文件名”文本框中找见“读者信息.txt”。

3、 单击下一步按钮,打开向导的选择文件格式对话框。因为“读者信息.txt”名单中的数据使用逗号分

隔,每个记录占一行,文本数据没有使用限定符,所以首先应选中“带分隔符,各列之间可用任何字符分隔”单选项。然后在“文本限定符”下拉列表中选中“无”选项。

4、 单击下一步按钮,打开向导的指定列分隔符对话框。这里在读者文件中使用的是逗号分隔各个数据

项,所以无需在此修改。 5、 单击下一步按钮,打开向导的选择目的对话框,向导默认将数据导入到SQL Server数据库,所以只

需在“数据库”下拉列表中选中“成绩管理”数据库。 6、 单击下一步按钮,打开向导的选择源表和视图对话框。单击浏览按钮课查看文本文件的源数据,单

击…按钮,课打开“列映射和转换”对话框。

7、 选中“在目的表追加行”单选项,表示将文本文件中的数据添加到数据表中,单击确定。 8、 单击下一步按钮,打开向导的保存、调度和复制包对话框。选中“立即运行”复选框,表示向导会

执行数据导入操作。 9、 单击下一步按钮,打开向导的完成信息对话框,单击完成,执行数据导入操作。

(1)读者信息

(2)出版社信息

37

(3)图书信息

(4)借阅信息

(5)归还信息

38

(6)放置信息

(7)书架信息

39

书日期)。 命令如下:

select 书名,读者信息.姓名,借阅信息.借书证号,借书人单位,借书日期 from 图书信息,借阅信息,读者信息

where 图书信息.书号=借阅信息.书号 and 图书信息.书名='西方经济学' and

借阅信息.借书证号=读者信息.借书证号

(8)查询出版书籍《信息经济学》的出版社的出版社名、电话、地址

select 出版社信息.出版社名,电话,地址 from 图书信息,出版社信息,供应信息

where 供应信息.出版社名=出版社信息.出版社名 and

供应信息.书号=图书信息.书号 and

图书信息.书名='信息经济学'

'

(9)查询借阅了书号为‘001’或书号为‘002’的借书证号 select 借书证号

from 借阅信息

where 借阅信息.书号='001' union

select 借书证号 from 借阅信息

where 借阅信息.书号='002'

45

(10)查询借阅了书号为‘001’和书号为‘002’的读者的姓名、借书证号 select 姓名,借书证号 from 读者信息

where 借书证号 in ( select 借书证号 from 借阅信息

where 借阅信息.书号='001' and 借书证号 in

(select 借书证号 from 借阅信息

where 借阅信息.书号='002'))

(11)查询借阅过书籍的读者的数量

select count (distinct 借书证号) 读者数量 from 借阅信息

(12)查询书架甲A上放置的图书的书名、书号、数量 连接查询:

select 书名,图书信息.书号,数量 from 图书信息,放置信息,书架信息

where 图书信息.书号=放置信息.书号 and 放置信息.书架号=书架信息.书架号 and

书架名='甲A' 或嵌套查询:

select 书名,书号,数量 from 图书信息 where 书号 in

(select 书号 from 放置信息 where 书架号 in (select 书架号 from 书架信息 where 书架名='甲A'))

46

(13)查询联系方式为13466883304作者投稿的出版社的出版社名、出版社电话、地址 select 出版社名,出版社信息.电话,地址 from 出版社信息 where 出版社名 in (select 出版社名 from 投稿信息 where 姓名 in (select 姓名

from 作者信息

where 联系方式='15110671697'))

(14)查询联系方式为15235403881的读者投稿时间、出版社名 select 作者信息.姓名,投稿日期,出版社名 from 投稿信息,作者信息

where 投稿信息.姓名=作者信息.姓名 and 联系方式='15235403881'

创建触发器

1、使用企业管理器创建触发器

(1) 在图书管理数据库的图书信息表上创建一个名为tsxx_insert_trigger的触发器,当执行INSERT操作时,该触发器被触发,禁止插入记录。 代码:

CREATE TRIGGER tsxx_insert_trigger ON 图书信息 FOR INSERT AS

BEGIN

PRINT('禁止插入记录!') ROLLBACK TRANSACTION END GO

验证:当执行向表“图书信息”中插入一条('环境保护概论','021','管理类','110')的记录时: INSERT

INTO 图书信息

VALUES('环境保护概论','021','管理类','110')

47

2、使用SQL语句创建触发器

(1)在图书管理数据库的借阅信息表上创建一个名为jyxx_update_trigger的触发器,当执行UPDARE操作时,该触发器被触发,不允许修改表中的图书编号。

操作:打开查询分析器,输入以下命令,检查语法并执行即可。 CREATE TRIGGER jyxx_update_trigger ON 借阅信息 INSTEAD OF UPDATE AS

IF UPDATE(书号)

PRINT('禁止删除记录!') GO

验证:当将借阅信息表中借书证号为‘2009043001’所借书的书号改为‘003’时: update 借阅信息 set 书号='003' where 书号='002'

(2)在图书管理数据库的作者信息表上创建一个名为zzxx_delete_trigger的触发器,当执行DELETE操作时,该触发器被触发,禁止删除记录。

操作:打开查询分析器,输入以下命令,检查语法并执行即可。 CREATE TRIGGER tsxx_delete_trigger ON 作者信息 FOR DELETE AS

BEGIN

PRINT('禁止删除记录!')

48

ROLLBACK TRANSACTION END

GO

验证:删除作者信息表中联系方式为13466883304的作者记录: delete

from 作者信息

where 联系方式='13466883304'

6、课程设计总结 (1)小组分工情况:

36号 梁之腾 负责方案设计,需求分析,设计SQL 语言,数据库的调试与测试 37号 李江 负责设计局部的E-R图,总体E-R图 38号 郭彪 负责创建数据库和数据表 39号 张煌 负责收集数据及数据的导入

(2)学习心得

通过本次课程设计,我们进一步了解数据库的基本概念、原理和技术,结合实际的操作和设计,巩固了课堂的教学内容,将理论与实际相结合,加强了自我实践意识、提高了实际动手能力和创新能力。

由于本次课程设计的内容有点多,因此我们四人分工完成了所有工作,途中也遇到了不少问题,例如如何画出准确的E-R图、如何将E-R图转换成关系模式、对索引的概念和功能的了解以及怎样创建索引等。通过自我查找书籍和利用互联网这个自我学习的平台,我们顺利解决了大部分问题。通过互联网上有用的资料,我们认识到要获得有效地E-R图,需局部的E-R图,再合并各局部E-R图并解决冲突,最后得到有效的总体E-R图。而索引是刚开始一直困扰我们的难点,可能是我们上课不专心没有听到老师的讲解。同时,我们在课本找不到对索引的详细解析。因此,我们通过互联网详细了解了它的概念、功能、类型以及怎样创建,使课程设计顺利进行下去。

49

本文来源:https://www.bwwdw.com/article/m57p.html

Top