数据库图书借阅管理系统
《数据库》课程设计报告--图书借阅管理系统的设计与实现

《SQL Server数据库课程设计》题目:图书借阅管理系统的设计与实现院、系:计算机信息与技术系学科专业:软件工程学号: B10060XXX ___学生姓名: XXXX指导教师:XX2012年06月目录引言1第一章需求分析1一、功能需求1二、数据需求2第二章概要设计2一、系统设计目标2二、系统功能设计2三、开发工具的选择3第三章详细设计5一。
实体E—R图5二. 表的设计6三.界面设计7第四章软件实现21一、登录实现21二、图书管理21三、图书借阅21四、图书查询21五、图书增加21第五章软件测试21一、测试方案21二、测试项目21三、测试项目及测试内容21四、测试用例21五、评价22第六章课程设计总结24参考文献25引言随着社会的发展,人们对知识的需求也不断地增长。
在这种形势下,书籍就渐渐地成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据了一定的位置,如何科学地管理图书馆不但关系到读者求知的方便程度,也关系到图书馆的发展,因此,开发一套完善的图书馆管理系统就势在必行.图书馆在正常运营中总是面对大量的读者信息、书籍信息以及两者相互作用产生的借书信息、还书信息。
本软件针对图书馆的业务范围及工作特点,设计了图书查询、新增图书、图书借阅书以及图书归还等5个子系统,这5个子系统包括了图书馆的主要业务,可以全面实现对图书馆采购、编目、检索、统计和流通等业务的计算机管理,使图书馆管理水平和业务水平跃上一个新的台阶。
应用本系统可以在计算机上灵活、方便地管理图书,从而大大的提高了处理速率,使管理更加现代化。
本系统是根据实际情况和具体内容,按照一定的要求,科学、合理的进行系统分析、设计,具体包括画面设计、数据输入、查询、新增、删除等设计。
从而使本系统完全能满足经济性、灵活性、系统性及可靠性的要求。
本系统的实现的主要功能有:图书馆图书的查询、新书的入库、图书的借阅和归还等等功能,是一个基本可以满足借阅者和图书馆管理人员的需要的数据库。
数据库课程设计——图书管理系统

借阅管理模块
实现图书的借阅、归还和 续借功能,记录借阅历史 和当前借阅状态。
系统管理模块
实现用户管理、权限管理 、日志管理等功能,保障 系统的安全性和稳定性。
04
系统实现
开发环境搭建
开发工具
Visual Studio Code、MySQL Workbench
运行环境
Windows 10、MySQL 5.7
息。
借阅数据
包括借阅编号、读者 编号、图书编号、借 阅日期、归还日期等
信息。
系统用户数据
包括用户编号、用户 名、密码、角色和权
限等信息。
性能需求
响应时间
01
系统响应时间应小于2秒。
并发用户数
02
系统应支持至少100个并发用户。
数据备份与恢复
03
系统应具备定期自动备份和手动备份功能,同时能够在需要时
数据库课程设计— —图书管理系统
2024-01-09
目录
• 引言 • 系统需求分析 • 系统设计 • 系统实现 • 系统测试与优化 • 课程设计总结与展望
01
引言
课程设计目的
01 掌握数据库设计的基本步骤和方法
通过课程设计,使学生熟悉数据库设计的流程, 包括需求分析、概念设计、逻辑设计、物理设计 等阶段,并掌握各个阶段的主要任务和方法。
模块实现
图书管理模块
实现图书的录入、修改、删除等功能 ,提供对图书信息的全面管理。
借阅管理模块
实现图书的借阅、归还等功能,记录 借阅历史,方便管理员和读者查看。
读者管理模块
实现读者的注册、登录、个人信息管 理等功能,提供对读者信息的全面管 理。
系统管理模块
实现用户权限管理、系统日志查看等 功能,保障系统的安全性和稳定性。
图书管理系统数据库

图书管理系统数据库1. 简介图书管理系统是一种用于管理图书馆或其他图书资源机构的软件系统。
它旨在提供一个方便的途径来管理图书的借阅、归还、查询等操作。
数据库在图书管理系统中起到了关键的作用,它用于存储和管理图书、用户、借阅记录等相关数据。
本文将介绍图书管理系统数据库的设计,包括数据库的结构和主要表的字段以及它们之间的关系。
2. 数据库结构图书管理系统数据库的结构主要包括以下几个方面:•图书信息表(book table)•用户信息表(user table)•借阅记录表(borrow table)•书架信息表(shelf table)•图书分类表(category table)下面将分别介绍这些表的字段和关系。
图书信息表存储了图书的基本信息,包括图书的编号、名称、作者、出版社、出版日期、价格等。
字段如下:字段名类型说明book_id int 图书编号(主键)name varchar(100) 图书名称author varchar(100) 作者publisher varchar(100) 出版社pub_date date 出版日期price decimal(10,2) 价格用户信息表存储了用户的基本信息,包括用户的编号、姓名、年龄、性别、联系方式等。
字段如下:字段名类型说明user_id int 用户编号(主键)name varchar(100) 用户姓名age int 用户年龄gender char(1) 用户性别(M/F)contact varchar(100) 联系方式2.3 借阅记录表借阅记录表存储了用户借阅图书的相关信息,包括借阅记录的编号、用户编号、图书编号、借阅日期、归还日期等。
字段如下:字段名类型说明borrow_id int 借阅记录编号(主键)user_id int 用户编号(外键)book_id int 图书编号(外键)borrow_date date 借阅日期return_date date 归还日期2.4 书架信息表书架信息表存储了图书馆中的书架信息,包括书架的编号、位置、容量等。
高校图书馆管理系统(SQL数据库)

高校图书馆管理系统(SQL数据库)高校图书馆管理系统(SQL数据库)随着信息技术的发展,高校图书馆管理系统在图书馆运营中的重要性日益凸显。
为了更好地管理馆藏资源和提供优质的服务,许多高校选择使用SQL数据库作为图书馆管理系统的基础。
本文将探讨高校图书馆管理系统中SQL数据库的应用及其优势。
一、图书馆管理系统简介图书馆管理系统是高校图书馆中的核心业务系统,它涵盖了图书馆的各个环节,包括图书采购、编目、借阅、归还、查询等功能。
通过图书馆管理系统,读者可以方便地查找、借阅和归还图书,图书馆工作人员也可以高效地管理馆藏资源。
二、SQL数据库在图书馆管理系统中的应用1. 数据库设计在图书馆管理系统中,SQL数据库的设计是至关重要的一环。
通过合理的数据库设计,可以提高系统的查询效率和安全性。
例如,可以将图书馆中的书籍信息、读者信息、借阅记录等存储在不同的数据库表中,并通过外键关联它们,实现数据的联合查询。
2. 图书馆资源管理SQL数据库提供了强大的查询和管理功能,可以方便地进行图书馆资源管理。
通过SQL语句,图书馆管理员可以实现对图书馆馆藏资源进行分类、检索和统计。
同时,SQL数据库还支持数据的备份和恢复,保障了图书馆数据的安全性。
3. 借阅管理借阅管理是图书馆管理系统中的核心功能之一。
SQL数据库可以存储读者的借阅记录,包括借阅时间、归还时间、借阅状态等信息。
通过SQL查询语句,管理员可以实时监控图书的借阅情况,及时催还逾期图书。
4. 读者管理通过SQL数据库,图书馆管理员可以方便地管理读者信息。
包括读者的个人信息、借阅历史记录、借阅限制等。
管理员可以针对不同的读者类型设置不同的借阅权限,确保图书馆资源的合理利用。
5. 统计和报表SQL数据库提供了强大的统计和报表功能,方便图书馆管理员进行图书馆运营效果的评估。
通过SQL查询语句,可以得到图书馆的借阅量、图书馆藏资源的流通情况等各项指标,为图书馆决策提供有力支持。
学校图书借阅管理系统数据库设计

学校图书借阅管理系统数据库设计概述学校图书借阅管理系统是为帮助学生和教职员工更方便地借阅图书而设计的系统。
该系统需要一个数据库来存储和管理相关信息,本文将详细介绍学校图书借阅管理系统的数据库设计方案。
数据库概述数据库设计目标学校图书借阅管理系统的数据库设计目标是实现对图书、借阅者和借阅记录等信息的有效管理和查询,保证系统的高效性和稳定性。
数据库结构以下是学校图书借阅管理系统的数据库结构设计:1.图书表(Books)–book_id: 图书ID(主键)–title: 图书标题–author: 作者–publisher: 出版社–publish_date: 出版日期–price: 价格–total_copies: 总藏书量–available_copies: 可借数量2.借阅者表(Borrowers)–borrower_id: 借阅者ID(主键)–name: 姓名–grade: 年级–department: 院系–max_books: 最大可借数量3.借阅记录表(BorrowRecords)–record_id: 记录ID(主键)–book_id: 图书ID–borrower_id: 借阅者ID–borrow_date: 借阅日期–return_date: 归还日期数据库设计细节数据库关系•图书表和借阅者表之间是一对多的关系,一个借阅者可以借阅多本图书。
•图书表和借阅记录表之间也是一对多的关系,一本图书可以被多个借阅者借阅。
•借阅者表和借阅记录表之间是一对多的关系,一个借阅者可以有多条借阅记录。
数据库约束•图书表中的total_copies和available_copies不能小于0。
•借阅者表中的max_books不能小于0。
•借阅记录表中的borrow_date不能晚于return_date。
数据库索引在图书表和借阅者表的主键上创建索引,可以提高查询效率。
数据库操作添加图书INSERT INTO Books (book_id, title, author, publisher, publish_date, price, total_copies, available_copies)VALUES ('1', 'Database Systems', 'Abraham Silberschatz', 'McGraw-Hill', '2011-11-01', 50.00, 5, 5);借阅图书INSERT INTO BorrowRecords (record_id, book_id, borrower_id, borrow_d ate, return_date)VALUES ('1', '1', '101', '2022-01-01', '2022-01-15');UPDATE Books SET available_copies = available_copies -1WHERE book_id ='1';归还图书UPDATE BorrowRecords SET return_date ='2022-01-15'WHERE record_id ='1';UPDATE Books SET available_copies = available_copies +1WHERE book_id ='1';总结本文介绍了学校图书借阅管理系统的数据库设计,包括数据库结构、数据库设计细节、数据库操作等内容。
高校图书馆管理系统(数据库)

摘要在计算机日益普及的今天,对个人而言若采用一套行之有效的图书管理系统来管理自己的书籍,会方便许多.对图书管理部门而言,以前单一的手工检索已不能满足人们的要求,往往是投入了大量的人力和财力却得不到高效的管理效率.为了便于图书资料的管理需要有效的图书管理软件,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量和水平,做到高效、智能化管理,达到提高图书借阅信息管理效率的目的。
采用数据库技术生成的图书馆借阅管理系统将会极大地方便借阅者并简化图书馆管理人员和工作人员的劳动,使工作人员从繁忙、复杂的工作进入到一个简单、高效的工作中关键字:图书借阅;人员管理;图书维护;目录1.引言 (1)2。
需求分析阶段 (2)2.1 引言 (2)2.2 需求分析阶段的目标与任务 (2)2。
2.1处理对象 (2)2。
2.2处理功能及要求 (3)2.2。
3。
安全性和完整性要求 (3)2.3 需求分析阶段成果 (3)2.3。
1 体会与收获 (3)2。
3.4 图书管理系统数据字典 (4)3 概念设计阶段 (7)3。
1 引言 (7)3。
2 任务与目标 (7)3.3 阶段结果 (8)4.逻辑设计阶段 (9)4.1逻辑设计的任务和目标 (9)4.2数据组织 (10)4.2.1将E-R图转换为关系模型 (10)4.2。
2模型优化 (11)4。
2.3数据库模式定义 (11)5.物理设计阶段 (14)6.数据库实施阶段 (14)6.1建立数据库、数据表、视图、索引 (14)6.1.1 建立数据库 (14)6。
1。
2 建立数据表 (14)6。
1。
3 建立视图 (16)6.1.4 建立索引 (17)6.2 应用举例 (17)7.结束语 (22)参考文献 (23)1.引言随着社会信息量的与日俱增,职场竞争的日趋激烈,越来越多的人更关注知识的积累、能力的培养。
作为信息存储的主要媒体之一图书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。
图书借阅管理系统需求分析

系统调研与可行性分析1.1.1 现状调查一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉.在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工.一个最典型的手工处理还书过程就是:读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片和读者的借阅证放在一个小格栏里,并在借阅证和每本书贴的借阅条上填写借阅信息。
这样借书过程就完成了。
还书时,读者将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息,这样还书过程就完成了。
以上所描述的手工过程的不足之处显而易见,首先处理借书、还书业务流程的效率很低,其次处理能力比较低,一段时间内,所能服务的读者人数是有限的.利用计算机来处理这些流程无疑会极大程度地提高效率和处理能力。
我们将会看到排队等候借书、还书的队伍不再那么长,工作人员出错的概率也小了,读者可以花更多的时间在选择书和看书上.为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写该程序以提高图书馆的管理效率。
使用该程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,给出统计表格,以便全面掌握图书的流通情况。
1。
1.2 可行性分析本次毕业设计题目:“图书借阅管理系统"主要目的是利用数据库软件编制一个管理软件,用以实现图书、读者以及日常工作等多项管理.同时对整个系统的分析、设计过程给出一个完整论证。
图书管理系统是一种基于集中统一规划的数据库数据管理新模式。
在对图书、读者的管理,其实是对图书、读者数据的管理.本系统的建成无疑会为管理者对图书管理系统提供极大的帮助.本系统的设计主要从以下几方面做起:系统业务流程分析、系统的功能设计、系统的数据库结构设计、系统输入/输出设计等.作这些工作需对数据库知识有足够认识,并深入的了解vb。
net的使用和管理系统的相关知识。
图书馆借阅管理系统及业务管理知识设计

图书馆借阅管理系统及业务管理知识设计一、借阅管理模块借阅管理模块是图书馆借阅业务的核心模块,主要包括借书、还书、图书续借、预约图书等功能。
读者在借阅时需要通过系统登录,并选择所要借阅的图书,系统会自动检查读者的借阅资格和图书的可借阅状态,如果满足借阅条件,则会自动生成借阅记录,并将相应的借阅信息更新到系统数据库。
读者在还书时需要将图书归还到指定的还书点,并通过系统进行归还操作,系统会自动更新借阅记录、图书状态和读者的借阅统计信息。
当读者需要续借图书时,只需登录系统并选择所要续借的图书,系统会自动检查图书的续借次数和续借期限,并生成相应的续借记录和新的借阅期限。
当某本图书被借出后,其他读者可以通过预约图书功能进行预约,系统将根据预约的先后顺序为读者保留图书,并通知读者借阅。
二、图书管理模块图书管理模块是图书馆借阅管理系统的重要模块,主要包括图书入库、图书维护、图书查询等功能。
在图书入库时,图书管理员需要录入图书的相关信息,如书名、作者、出版社、ISBN号等,并生成图书编号。
系统会自动将图书信息保存到数据库,并更新图书的库存数量。
对于现有的图书,图书管理员可以通过系统进行图书信息的维护,如修改图书信息、删除图书、查询图书当前的库存数量等。
读者可以通过系统查询图书的信息,如图书的位置、可借阅状态、馆藏数量等。
三、读者管理模块读者管理模块主要负责读者信息的管理,包括读者的注册、登录、密码找回、信息修改等功能。
读者在注册时需要填写个人基本信息,并选择登录账号和密码,系统会对读者的注册信息做校验和合法性验证,并将读者信息保存到数据库。
读者在登录系统后可以修改个人信息、查询借阅历史、查询预约记录等。
四、流通管理模块流通管理模块主要负责对图书馆的借还流程进行管理,包括借还书流程的自动化、借还书记录的统计和分析等功能。
系统可以自动记录读者的借阅和还书操作,并生成相应的借阅和还书记录,同时系统还能根据借阅记录进行统计和分析,提供借阅热门图书、借阅热门时间段等统计数据,以便图书馆进行决策和优化借阅服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大型数据库课程设计设计报告题目:图书借阅管理系统学号:学生姓名:指导教师:提交时间: 2014-11-22目录1.需求分析 (2)1.1需求调查 (2)1.2系统功能分析 (2)2.概念结构设计 (3)2.1概念设计 (3)2.2E-R图建立 (3)3.逻辑结构设计 (8)3.1E-R图向关系模式转换 (8)3.2建立关系模式 (8)3.3关系模式规范化处理 (8)3.4用户子模式建立 (8)3.5关系模式逻辑结构定义 (10)4.物理结构设计 (11)5.数据库实施与测试 (12)5.1数据库实施 (12)5.1.1数据库及数据库对象建立 (12)5.1.2数据存入数据库 (13)5.1.3函数设计 (13)5.2数据库测试 (14)6.数据库完整型设计 (16)6.1主键及唯一性索引 (16)6.2参照完整型 (16)6.3Check约束 (16)6.4触发器设计 (17)6.5规则 (17)7.数据库视图设计 (18)8.数据库存储过程设计 (19)9.总结 (27)参考文献 (27)10.1某书店图书借阅管理系统需求分析第1章1.1 需求调查通过对各个书店的市场调查,该图书借阅管理系统的需求如下:1)系统管理:实现系统管理人员对系统的管理,包括添加删除用户,数据备份,数据还原,注销等功能。
2)读者信息管理:添加读者信息,根据借书证编号查看读者信息,根据读者ID删除读者,借阅证到期的读者更改借阅证办证时间。
3)书籍信息管理:添加一条书籍信息,删除一条书籍信息,查看一条图书信息,根据图书名查看图书信息,根据图书类别查看图书信息,根据作者查看图书信息,根据出版社产看图书信息,根据ISBN查看图书库存,根据书籍名查看库存。
4)借阅管理:借书管理,还书管理,续借管理,查看所有借阅信息,根据读者ID查看借阅信息,根据读者ID查看借书记录,根据读者ID查看借书记录,根据读者ID查看罚款信息。
1.2系统功能分图书借阅管理系读款统借书书籍者管管管管管信信理理理理理息息管管理理图1-2 系统功能分析图2第2章概念结构设计2.1 概念设计概念结构设计阶段的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS 的概念模型。
即通过对数据流程图的分析归纳和总结,建立E-R图。
概念结构的设计方法有两种:(1)集中式模式设计法:这种方法是根据需求由一个统一机构或人员设计一个综合的全局模式。
这种方法简单方便,适用于小型或不复杂的系统设计,由于该方法很难描述复杂的语义关联,而不适于大型的或复杂的系统设计。
(2)视图集成设计法:这种方法是将一个系统分解成若干个子系统,首先对每一个子系统进行模式设计,建立各个局部视图,然后将这些局部视图进行集成,最终形成整个系统的全局模式。
2.2 E-R图建立局部E-R图1.对‘读者'建立E-R图,其中‘读者ID'为主键读ID密读者姓联系方读者读者性别办证时间读者类别读者单位图E-R2-1 图读者32.对‘书籍'建立E-R图,其中‘图书ID'为主键图2-2 书籍E-R图3.对‘读者类别'建立E-R图,其中‘读者类别编号'为主键读者类别编号借阅证期限读者类别名读者类别持有图书最长期限允许借阅图书最大数图2-3 读者类别E-R图44、对‘借阅'建立E-R图ISBN ID 图书图2-4 借阅E-R图、对‘还书'建立E-R图5 ISBN ID 图书ID 读者还书图书名还书时间读者姓名图2-5还书E-R图56、对‘罚款'建立E-R图读者姓名ID 读者归还日期图2-6罚款E-R图7、对‘罚款类别'建立E-R图罚款名称罚款类别编号罚款类别罚款金额罚款原因图2-7罚款类别E-R图6全局E-R图读者类别实体罚款类别实体登记7逻辑结构设计第3章图向关系模式转换3.1 E-R图转换为与选R 数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一产品所支持的数据模型相符合的逻辑结构。
用的DBMS一般所用的数据库环境已经给在实际应用中,逻辑结构是独立于任何一种数据模型的,。
由于目前使用的数据库基本上都是关系数据库,因或SQL Server或OracelMySql)定(如的特点和限制转换为特定的此首先需要将E-R图转换为关系模型,然后根据具体DBMS DBMS支持下的数据模型,最后进行优化。
3.2 建立关系模式,密码,读者姓名,读者性别,读者类别,读者单位,办证时间,联读者ID:读者信息系方式;,持有图书最长期允许借阅图书最大数读者类别编号,读者类别名,读者类别信息:限,借阅证期限;,书籍名称,书籍类别,书籍作者,出版社,定价,出版日期,ID,ISBN书籍信息:图书,状态;登记日期ISBN,书籍名,读者借书时间;借书信息:借书证编号,读者姓名,书籍编号,,读者姓名,还书时间;还书信息:借书证编号,书籍编号,ISBN,图书名罚款信息:借书证编号,读者姓名,书籍编号,ISBN,书籍名,借阅日期,归还日期,应还日期,罚款类别编号,处理状态;罚款类别:罚款类别编号,类别名,罚款原因,罚款金额3.3 关系模式规范化处理根据F,分析每一个关系模式是否满足3NF,对不满足3NF的关系模式要进行规范化处理。
优化处理,消除不必要的数据冗余3.4 用户子模式建立根据需求分析,研究建立满足不同需求的用户子模式,子模式表示形式为:子模式名(属性列表)83.5 关系模式逻辑结构定义1.读者详细信息约束长度数据类型字段名Not null Char 10 读者ID 主键,Not null char 20 密码Not null 姓名 char 15男char /性别女,2 not null外键,char 类别编号 2 not nullnull 30 单位charNot null date 办证日期Null联系方式char20表3-12、读者类别详细信息约束长度数据类型字段名'01'/'02' 2 主键,读者类别编号 char'普通读者'/' 读者类别名高级读者char 15 '可借阅最大数目 smallint 3/6持有最长期限smallint 30/60smallint借阅证期限 1表3-293、书籍详细信息字段名数据类型长度约束10 图书ID char 主键Not null char ISBN 20Not null 30 char 书籍名Not null 10 Char 书籍类别Not null char 15 作者Not null 30 char 出版社Not null 定价 money Not null 出版日期 dateNot null date 登记日期Not nullbit状态表3-34、罚款类别详细信息字段名数据类型长度约束char 5 主键罚款类别编号Not null 15 char 罚款类别名Not null 罚款原因 30 charnullmoney罚款金额表3-45、借阅详细信息字段名数据类型长度约束主键,自增int IDNot null 图书ID 10 charNot null 10 char 读者IDNot null ISBN char 20Not null 借走日期 datenull 归还日期dateNot null date 应还日期null char 5 罚款类别编号null处理状态bit表3-510数据库物理结构设计章第4数据库物理设计:设计数据库的物理结构,根据数据库的逻辑结构来选定RDBMS(如Oracle、Sybase等),并设计和实施数据库的存储结构、存取方式等。
数据库物理设计是后半段。
将一个给定逻辑结构实施到具体的环境中时,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法,这个过程就是数据库的物理设计。
物理结构依赖于给定的DBMS和和硬件系统,因此设计人员必须充分了解所用RDBMS的内部特征、存储结构、存取方法。
数据库的物理设计通常分为两步,第一,确定数据库的物理结构,第二,评价实施空间效率和时间效率确定数据库的物理结构包含下面四方面的内容:1、确定数据的存储结构2、设计数据的存取路径3、确定数据的存放位置4、确定系统配置数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,选择一个优化方案作为数据库物理结构。
在数据库物理设计中,最有效的方式是集中地存储和检索对象。
11第5章数据库实施与测试5.1 数据库实施5.1.1数据库及数据库对象建立(1)--建立读者类别表create table读者类别(读者类别编号char(2)primary key not null check(读者类别编号in('01','02')),读者类别名char(15)not null check(读者类别名in('普通读者','高级读者')),可借阅最大数目smallint not null check(可借阅最大数目in(3,6)),持有最长期限smallint not null check(持有最长期限in(30,60)),借阅证期限smallint not null check(借阅证期限in(1)))(2)--建立读者表create table读者(读者ID char(10)not null primary key,密码char(20)not null,姓名char(15)not null,性别char(2)not null check(性别in('男','女')),类别编号char(2)not null foreign key(类别编号)references读者类别(读者类别编号), 单位char(30)null,办证日期date not null,联系方式char(20)null)(3)--建立书籍表create table书籍(图书ID char(10)not null primary key,ISBN char(20)not null,书籍名char(30)not null,书籍类别char(10)not null,作者char(15)not null,出版社char(30)not null,定价money not null,出版日期date not null,登记日期date not null,状态bit not null)12(4)--建立罚款类别表create table罚款类别(罚款类别编号char(5)not null primary key,罚款类别名char(15)not null,罚款原因char(30)not null,罚款金额money null)(5)--建立借阅信息表create table借阅信息(id int primary key identity(1,1),--id 自增图书ID char(10)not null,读者ID char(10)not null,ISBN char(20)not null,借走日期date not null,归还日期date null,应还日期date not null,罚款类别编号char(5)null,处理状态bit nullforeign key(图书ID)references书籍(图书ID),foreign key(读者ID)references读者(读者ID),foreign key(罚款类别编号)references罚款类别(罚款类别编号) )5.1.2数据存入数据库读者信息由存储过程随机产生100条数据,代码略书籍信息由存储过程随机产生100条数据,代码略5.1.3自定义函数--根据读者ID判断读者证是否过期,判断依据:将读者办证日期加上一年,再和当前系统时间比较alter function check_reader_date(@reader_id char(10))returns bitasbegindeclare@reader_register_date date,@result bitset@reader_register_date=(select办证日期from读者where读者ID=@reader_id)if(Dateadd(year,1,@reader_register_date)<CAST(GETDATE()as date))--如果过期,返回bit=0set@result=0elseset@result=1return@resultend--测试check_reader_date()13declare@result bitset@result=dbo.check_reader_date('1000002')if(@result=1)print'没过期'elseprint'过期'判断读者已借的书籍数量是否超出限制--bit returns char(10))create functioncheck_reader_books(@reader_id asbegin记录返回值--@result bit declare记录读者最高可借的书籍数量--@up_book_num smallint declare记录读者已借的书籍数量--@borrow_num smallint declare可借阅最大数目@up_book_num=(select set.读者类别from dbo类别编号读者类别编号=(select where.读者from dbo@reader_id =读者ID where))借阅信息dbo.(*)from set@borrow_num=(select count) =0 and处理状态where读者ID=@reader_id) <@up_book_num if(@borrow_num--可以再借1 =set@resultelse所借数目达到上限--0 =@result set@result returnend--判断读者是否有罚款没有交bit returns10))check_ticket(@reader_id char(alter functionas beginbitdeclare@result罚款类别编and=@reader_id dbo.借阅信息where读者ID select if((count(*)from) 0号!=null)= ,返回--如果借阅信息里读者的罚款记录为空1 @result=setelse14set@result=0return@resultend--select dbo.check_ticket('1000043')--根据读者ID获得图书应该归还的日期create function lend_date(@reader_id char(10))returns dateasbegindeclare@date datedeclare@up_borrow_date smallintset@up_borrow_date=(select持有最长期限from dbo.读者类别where读者类别编号=(select类别编号from dbo.读者where读者ID=@reader_id)) set@date=Dateadd(day,@up_borrow_date,cast(getdate()as date))return@dateend15第6章数据库完整性设计6.1 主键及唯一性索引主键及索引表表主建立唯一性索creatuniquinde reader_phon)读者手机联系方o读creatuniquinde book_ISBN(ISBN)书籍ISB o书creatuniquinde reader_no)读者类别编读者类别读者类别编o读者类别create unique index ticket_no) 罚款类别编号罚款类别( )罚款类别编号罚款类别on(表6-16.2 参照完整性设计1、读者表中将属性类别编号设为外键类别编号char(2)not null foreign key(类别编号)references读者类别(读者类别编号),2、借阅信息表中的图书ID属性、读者ID属性、罚款类别编号属性设为外键foreign key(图书ID)references书籍(图书ID)foreign key(读者ID)references读者(读者ID)foreign key(罚款类别编号)references罚款类别(罚款类别编号)6.3 Check约束读者类别表的读者类别编号进行check约束:check(读者类别编号in('01','02'、1))2、读者类别表的读者类别名进行check约束:))''高级读者in('普通读者',check(读者类别名读者类别表的可借阅最大数目进行check约束:check(可借阅最大数目in(3、3,6))4、读者类别表的持有最长期限进行check约束:))60in(30,check(持有最长期限5、读者类别表的借阅证期限进行check约束: ))in(1check(借阅证期限6、读者表的性别属性进行check约束:check(性别in('男','女'))166.4 触发器设计--创建触发器,当删除借阅信息表中一条数据时,根据书籍ID将书籍表中对应的书籍的状态改为ture create trigger jieyue_delete on借阅信息after deleteasbegindeclare@book_id char(10)select@book_id=图书ID from deletedupdate书籍set状态=1 where图书ID=@book_idend6.5 规则--创建规则,读者手机号必须为数字create rule phonenum_ruleas@phonenum like'[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'goexec sp_bindrule'phonenum_rule','dbo.读者.联系方式'17第7章数据库视图设计--创建书籍库存视图create view book_countasselect ISBN,COUNT(ISBN)as库存from书籍group by ISBN--创建书籍库存create view book_stockasselect书籍.ISBN,书籍名,书籍类别,作者,出版社,定价,出版日期,库存from dbo.book_count,书籍where书籍.ISBN=dbo.book_count.ISBN--创建借书视图create view book_borrowasselect dbo.借阅信息.图书ID,读者ID,dbo.借阅信息.ISBN,dbo.书籍.书籍名,借走日期from dbo.借阅信息,dbo.书籍where借阅信息.图书ID=书籍.图书ID--创建还书视图create view book_lendasselect借阅信息.图书ID,借阅信息.读者ID,借阅信息.ISBN,书籍.书籍名,归还日期from dbo.借阅信息,dbo.书籍where处理状态=1 and借阅信息.图书ID=书籍.图书ID--创建罚款视图alter view ticketasselect借阅信息.读者ID,读者.姓名,罚款类别.罚款原因,罚款类别.罚款金额from借阅信息,罚款类别,读者where借阅信息.罚款类别编号!='00'and借阅信息.罚款类别编号=罚款类别.罚款类别编号ID读者读者ID.and借阅信息读者=.18第8章数据库存储过程设计--创建存储过程添加读者信息create procedure add_reader@reader_password char(20),@reader_name char(15),@reader_sex char(2),@reader_kinds char(2),@reader_companychar(30),@reader_phone char(20)asbegin--产生编号declare@n intset@n=(select count(*)from读者)set@n=@n+1000000--获得当前日期作为办证日期declare@reader_date dateset@reader_date=Getdate()insert into读者values(@n,@reader_password,@reader_name,@reader_sex,@reader_kinds,@reader_company,@reader_date,@re ader_phone)if@@ERROR>0 --如果上面一条语句出错,则回滚事物,并返回beginrollback tranprint'执行过程中遇到错误'return 0endselect*from读者where读者ID=@n--print '增加成功'end--管理员根据借书证编号查看读者信息的存储过程create procedure reader_info@reader_no char(10)asbeginif((select COUNT(*)from读者where读者ID=@reader_no)=1)select*from读者where读者ID=@reader_noelseprint'没有该读者'end--根据读者ID删除读者的存储过程create procedure delete_reader@reader_no char(10)asbeginif((select COUNT(*)from读者where读者ID=@reader_no)=1)19begindelete from读者where读者ID=@reader_noprint'删除成功'endelseprint'没有该读者'end--管理员删除读者证到期的读者的信息create procedure delet_reader_by_dateasbegindeclare@now_date dateset@now_date=GETDATE()delete from读者where Dateadd(year,1,办证日期)<CAST(GETDATE()as date)end--管理员借阅证到期的读者延长借阅证时间create procedure alter_reader_register_date@reader_id char(10)asbeginupdate读者set办证日期=cast(GETDATE()as DATE)where读者ID=@reader_id print'修改成功'end--书籍信息管理--存储过程添加一条书籍信息alter procedure add_book@ISBN char(20),@book_name char(30),@book_kinds char(10),@book_author char(15),@book_publish char(30),@book_price smallint,@book_publish_date dateasbegin--产生编号declare@book_id char(10),@m int,@n intset@m=(select count(*)from书籍)set@n=100000000+@mset@book_id=cast(@n as char(10))--产生登记日期declare@book_rigste_date dateset@book_rigste_date=GETDATE()--产生书籍状态declare@book_state bit20set@book_state=1insert into书籍values(@book_id,@ISBN,@book_name,@book_kinds,@book_author,@book_publish,@book_price,@book_publ ish_date,@book_rigste_date,@book_state)select*from书籍where图书ID=@book_idprint'插入成功'end--根据图示ID删除一条书籍信息create procedure delete_book@book_id char(10)asbegindelete from书籍where图书ID=@book_idend--根据图书ISBN查看一条图书信息create procedure find_book_by_id@book_id char(10)asbeginselect*from书籍where图书ID=@book_idend--根据图书名查看图书信息create procedure find_book_by_name@book_name char(30)asbeginselect*from书籍where书籍名=@book_nameend--根据图书类别查看图书信息create procedure find_book_by_kinds@book_kinds char(10)asbeginselect*from书籍where书籍类别=@book_kindsend--根据作者查看图书信息create procedure find_book_by_author@book_author char(15)asbeginselect*from书籍where作者=@book_authorend--根据出版社产看图书信息create procedure find_book_by_publishment@book_publishment char(30)as21beginselect*from书籍where出版社=@book_publishmentend--根据ISBN查看图书库存create procedure find_book_stock_by_ISBN@ISBN char(20)asbeginselect*from dbo.book_stock where ISBN=@ISBNend--根据书籍名查看库存create procedure find_book_stock_by_name@book_name char(30)asbeginselect*from dbo.book_stock where书籍名=@book_nameEnd--书籍借阅管理--借书管理alter procedure reader_borrow_book@reader_id char(10),@book_id char(10)asbegindeclare@state bitset@state=dbo.check_reader_date(@reader_id)if((select COUNT(*)from dbo.读者where读者ID=@reader_id)=1)--读者存在--判断读者证是否过期if(@state=1)--没有过期--判断读者已借的书籍数量是否超出限制if(dbo.check_reader_books(@reader_id)=1)--已借的书籍数量没有超出限制--判断读者是否有付款没有交if(dbo.check_ticket(@reader_id)=1)--没有罚款未交if((select状态from dbo.书籍where图书ID=@book_id)=1)--图书状态为可借begin--插入借阅信息declare@ISBN char(20),@reader_borrow_date date,@up_date dateset@ISBN=(select ISBN from dbo.书籍where图书ID=@book_id)set@reader_borrow_date=GETDATE()set@up_date=dbo.lend_date(@reader_id)22insert into借阅信息(图书ID,读者ID,ISBN,借走日期,应还日期,处理状态) values(@book_id,@reader_id,@ISBN,@reader_borrow_date,@up_date,0)update dbo.书籍set状态=0 where图书ID=@book_idselect*from dbo.借阅信息where图书ID=@book_id and读者ID=@reader_id endelseprint'图书不可借'elseprint'有罚款未交,不能借书,请交罚款'elseprint'已借的书籍数量达到限制,不能再借'else--过期print'借阅证过期'elseprint'读者不存在'end--还书管理alter procedure reader_lend_book@reader_id char(10),@book_id char(10),@tickte_kinds char(5)asbegindeclare@reader_lend_date date,@state bitset@state=1set@reader_lend_date=cast(GETDATE()as date)if((select COUNT(*)from dbo.借阅信息where图书ID=@book_id and读者ID=@reader_id)=0) print'没有该读者或该书籍的借阅信息'elseif((select COUNT(*)from dbo.借阅信息where图书ID=@book_id and处理状态=0)=0) print'该图书已经归还'else--判断是否丢失书籍if(@tickte_kinds='02')--丢失书籍,更新借阅信息beginupdate dbo.借阅信息set归还日期=@reader_lend_date,罚款类别编号=@tickte_kinds,处理状态=@state where图书ID=@book_id and处理状态=0select*from dbo.借阅信息where图书ID=@book_id--delete from 书籍where 图书ID=@book_idendelse23--判断是否损坏书籍if(@tickte_kinds='01')beginupdate dbo.借阅信息set归还日期=@reader_lend_date,罚款类别编号=@tickte_kinds,处理状态=@state where图书ID=@book_id and处理状态=0select*from dbo.借阅信息where图书ID=@book_idupdate dbo.书籍set状态=1 where图书ID=@book_idendelse--判断是否超期if(@tickte_kinds='03')beginupdate dbo.借阅信息set归还日期=@reader_lend_date,罚款类别编号=@tickte_kinds,处理状态=@state where图书ID=@book_id and处理状态=0select*from dbo.借阅信息where图书ID=@book_idupdate dbo.书籍set状态=1 where图书ID=@book_idendelse--判断是否超期并损坏if(@tickte_kinds='04')beginupdate dbo.借阅信息set归还日期=@reader_lend_date,罚款类别编号=@tickte_kinds,处理状态=@state where图书ID=@book_id and处理状态=0select*from dbo.借阅信息where图书ID=@book_idupdate dbo.书籍set状态=1 where图书ID=@book_idendelsebeginupdate dbo.借阅信息set归还日期=@reader_lend_date,罚款类别编号=@tickte_kinds,处理状态=@state where图书ID=@book_id and处理状态=0select*from dbo.借阅信息where图书ID=@book_idupdate dbo.书籍set状态=1 where图书ID=@book_idendend--续借管理create procedure renew_book@reader_id char(10),@book_id char(10)asbegindeclare@should_lend_date date--判断是否有该读者借阅该图书的借阅信息if((select COUNT(*)from借阅信息where图书ID=@book_id and读者ID=@reader_id and处理状态=0)=0)print'该读者没有借阅该书籍或图书已经归还'else24--判断是否超期set@should_lend_date=(select应还日期from借阅信息where图书ID=@book_id and读者ID=@reader_id and处理状态=0)if(CAST(GETDATE()as date)>@should_lend_date)print'已超期借阅,不能续借,请归还书籍'else--符合续借条件,可以续借begindeclare@up_date datedeclare@up_borrow_date smallintset@up_borrow_date=(select持有最长期限from dbo.读者类别where读者类别编号=(select类别编号from dbo.读者where读者ID=@reader_id)) set@up_date=(select应还日期from借阅信息where图书ID=@book_id and读者ID=@reader_id and处理状态=0)set@up_date=Dateadd(day,@up_borrow_date,cast(getdate()as date))update借阅信息set应还日期=@up_date where图书ID=@book_id and读者ID=@reader_id and处理状态=0select*from借阅信息where图书ID=@book_id and读者ID=@reader_id and处理状态=0endend--查看所有借阅信息alter procedure find_lb_infoasbeginselect*from dbo.借阅信息end--根据读者ID查看借阅信息create procedure find_lb_info_by_readerID@reader_id char(10)asbeginselect*from dbo.借阅信息where读者ID=@reader_idend--根据读者ID查看罚款信息create procedure find_ticket_by_readerID@reader_id char(10)asbeginselect*from ticket where读者ID=@reader_idend--查看借书记录create procedure find_book_borrow25asbeginselect*from dbo.book_borrowend--根据读者ID查看借书记录create procedure find_book_borrow_by_readerID@reader_id char(10) asbeginselect*from book_borrow where读者ID=@reader_idend--根据读者ID查看还书记录create procedure find_book_lend_by_readerID@reader_id char(10) asbeginselect*from book_lend where读者ID=@reader_idEnd26总结理论联系实际才能做好一件事,学习一门课程同样是这样。