手头要做一个图书管理系统。
设计中有这么一个需求:需要记录每个借阅者的借阅历史。
我有如下疑问:就是采用下述两种方案哪种效率更高?
1.将所有借阅者的借阅记录都记录在同一张表中,并且对数据库表中借阅者的ID建立索引。当需要查询某个借阅者的借阅历史时,只需要根据其ID在表中进行查询。
2.每个借阅者有以其ID命名的一张独立的数据库表,表中记录着该人所有的借阅记录。当需要查询某个借阅者的借阅历史时,只需要查询该借阅者ID命名的表中的所有数据就行了。还有一个问题,就是如果采用方案一,当需要向数据表中插入项时,由于索引的存在,是否每次插入都会引发索引的重新维护而降低更新操作的效率?求各位高人指点~
:)

解决方案 »

  1.   

    没有见过方案二的这种设计。目前的图书馆系统都是把所有记录放在一张表中。 否则你想统计哪本书本年度被借阅的次数最多?方案二就很难操作。 有索引的表在INSERT,UPDATE,DELETE的时候肯定要多一些开销在索引更新上,MYSQL使用BTREE,这种索引需要的开销目前来说已经是很优化的了。
      

  2.   

    非常感谢你的解答~
    对于没有多少数据设计经验的我来说确实很有指导作用。
    关于我最后提出的问题,我还有个疑问:
    就是在有索引的情况下,向数据库表每做一次更新操作是否都会触发DBMS进行一次索引表的更新操作?
    MYSQL是否有这样一种机制:即将几条用户的数据库表更新操作缓存,寻找一个空闲的时候将这些更新操作一次执行完?
    换句话说,MYSQL是否内置的具有更新操作缓冲执行机制,而不需要在应用程序去实现?期待MYSQL老鸟们的指点~
    :)
      

  3.   


    是,立即更新索引。所以在一次性加载很多数据的时候,MYSQL中一的种做法就是先取消索引,等这几万条记录INSERT完后再重新CREATE INDEX。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html