数据库设计 |
您所在的位置:网站首页 › 图书馆借还书系统er图 › 数据库设计 |
目录 1、需求分析(功能分析及数据) 2、概要模型设计 3、逻辑结构设计 4、物理结构设计与数据库实施 5、数据库运行与维护 1.设计一个插入数据的问题,并用SQL实现 2.设计一个修改数据的问题(能够用到like和排序),并用SQL实现 3.设计一个删除数据的问题(能够用到关系代数的差),并用SQL实现 4.设计一个查询数据的问题(能够用到关系代数的除),并用SQL实现 5.设计一个查询数据的问题(能够用到外连接),并用SQL实现 6.设计一个查询数据的问题(能够用到表的自身连接),并用SQL实现 7.设计一个分组统计数据的问题(基于多表连接基础上),并用SQL实现 8.设计一个数据安全的问题(能够用到自主存取控制的授权或回收权限),并用SQL实现 1、需求分析(功能分析及数据)图书馆作为一种信息集散地,图书、用户借阅得资料繁多,包含很多信息资源数据的管理。而大多数图书馆却反对数据的规范化整理,导致数据繁多不易查找、数据冗余等众多问题,现在亟需建立一个图书管理系统,让图书管理工作更加规范化。 读者管理:该功能针对读者进行管理。 读者信息:对读者身份证、性别、年龄、姓名、联系方式进行管理。 读者借阅信息:对读者编号、可借阅图书数量、已借阅图书数量、违约次数等信息进行管理。 图书管理:该功能针对图书进行管理。 图书信息:对图书的书名、作者、出版社、ISBN进行管理。 图书借阅信息:对图书编号、入库时间、出库时间、剩余库存等信息进行管理。 图书流通管理:该功能针对图书流通进行管理。 图书借阅:对借阅订单编号、图书编号、读者编号、到期时间进行管理。 图书归还:对借阅订单编号、图书编号、读者编号、归还时间进行管理。 图书返款:对借阅订单编号、图书编号、读者编号、罚款金额进行管理。 图书管理人员:该功能针对管理图书的工作人员进行管理。 图书管理人员:对人员编号、姓名、管理区域进行管理。 2、概要模型设计 3、逻辑结构设计(1)根据E-R图,给出的关系模式。 (2)判断各个表属于第几范式。 (1) 读者信息(身份证,姓名,性别,联系方式,年龄)读者借阅情况(读者编号,可借阅图书数量,已借阅图书数量,违约次数,身份证)图书信息(ISBN,书名,出版社,作者)图书借阅信息(图书编号,入库时间,出库时间,剩余库存,ISBN)图书借阅(借阅订单编号,到期时间,读者编号,图书编号)图书归还(借阅订单编号,归还时间,读者编号,图书编号)图书罚款(借阅订单编号,罚款金额,读者编号,图书编号)图书管理人员(人员编号,姓名,管理区域)(2) 读者信息表身份证→姓名,身份证→性别,身份证→联系方式,身份证→年龄 (姓名,联系方式)→身份证,(姓名,联系方式)→性别,(姓名,联系方式)→年龄 候选码:(身份证),(姓名,联系方式) 这里将主码设置为身份证,则该表属于BCNF 读者借阅情况表(读者编号)→可借阅图书数量,(读者编号)→已借阅图书数量,(读者编号)→ 违约次数,(读者编号)→身份证 (身份证)→读者编号,(身份证)→可借阅图书数量,(身份证)→已借阅图书数 量,(身份证)→违约次数 候选码:(读者编号),(身份证) 这里将主码设置为读者编号,则该表属于BCNF 图书信息表(ISBN)→作者,(ISBN)→书名,(ISBN)→出版社 候选码:(ISBN) 该表属于BCNF 图书借阅信息表图书编号→入库时间,图书编号→出库时间,图书编号→剩余库存,图书编号→ISBN 候选码:(图书编号) 该表属于BCNF 图书借阅表借阅订单编号→读者编号,借阅订单编号→图书编号,借阅订单编号→到期时间 候选码借阅订单编号 该表属于BCNF 图书归还表借阅订单编号→归还时间,借阅订单编号→图书编号,借阅订单编号→读者编号 候选码:借阅订单编号 该表属于BCNF 图书罚款表借阅订单编号→罚款金额,借阅订单编号→图书编号,借阅订单编号→读者编号 候选码:借阅订单编号 该表属于BCNF 图书管理人员表人员编号→姓名,人员编号→管理区域 候选码:人员编号 该表属于BCNF 4、物理结构设计与数据库实施用SQL实现数据库和所有数据表的创建,包括相应的完整性约束(主外键等)。 Create Database 图书管理系统 ON (name=lib_data,filename='d:\database\lib_data.mdf') LOG ON (name=lib_log,filename='d:\database\lib_log.ldf') create table 读者信息( 身份证 int not null primary key, 姓名 char(20) not null, 性别 char(10) not null check(性别 in ('男','女')), 联系方式 char(20) not null, 年龄 int not null ) create table 读者借阅情况( 读者编号 char(15) not null primary key, 可借阅图书数量 int not null, 已借阅图书数量 int not null, 违约次数 int default 0, 身份证 int FOREIGN KEY REFERENCES 读者信息(身份证) ) create table 图书信息( ISBN int not null primary key, 出版社 char(20) not null, 作者 char(20) not null, 书名 char(20) not null ) create table 图书借阅信息( 图书编号 char(15) not null primary key, 剩余库存 int not null, 入库时间 char(15) not null, 出库时间 char(15) not null, ISBN int FOREIGN KEY REFERENCES 图书信息(ISBN) ) create table 图书借阅( 借阅订单编号 char(15) not null primary key, 到期时间 char(15) not null, 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号), 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号) ) create table 图书归还( 借阅订单编号 char(15) not null primary key, 归还时间 char(15) not null, 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号), 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号) ) create table 图书罚款( 借阅订单编号 char(15) not null primary key, 罚款金额 int not null default 0, 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号), 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号) ) create table 图书管理人员( 人员编号 int not null primary key, 姓名 char(20) not null, 管理区域 char(20), 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号), ISBN int FOREIGN KEY REFERENCES 图书信息(ISBN) ) 5、数据库运行与维护 1.设计一个插入数据的问题,并用SQL实现问题:请插入一个身份证为‘1001’,性别‘男’,联系方式为‘1375642’,姓名为‘小明’的,年龄为‘21’的数据到读者信息表。 代码: insert into dbo.读者信息 values ('1001','小明','男','1375642','21') 2.设计一个修改数据的问题(能够用到like和排序),并用SQL实现问题:请将读者信息表中姓中带‘小’的读者,年龄都增加1岁,并按照年龄从小到大进行排序。 代码: update dbo.读者信息 SET 年龄 = 年龄 + 1 where 姓名 like '小%' select * from dbo.读者信息 order by 年龄1.读者信息表(原) 2.读者信息表(修改后) 3.设计一个删除数据的问题(能够用到关系代数的差),并用SQL实现问题:将没有借阅过图书的读者借阅情况删除。 代码: delete from dbo.读者借阅情况 where not exists (select * from 图书借阅 where 读者借阅情况.读者编号 = 图书借阅.读者编号)1.读者借阅情况表(原) 2.图书借阅表 3.读者借阅情况表(删除后) 4.设计一个查询数据的问题(能够用到关系代数的除),并用SQL实现问题:查询至少借阅了‘4001’,‘4002’两本书的读者编号。 代码: select distinct 读者编号 from 图书借阅 L1 where not exists( select * from 图书借阅 L2 where 图书编号 in ('4001','4002') and not exists( select * from 图书借阅 L3 where L1. 读者编号=L3.读者编号 and L2.图书编号=L3.图书编号)) 5.设计一个查询数据的问题(能够用到外连接),并用SQL实现问题:将有过违约的读者全部信息输出。 代码: select * from dbo.读者借阅情况,dbo.读者信息 where 读者借阅情况.身份证 = 读者信息.身份证 and 违约次数 0 6.设计一个查询数据的问题(能够用到表的自身连接),并用SQL实现问题:查询ISBN为‘3001’书的倒数第二次入库时间。 代码: select B.入库时间 from dbo.图书借阅信息 A,dbo.图书借阅信息 B where A.ISBN = B.ISBN and A.入库时间 = B.出库时间 and A.ISBN ='3001' 7.设计一个分组统计数据的问题(基于多表连接基础上),并用SQL实现问题:查询每一种图书编号,对应读者的违约次数总和。 代码: select 图书编号,sum(违约次数) as 违约次数总和 from dbo.读者借阅情况,dbo.图书借阅 where 读者借阅情况.读者编号 = 图书借阅.读者编号 group by 图书编号 8.设计一个数据安全的问题(能够用到自主存取控制的授权或回收权限),并用SQL实现问题:把查询读者信息表权限授给U1用户。 代码: grant select on 读者信息 to U1 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |