项目介绍
本项目为图书借阅系统,其功能为记录读者借阅图书情况数据库管理系统,最终实现的产品为一个关系型数据库。它所解决的问题是:如何能够查询到在什么时间,由哪一位管理员把哪一本书借给了哪一位读者。为了抽象出此系统的数据模型,我们可以设想一下在图书馆中借阅图书的场景,并从中找出各个事物之间的关系,再通过它们的关系确定每一个交互对象,最终把与图书借还相关的数据模型抽象出来。
从问题描述来看,本系统涉及到的信息有:借书时间、管图书理员、书籍和读者。这是可以满足需求功能的最小功能系统,我们使用下表1来记录借阅记录。
表1
如果仅使用这些信息构建这个数据库系统,我们只需要一张表就可以实现此功能。每当读者借书时,就向表1中添加一条记录。这个系统便可以运行起来了,而且很长一段时间它都运行得很好。但是,忽然有一天,客户抱怨到:系统提供的书籍的信息量太少了,有许多书籍的名字相同,但是,它们实际是由不同的作者编写或不同的出版社发行。客户需要更多的关于书籍的信息。
鉴于此书籍信息缺失问题,在图书借阅系统中还同样涉及到其它的人或物,如上面所描述的借书时间、管理员和读者等,为此我们同样需要补充书籍相关的信息,这些人或物在数据库设计中我们称之为实体,实体是整个系统的交互对象,实体所具有的属性决定了它所携带的信息,接下来我们将每一个交互对象转换为对应的实体,并完善实体的属性信息。
实体介绍书籍实体
书籍作为一个交互对象,它拥有的属性包括名称、页码等,本项目中涉及到的书籍实体主要为以下几个属性:。
图书管理员实体
图书管理员受雇用于图书馆,他与图书馆之间的关系为雇佣关系,与书籍实体相同,也是一个此系统的交互对象。此演示项目由于不涉及到图书馆相关信息,我们在对图书管理员做属性提取时只需要提取人员信息的基本数据就可以了,比如下面列出了图书管理员的属性。
读者实体
读者与图书馆之间建立关系,当他注册为图书馆会员时,就会变为这个图书馆的读者,同时,会被要求提供一些必要的个人信息,这些信息构成读者实体属性,如下面列表的内容。
以上这些实体为图书借阅过程中涉及到的人或物,除此之外,我们根据用户需求,还需要查询书籍出版社的一些信息,那么,我们就可以再增加一个实体—出版社,它的信息只含有上述的两项内容。
出版社实体
以上的信息构成了图书借阅系统的最为直接的实体,现在回到客户的需求上来,我们的系统中还缺少一个关于借阅时间的问题,同样这个信息的表示也是一个实体,相比于上述的人或物,此信息相对抽象一些,它表示一次借阅图书事件。接下来我们详细分析下这个实体。
借阅图书事件实体
每发生一次借阅书籍时,此事件便会触发一次,此事件记录了书籍借阅日期、借阅人、图书管理员和书籍等信息,通过下面列表中的属性表述一个借阅图书事件。
以上5类数据构成了整个图书借阅系统的基础数据,接下来我们进行的工作是将这些实体对象转换为数据表,并建立各个数据表之间的关系。我们可以建立5张数据表来表示每一类数据实体,它们依次是:书籍表、图书管理员表、出版社表、读者表和借阅事件表。
数据库数据库表
当我们列出了业务中的每一个实体及其属性后,就很容易将其转换为对应的数据表和字段,按照上文中各个实体描述,需要创建的数据表及其字段的对应关系通过下面的表格进行展示,表格2中表头信息为数据表的名称,每一列显示了这个表格所拥有的字段。
表2
数据库键
数据库的键分为主键和外键。每一个数据表中最多含有一个主键,但是可以含有多个外键,主键值在数据表中唯一地表示了一条记录,选择字段作为主键时,此字段值应该具有唯一性,它可以是实际存在的数据信息,也可以是虚拟出来的,只要是能够唯一表示这一条记录就可以了。外键是指在数据表中定义的一个非主键,同时,这个键它在其它的数据表中属于主键,主键和外键是为了建立表与表之间的关系的,对表2中的数据表添加对应的主键和外键之后,形成了新的数据表。如下表3所示
表3
在表3中,统一为每一个数据表添加了一个主键,名称为Id,通过绿色单元格表示;蓝色单元格表示的为外键字段。比如:书籍表使用了一个外键出版社Id,此键对应于出版社表中的主键值Id字段,借阅事件表中使用了三个外键,分别为图书管理员Id、读者Id和图书Id,它们分别指向图书馆管理员表Id字段、读者表Id字段和书籍表Id字段。
数据表关系
当构建完成数据表和键之后,就可以开始构建各个数据表之间的关系。各个数据表是通过主键和外键来建立联系的。书籍表与出版社之间的关系为多对一关系,即一个出版社可以出版多本书籍,通过在书籍表中添加一个出版社id字段,表明这本书是由哪一个出版社发行的,可以通过如下的ER图表示二者的关系
图1
借阅事件表与数据管理员、书籍和读者之间的关系同样也是多对一关系,在这个数据表中,我们使用了三个外键,第一个为图书馆管理员Id外键对应于图书馆管理员数据表中的id字段,二者之间为一对多关系,即一个图书管理员可以触发多个借阅事件,每一次读者的借阅都是一个事件;第二个外键读者Id对应于读者数据表中的id字段,二者之间也是一对多关系,它的含义表示:一个读者可以借阅多次书籍,每一次借阅属于一个事件;第三个外键书籍id对应于书籍数据表中的id字段,二者之间也是一对多关系,表示的含义是:一本书可以被多次借阅,同样,每一次借阅都属于一个借阅事件;。这4张数据表可以通过下面的ER图展现。
图2
当数据表、数据键和数据关系确认之后,那么数据库基本上就建立起来了,之后便是使用具体的数据库软件将其转换为对应的数据库对象,针对业务需要构建相应的数据库查询语句,我们下一篇文章详细介绍使用数据库软件构建可以运行的对应的数据库。
会员全站资源免费获取,点击查看会员权益