动态表?

时间:2010-09-27 22:14:29

标签: sql database-design relational-database

我有一个每个课程有不同成绩的数据库(即课程1的三个作业,课程2的两个作业,......,M课程的课程N)。就数据库设计而言,我该如何处理?

CourseID HW1  HW2 HW3
    1    100  99  100
    2    100  75  NULL

修改 我想我需要重新解释一下我的问题。截至目前,我有两个表,课程和家庭作业。家庭作业指向通过外键课程。我的问题是我怎么知道每节课有多少作品?

2 个答案:

答案 0 :(得分:2)

不,这不是一个好的设计。这是一个反模式我called 元数据Tribbles 。您必须不断为每个作业添加新列,并且它们会不受控制地传播。

这是重复组的一个例子,它违反了关系数据库设计的First Normal Form

相反,您应该为Courses创建一个表,为Homeworks创建另一个表。 Homeworks中的每一行都引用了Courses中的父行。

  

我的问题是我怎么知道每节课有多少作业?

你要为每个作业添加行,然后你可以按如下方式计算:

SELECT CourseId, COUNT(*) AS Num_HW_Per_Course
FROM Homeworks
GROUP BY CourseId

当然,只有在您用行填充表后,才会计算homeworks 。所以你(或课程设计师)需要这样做。

答案 1 :(得分:0)

将表格分解为三个不同的表格。一个持有课程,第二个持有作业,第三个连接它们并存储结果。

课程:

CourseID CourseName
1        Foo

作业:

HomeworkID HomeworkName HomeworkDescription
HW1        Bar          ...

结果:

CourseID HomeworkID Result
1        HW1        100