1 书籍的分类可否从“isbn编号“得出?
2 "本书已出借的次数" 在此合适?
3 "借书时间","还书时间"用同一个字段表示,借还情况表加一个借还标志字段?借还书的数量在哪里?
  
... ...

解决方案 »

  1.   

    谢谢阿土老兄,
    我想这样改一下,您在看看
    1、在书籍表中,加书籍种类字段。不从isbn中得到书种类。
    2、本书已出借的次数,可以在每次发生借书动作时,让它递增一,
    3、至于借书时间,还书时间我觉得还是用两个字段好一些,
       借还书量可以在查循借还情况表时,得到。如按readerid查,或者用readername查,同时查两个表,都可得到某读者的借还书情况。
      

  2.   

    有问题,在借还情况表存在大量冗余:
    1、zhuangtai --是否已经还了所借的书,默认是未还,还书时修改该字段值为'yes' :没有必要,是否还书可以通过判断还书时间是否为空;2、purview --该读者权限值:函数依赖于readerid --借书(或还书)的读者号3、lib --该书所属书库:函数依赖于bookid --所借的书号4、keeplength --可借阅期限:依赖于purview和lib,而非主键5、chaoqifou --是否超期:冗余,依赖于还书日期、借日期、借阅期限,可计算得出6、fakuan --罚款:既然可以计算得到,就不必存储,除非你从效率考虑--需要有充足的理由和依据。
      

  3.   

    书籍表:
    1、borrowtimes冗余,可以通过查询借还情况表获得。2、chujiezhuangtai --出借状态:语义不清,应改为可出借、仅供阅览不出借。是否已经出借同样可以通过查询借还情况表获得。
      

  4.   

    TO: SE1() 
      冗余可以提高效率?  至于冗余哪些数据请搂主根据需求自定,目前来看不好决定。
      

  5.   

    to: nielisheng(阿土) 
    有时可以,所以“需要有充足的理由和依据。”
      

  6.   

    SE1老兄,谢谢你的详细解答。
    你说的几种冗余,部分考虑过,我觉得把那些通过计算得到的比如:有了借时间,还时间,但仍有还否字段,我是觉得判断一个字段是否为空可能比取一个字段值还要慢,
       等,所属库、读者权限值等,都依赖于他们的原所属表,但是函数依赖怎么写,我不太会,望稍微指点,我用的是mysql数据库,该数据库不知支持否函数依赖,
       这个设计是我自己在练习,没有具体客户,上面的需求是我能想到的图书馆的要求来作的,望再看看,多谢!
      

  7.   

    TO: SE1()    没看清,对不住。
      

  8.   

    to: flyylf(飞飞) --你的大方向没有问题
      

  9.   

    那我的“借还情况表”还有没有必要要这两个字段? lib(所属库),purview(权限值),谢谢。
      

  10.   

    hello,飞飞。
    看来你是个初学者,本人不才,对你的设计作出几点建议:希望你不要介意.
    先说你的第一个表;
       你的第一个表cardid 属于一个可分的字段,按照数据库的标准这是不符合第一范式的。而且你按你的设计,如果进行试运行的化,势必造成此字段的存储内容的混乱。
        此外,请注意你的数据库是图书馆的,不是ASP,也不是电子商务没有必要使用那么详细的字段说明,你的设计会使操作的程序很麻烦,而且影响效率;试想,如果有20同时还书操作人员用你的数据库需要多长时间完成,如果此情况连续进行,操作员是很累的。建议你减少你的字段,例如,把你的两个字段混合成一个字段使用“身份证号码”作为一个字段名,或者不用此字段,因为图书馆很少有人不使用借书证,所以此字段设置为“图书证号”作为字段名也可。
    再说你的第二个表:
        你设计的表,如果哪不客气的说,完全没有存在的理由.必须进行分解,从第一到第三范式你都不符合,现在初步进行分解成四个表:
     例:   第一个表:书名;
                ISDN号;
                借出状状态;
                借出人的借书证号;
    此表为第一表也就是用户(操作员)所接触的视图.
    你的分数太少,我就不详细说了.告诉你一个很好的例子,在SQL server中有个数据库PUBS,你可以参照设计.
    不好意思说了,这么多的不同议建的话,你应该详细看看关于数据库原理方面的书,
    希望你进行数据库的重构.
    谢谢大家看了我这么多的话.
    要骂我的话.请发邮件到:[email protected]
      

  11.   

    望 wshlxvb兄多指教,我的确是初学者,不瞒你说,这是第一次设计表,看了你说的,我觉得似乎我的设计是存在相当问题,请详细指教一些。多谢。
      

  12.   

    可是我觉得证件类型(cardtype)和证件号码(cardid)有必要共存,比如在一个大学里,有学生(学生证)有教工(工作证),他们需要到同一个图书馆去借书,区分一下证件类型会有麻烦么?
      

  13.   

    不好意思,由于我的上网条件不是很好(在网吧里),今天才看到你的信息.而且在网吧里很多材料都准备不全。
    证件类型和证件号码字段,我并不是说不能存在.而是说,你要进行必要的分解。比如说前台操作人员表只存在:书名;
                            ISDN号;(主键)
                            借出状态;
                            借出人的借书证号(外键);
    然后在后台你可以定义另一个表:
                      借书证号;(主键)
                      借书人证件类型身份;
                      借书人姓名;
                      ......等等有关借书人的字段
    以上的这个表这的数据是在办理图书证时需要人工输入和维护的。
    但是这个表也可以在学生入学或职工信息中生成查询,然后导入数据时建立。
                                        
                      
      

  14.   

    现在给出建议表设计:
    第一个表(前台操作人员):
       书名;
       ISDN号;(主键)
       借出/归还时间
       借出/归还时间
       (以上两字段由数据库系统默认添加,由系统时间决定,不能由人员添加)   
       (从以上两字段生成新的字段,算出"借出时间"字段的值)
       借书人的借书证号(外键);
    第二个表(后台手工输入):
       借书证号;(主键);
       借书人证件类型身份;
       借书人姓名;
       借书人性别;
       ......借书人相关字段;第三个表(图书馆籍总表):
       书籍ISDN号;
       书籍名称;
       作者名;
       出版社;   
       定价;
       书籍本馆ID;
       借出次数;
    以上设计仍不完全,此表不好完成.一定要由具体需要人员自己设定.   
      

  15.   

    对不起flyyly 
    现在对以上设计的数据库更正:
    第一个表(前台):
         持有人姓名;
         图书证号;
         借出日期;
         归还时间;
         借出书在本馆内的ID号;
         隐藏字段:借出时间(由借出日期和归还日期相减);
         罚金:(由超天数乘以每天的罚金);
    第二个表(后台):
         图书证号;
         持有人姓名;
         性别;
         年龄;     
         持有从相关字段.....;
         有效证件类型;(只有身份证和学生证可选)
         有效证件号;
    第三个表(书籍库总表);
         书名;
         书号;(ISDN)
         本书在馆内编号;(主键)
         馆内所属科目(类别);
         书籍相关字段;......
    第四个表(后台):
          借出书在本馆内编号;
          借出状态;
          借出次数;
         
      

  16.   

    现在对以上数据库进行一下简要说明:
    第一个表无主键;
    是因为此表记录类似Windows 2000的日志;
    由第一个表自动添加第四个表:
    第二,第三个表在图书馆建馆时办证建立;手工录入;
      

  17.   

    这是我后来改的,听从了部分大家的意见,总之谢谢大家的意见,尤其谢谢wshlxvb兄,我会放分的,甚至可以专开一贴,为你,我觉得你真够意思。
    drop table tbreader;
    create table  tbreader
    (
    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,                   
    starttime     datetime        not null,                   
    endtime       datetime ,                                  
    zhiya         float(5,2) unsigned,                        
    guashifou     varchar(4)      not null  default 'no',       
    telephone     varchar(15),                                
    address       varchar(50),                                 
    primary key (readerid)
    );
    --书籍表
    drop table tbbook;
    create table tbbook
    (
     bookid      int unsigned     not null,              
     bookname    varchar(50)      not null,              
     writer      varchar(30)      not null,              
     booktype    varchar(20),
     pubhouse    varchar(50),                            
     pubtime     datetime,                               
     ISBN_id     varchar(50),                            
     congshuname varchar(50),                            
     price       float(6,2),                             
     chujiezhuangtai  varchar(20) not null,               
     lib         varchar(20)      not null,              
     jianjie     varchar(200),                           
     page        int unsigned,                           
     primary key(bookid)                                 
     );drop table tbadmin;
     create table tbadmin
    (
      adminid     int unsigned   not null auto_increment,
      password    varchar(20)    not null,
      realname    varchar(20)    not null,
      telephone   varchar(20),
      address     varchar(50),
      purview     int unsigned   not null default '1',
      primary key(adminid)
    );借还表
    drop table tbborrow;
    create table tbborrow 
    (
     readerid       int unsigned  not null,             
     bookid         int unsigned  not null,             
     borrowdate     datetime      not null,             
     returndate     datetime,                          
     keeplength     varchar(3),             
     fakuan         float(6,2),     
     primary key(readerid,bookid)
    );
      

  18.   

    您好,我又来了。
    建议你在建立数据库时,选用字段或全部使用汉语拼音或全部使用英文,不要中英文混用, 这在数据库维护时很重要。
    因为你不知你是否将来能成为DBA (数据库管理员),  一般情况来讲, 数据库的设计人员不能成为他所设计DBA。   为他人的使用和维护方便,而且使你的数据库更具有商业竞争能力(我想你设计的数据库最终是有商业目的的)。  那么请你注意以上内容。
    如果你是数据库方面的爱好者那么我的信箱为:
    [email protected]
    没事常联系。
      

  19.   

    结贴了,隆重感谢wshlxvb兄,我将再开一贴等你。