日期:2014-05-17  浏览次数:20420 次

数据库设计是要时间效率还是空间效率。
一个带有题库的在线考试系统,数据库里面有题库,试卷信息,考试信息三个模块。题库是有题目类型的,每张试卷可以选择任意数量的题库题目。现在的问题是由于 试卷-试题   联系表里记录了有关试题id(综合了试题类型和试题id),试卷id的关联,所以有关试卷的题目数是可以自动统计出来的。现在问题来了:既然我可以通过统计语句统计出试卷题目信息(试卷分数也如此),那么我还需要再在试卷表里记录试卷的题目数这一个字段吗?
  说的简单点:能够通过统计语句查询出来的数据,是否需要再建立表字段进行记录。到底哪种方式更加符合实际应用的情况,我对时间效率和空间效率没有极端要求,主要考虑综合的效率,并且要考虑代码的易用性和可读性,经济性。
  设计数据库严格按照一对一,一对多,多对多的要求来,可是用的时候并不感觉多大方便。由于没有经验,数据库应用摸着石头过河,很多东西可以用,但是不知道到底用的有没有问题,是不是有更好的解决方案。

------解决方案--------------------
现代系统往往都是以空间换时间,因为客户不会在乎你用了多少磁盘,而是在乎你的程序响应速度
------解决方案--------------------
还是优先考虑性能把。

因为,硬盘现在很便宜,多存储点,也不会占用太大的空间。

相对应的,性能是只要考虑的问题,性能不好,查询速度就会比较慢,而且还容易导致其他的问题。
------解决方案--------------------
如果数据量是不可减少的话,放在库内还是放在磁盘中,结果都是一样的,但是放在磁盘,一般来说你就需要额外地多管理一个东西
------解决方案--------------------
数据类型是要控制好,不过说实在话除非你设计和业务都很好,不然很难做到,比如我以前给开发举例,如果使用datetime2而不是用datetime,几千万数据可能要多耗几百M的空间
------解决方案--------------------
合理的冗余是必须的。
------解决方案--------------------
这个总数经常用,
那就在 试卷 表加一个字段"试题总数",别去查了。