--为图书馆作的表结构,这是读者表,书籍表,借还情况表。请大家给看看,行不行的通?
--尤其重点看看借还情况表。第一次设计表结构,大家多指教。mysql数据库。
create table reader
(
readerid int unsigned not null, --读者编号,即阅览证号,
readername varchar(10) not null, --读者姓名
sex varchar(2) not null, --性别
department varchar(50) not null, --所属单位(或班级,院系,部门)
cardtype varchar(10) not null, --证件类型(所出示身份证件)
cardid varchar(30) not null, --有效证件号码(身份证,学生证,工作证)
purview varchar(4) not null, --权限值(可以是1,2,3等数字,可以决定该读者所能借书的种类和天数)
starttime datetime not null, --办阅览证时间。
endtime datetime , --有效期终止期时间。
zhiya float(5,2) unsigned, --该读者质押的现金数。
primary key (readerid)
)
--书籍表
create table
(
bookid int unsigned not null, --此书在本馆中的编号。主键。
bookname varchar(50) not null, --书名
writer varchar(30) not null, --作者
pubhouse varchar(50), --出版社
pubtime datetime, --出版时间
ISBN_id varchar(50), --isbn编号
congshuname varchar(50), --丛书名
price float(6,2), --定价
chujiezhuangtai varchar(20) not null, --出借状态(已出借;可以出借;仅供阅览不出借;)
lib varchar(20) not null, --所属书库(如:中文流通库,样本书库等)
borrowtimes int unsigned default '0', --本书已出借的次数,默认为零。
jianjie varchar(200), --本书内容简介
page int unsigned, --本书页数。
primary key(bookid) --声名主健为bookid
)
--借还情况表
create table
(
readerid int unsigned not null, --借书(或还书)的读者号
bookid int unsigned not null, --所借的书号
borrowdate datetime not null, --借书时间
returndate datetime, --还书时间
zhuangtai varchar(10) not null default 'no' --是否已经还了所借的书,默认是未还,还书时修改该字段值为'yes'
purview varchar(4) not null, --该读者权限值
lib varchar(20) not null, --该书所属书库,它与purview权限值一起决定
--该读者可以借该书库的书的期限
keeplength varchar(3) not null, --可借阅期限,它由purview权限值与lib所属库联合决定
chaoqifou varchar(4) default 'no', --是否超期 默认是‘no’ ,还书时通过计算(看还书日期-借日期 是否大于借阅期限)
fakuan float(6,2), not null, --罚款,计算得来(超期天数*每日罚款额)
key(readerid,bookid)
)
1 书籍的分类可否从“isbn编号“得出?
2 "本书已出借的次数" 在此合适?
3 "借书时间","还书时间"用同一个字段表示,借还情况表加一个借还标志字段?借还书的数量在哪里?
... ...
---------------------------------------------------------------
你考慮得很詳細很好,不過個人認為:
1: 書的借閱次數是否可要? 如果方便統計,也建議另建新表從書籍表中分離出來
2: 相關罰款情況應該另建新表從借書情況表中分離出來。
---------------------------------------------------------------
有问题,在借还情况表存在大量冗余:
1、zhuangtai --是否已经还了所借的书,默认是未还,还书时修改该字段值为'yes' :没有必要,是否还书可以通过判断还书时间是否为空;
2、purview --该读者权限值:函数依赖于readerid --借书(或还书)的读者号
3、lib --该书所属书库:函数依赖于bookid --所借的书号
4、keeplength --可借阅期限:依赖于purview和lib,而非主键
5、chaoqifou --是否超期:冗余,依赖于还书日期、借日期、借阅期限,可计算得出
6、fakuan --罚款:既然可以计算得到,就不必存储,除非你从效率考虑--需要有充足的理由和依据。
---------------------------------------------------------------
书籍表:
1、borrowtimes冗余,可以通过查询借还情况表获得。
2、chujiezhuangtai --出借状态:语义不清,应改为可出借、仅供阅览不出借。是否已经出借同样可以通过查询借还情况表获得。
---------------------------------------------------------------
以下是个人之见,大家互相探讨:
1、读者表
该表只列出了阅览证上的项目。缺少读者的通信信息,此表无法和读者联系。应加上通信信息相关的字段。
2、书籍表
此表缺少书籍的购买时间、上架时间、下架时间等信息,不方便书籍的管理。
3、借还情况表
此表需重新设计,有冗余
另在程序设计中,对ID的编号,应作充分的考虑,应包括尽可多的信息在里面。以方便查询和定位。尽可能使用自动编号。以确保编号的更加合理。
---------------------------------------------------------------
罚款应考虑两个方面:
应罚款金额(可计算获得,在缴纳罚款前随时间迁移而变化)、缴纳罚款时间、缴纳罚款金额(原则上应与应罚款金额相同,但实际上可能不同)
---------------------------------------------------------------
to: flyylf(飞飞)
--你的大方向没有问题
---------------------------------------------------------------
hello,飞飞。
看来你是个初学者,本人不才,对你的设计作出几点建议:希望你不要介意.
先说你的第一个表;
你的第一个表cardid 属于一个可分的字段,按照数据库的标准这是不符合第一范式的。而且你按你的设计,如果进行试运行的化,势必造成此字段的存储内容的混乱。
此外,请注意你的数据库是图书馆的,不是ASP,也不是电子商务没有必要使用那么详细的字段说明,你的设计会使操作的程序很麻烦,而且影响效率;试想,如果有20同时还书操作人员用你的数据库需要多长时间完成,如果此情况连续进行,操作员是很累的。建议你减少你的字段,例如,把你的两个字段混合成一个字段使用“身份证号码”作为一个字段名,或者不用此字段,因为图书馆很少有人不使用借书证,所以此字段设置为“图书证号”作为字段名也可。
再说你的第二个表:
你设计的表,如果哪不客气的说,完全没有存在的理由.必须进行分解,从第一到第三范式你都不符合,现在初步进行分解成四个表:
例: 第一个表:书名;
ISDN号;
借出状状态;
借出人的借书证号;
此表为第一表也就是用户(操作员)所接触的视图.
你的分数太少,我就不详细说了.告诉你一个很好的例子,在SQL server中有个数据库PUBS,你可以参照设计.
不好意思说了,这么多的不同议建的话,你应该详细看看关于数据库原理方面的书,
希望你进行数据库的重构.
谢谢大家看了我这么多的话.
要骂我的话.请发邮件到:wsh_lx@hotmail.com
现在给出建议表设计:
第一个表(前台操作人员):
书名;
ISDN号;(主键)
借出/归还时间
借出/归还时间
(以上两字段由数据库系统默认添加,由系统时间决定,不能由人员添加)
(从以上两字段生成新的字段,算出"借出时间"字段的值)
借书人的借书证号(外键);
第二个表(后台手工输入):
借书证号;(主键);
借书人证件类型身份;
借书人姓名;
借书人性别;
......借书人相关字段;
第三个表(图书馆籍总表):
书籍ISDN号;
书籍名称;
作者名;
出版社;
定价;
书籍本馆ID;
借出次数;
以上设计仍不完全,此表不好完成.一定要由具体需要人员自己设定.
这样的库结构太简单,冗余太多,无法满足应用,比如:某些书在书库有很都本,以及多站点操作的并发性等。
我认为比较合理的库结构:
读者表 (同意你的结构)
书籍基础信息表 (去除 出借状态 字段,只记录书的基础信息,书号为主键)
书籍库存表 (只需设:书号,数量 两个字段,出租时检查数量不为0减1,反之为还)
租还明细表 (设:读者号,书号,借还时间,借或还标志位,超期标志位,罚款)
借书时,不需要录入后两字段,还书时通过读者表的权限字段判断超期及罚款
其他各种应用都可通过表间连接查询或视图实现
如果有多站点操作,还应加上:站点租借子表(结构与租还明细表相同,有几个站点就动态建立,业务发生时先向子表中写数,然后向租还明细表中写数,所有应用都以书籍库存表为中心
第一个表(前台):
持有人姓名;
图书证号;
借出日期;
归还时间;
借出书在本馆内的ID号;
隐藏字段:借出时间(由借出日期和归还日期相减);
罚金:(由超天数乘以
|