注册 登录
编程论坛 ASP.NET技术论坛

成绩管理系统数据库设计问题

fyz520 发布于 2010-11-24 15:56, 897 次点击
成绩管理系统数据库设计问题
表1.
学生ID ---自动编号
名字 -----文本
学期------数字(用1至8分别表示哪一学期)
课程1-----数字(课程1的分数)
课程2-----数字(课程2的分数)
课程3-----数字(课程3的分数)
课程4-----数字(课程4的分数)

表2.
学生ID ---自动编号
名字 -----文本
学期------数字(用1至8分别表示哪一学期)
课程-----文本(课程的名称,如英语,数学)
分数-----数字(相应课程的分数)


以上是两种设计方案,第一种比较清晰,但是在插入数据的时候不好操作,比如先插入“课程1”的分数,那“课程2—4”要用update语句进行更新了,不好判断,麻烦,,但这种设计可以减少数据表的深度;第二种很方便插入数据,但是增加数据表的记录数。。。如果表1有1万条记录,那么相应的表2就是4万条甚至更多的记录,各位说说到底要哪个比较好,为什么?,考虑到数据库的性能问题,,,,,谢谢了
3 回复
#2
wshotdbb2010-11-24 16:01
这道题 曾经我面试时遇到过
#3
saitor2010-11-24 16:08
如果是我设计你这些字段至少要拆成3张表
#4
北京的晚秋2010-11-24 22:44
1、这要看你怎么说了,从某些情况来讲,第一种会好一些,因为它能够满足一般的查询,就一般的需求来说,肯定是查询某个学生的所有信息,这样在一条记录中就能体现,在查询速度上是非常快的。从常理上讲,一个学生只能入学一次,之后的每个学期都是在不断的更新这个人的信息而已,所以用update是很正常的事情,总不能一个学生在每学期注册的时候都要从新办入学?这样是不通情理的。
2、但是换个角度说,现在的计算机硬盘动辄以百G计算,甚至都是以T计算,多这点数据量不算什么,但是换来的却是程序的逻辑的简化,开发速度的提升,甚至有可能因为简化的逻辑,从而提高了程序的执行效率,这都是不好说的,所以第二种方式也是很好的,甚至是很多人都比较习惯采用的方式。
3、像3楼说的,其实是很好的方案,把一张表拆成3张,既能减少数据量,又能简化逻辑,这才是我们最常用的方式
呵呵,个人的愚见而已
1