当前位置:   article > 正文

数据库设计——以设计图书管理系统为例_设计一个图书管理系统数据库

设计一个图书管理系统数据库

     图书馆作为一种信息集散地,图书、用户借阅得资料繁多,包含很多信息资源数据的管理。而大多数图书馆却反对数据的规范化整理,导致数据繁多不易查找、数据冗余等众多问题,现在亟需建立一个图书管理系统,让图书管理工作更加规范化。

        读者管理:该功能针对读者进行管理。

读者信息:对读者身份证、性别、年龄、姓名、联系方式进行管理。

读者借阅信息:对读者编号、可借阅图书数量、已借阅图书数量、违约次数等信息进行管理。

        图书管理:该功能针对图书进行管理。

图书信息:对图书的书名、作者、出版社、ISBN进行管理。

图书借阅信息:对图书编号、入库时间、出库时间、剩余库存等信息进行管理。

        图书流通管理:该功能针对图书流通进行管理。

图书借阅:对借阅订单编号、图书编号、读者编号、到期时间进行管理。

图书归还:对借阅订单编号、图书编号、读者编号、归还时间进行管理。

图书返款:对借阅订单编号、图书编号、读者编号、罚款金额进行管理。

        图书管理人员:该功能针对管理图书的工作人员进行管理。

图书管理人员:对人员编号、姓名、管理区域进行管理。


  • 2、概要模型设计

    (1)根据E-R图,给出的关系模式。

    (2)判断各个表属于第几范式。

1

  1. 读者信息(身份证,姓名,性别,联系方式,年龄)
  2. 读者借阅情况(读者编号,可借阅图书数量,已借阅图书数量,违约次数,身份证)
  3. 图书信息(ISBN,书名,出版社,作者)
  4. 图书借阅信息(图书编号,入库时间,出库时间,剩余库存,ISBN)
  5. 图书借阅(借阅订单编号,到期时间,读者编号,图书编号)
  6. 图书归还(借阅订单编号,归还时间,读者编号,图书编号)
  7. 图书罚款(借阅订单编号,罚款金额,读者编号,图书编号)
  8. 图书管理人员(人员编号,姓名,管理区域)

(2)

  1. 读者信息表

<1>身份证姓名,身份证性别,身份证联系方式,身份证年龄

<2>(姓名,联系方式)身份证(姓名,联系方式)性别,(姓名,联系方式)年龄

候选码:(身份证),(姓名,联系方式)

这里将主码设置为身份证,则该表属于BCNF

  1. 读者借阅情况表

<1>(读者编号)可借阅图书数量,(读者编号)已借阅图书数量,(读者编号) 违约次数,(读者编号)身份证

<2>(身份证)读者编号,(身份证)可借阅图书数量,(身份证)已借阅图书数           量,(身份证)违约次数

候选码:(读者编号),(身份证)

这里将主码设置为读者编号,则该表属于BCNF

  1. 图书信息表

<1>(ISBN)作者,(ISBN)书名,(ISBN)出版社

候选码:(ISBN)

该表属于BCNF

  1. 图书借阅信息表

<1>图书编号入库时间,图书编号出库时间,图书编号剩余库存,图书编号ISBN

候选码:(图书编号)

该表属于BCNF

  1. 图书借阅表

<1>借阅订单编号读者编号,借阅订单编号图书编号,借阅订单编号到期时间

候选码借阅订单编号

该表属于BCNF

  1. 图书归还表

<1>借阅订单编号归还时间,借阅订单编号图书编号借阅订单编号读者编号

候选码:借阅订单编号

该表属于BCNF

  1. 图书罚款表

<1>借阅订单编号罚款金额,借阅订单编号图书编号借阅订单编号读者编号

候选码:借阅订单编号

该表属于BCNF

  1. 图书管理人员表

<1>人员编号姓名,人员编号管理区域

候选码:人员编号

该表属于BCNF

用SQL实现数据库和所有数据表的创建,包括相应的完整性约束(主外键等)。

  1. Create Database 图书管理系统
  2. ON
  3. (name=lib_data,filename='d:\database\lib_data.mdf')
  4. LOG ON
  5. (name=lib_log,filename='d:\database\lib_log.ldf')
  6. create table 读者信息(
  7. 身份证 int not null primary key,
  8. 姓名 char(20) not null,
  9. 性别 char(10) not null check(性别 in ('男','女')),
  10. 联系方式 char(20) not null
  11. 年龄 int not null
  12. )
  13. create table 读者借阅情况(
  14. 读者编号 char(15) not null primary key,
  15. 可借阅图书数量 int not null,
  16. 已借阅图书数量 int not null,
  17. 违约次数 int default 0,
  18. 身份证 int FOREIGN KEY REFERENCES 读者信息(身份证)
  19. )
  20. create table 图书信息(
  21. ISBN int not null primary key,
  22. 出版社 char(20) not null,
  23. 作者 char(20) not null,
  24. 书名 char(20) not null
  25. )
  26. create table 图书借阅信息(
  27. 图书编号 char(15) not null primary key,
  28. 剩余库存 int not null,
  29. 入库时间 char(15) not null,
  30. 出库时间 char(15) not null,
  31. ISBN int FOREIGN KEY REFERENCES 图书信息(ISBN)
  32. )
  33. create table 图书借阅(
  34. 借阅订单编号 char(15) not null primary key,
  35. 到期时间 char(15) not null,
  36. 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号),
  37. 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号)
  38. )
  39. create table 图书归还(
  40. 借阅订单编号 char(15) not null primary key,
  41. 归还时间 char(15) not null,
  42. 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号),
  43. 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号)
  44. )
  45. create table 图书罚款(
  46. 借阅订单编号 char(15) not null primary key,
  47. 罚款金额 int not null default 0,
  48. 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号),
  49. 读者编号 char(15) FOREIGN KEY REFERENCES 读者借阅情况(读者编号)
  50. )
  51. create table 图书管理人员(
  52. 人员编号 int not null primary key,
  53. 姓名 char(20) not null,
  54. 管理区域 char(20),
  55. 图书编号 char(15) FOREIGN KEY REFERENCES 图书借阅信息(图书编号),
  56. ISBN int FOREIGN KEY REFERENCES 图书信息(ISBN)
  57. )

  • 5、数据库运行与维护

  • 1.设计一个插入数据的问题,并用SQL实现

问题:请插入一个身份证为‘1001’,性别‘男’,联系方式为‘1375642’,姓名为‘小明’的,年龄为‘21’的数据到读者信息表。

代码:

  1. insert into dbo.读者信息
  2. values ('1001','小明','男','1375642','21')

  • 2.设计一个修改数据的问题(能够用到like和排序),并用SQL实现

问题:请将读者信息表中姓中带‘小’的读者,年龄都增加1岁,并按照年龄从小到大进行排序。

 代码:

  1. update dbo.读者信息
  2. SET 年龄 = 年龄 + 1
  3. where 姓名 like '小%'
  4. select *
  5. from dbo.读者信息
  6. order by 年龄

                        1.读者信息表(原)                                              2.读者信息表(修改后)

  • 3.设计一个删除数据的问题(能够用到关系代数的差),并用SQL实现

问题:将没有借阅过图书的读者借阅情况删除。

代码:

  1. delete from dbo.读者借阅情况
  2. where not exists
  3. (select * from 图书借阅
  4. where 读者借阅情况.读者编号 = 图书借阅.读者编号)

 1.读者借阅情况表(原)

 2.图书借阅表

 3.读者借阅情况表(删除后)

  • 4.设计一个查询数据的问题(能够用到关系代数的除),并用SQL实现

问题:查询至少借阅了‘4001’,‘4002’两本书的读者编号。

代码:

  1. select distinct 读者编号
  2. from 图书借阅 L1
  3. where not exists(
  4. select * from 图书借阅 L2
  5. where 图书编号 in ('4001','4002')
  6. and not exists(
  7. select * from 图书借阅 L3
  8. where L1. 读者编号=L3.读者编号 and L2.图书编号=L3.图书编号))

  •         5.设计一个查询数据的问题(能够用到外连接),并用SQL实现

问题:将有过违约的读者全部信息输出。

代码:

  1. select *
  2. from dbo.读者借阅情况,dbo.读者信息
  3. where 读者借阅情况.身份证 = 读者信息.身份证
  4. and 违约次数 <> 0

  •  6.设计一个查询数据的问题(能够用到表的自身连接),并用SQL实现

问题:查询ISBN为‘3001’书的倒数第二次入库时间。

代码:

  1. select B.入库时间
  2. from dbo.图书借阅信息 A,dbo.图书借阅信息 B
  3. where A.ISBN = B.ISBN and A.入库时间 = B.出库时间 and A.ISBN ='3001'

  • 7.设计一个分组统计数据的问题(基于多表连接基础上),并用SQL实现

问题:查询每一种图书编号,对应读者的违约次数总和。

代码:

  1. select 图书编号,sum(违约次数) as 违约次数总和
  2. from dbo.读者借阅情况,dbo.图书借阅
  3. where 读者借阅情况.读者编号 = 图书借阅.读者编号
  4. group by 图书编号

  • 8.设计一个数据安全的问题(能够用到自主存取控制的授权或回收权限),并用SQL实现

问题:把查询读者信息表权限授给U1用户。

代码:

  1. grant select
  2. on 读者信息
  3. to U1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/700242
推荐阅读
相关标签
  

闽ICP备14008679号