我有一个每个课程有不同成绩的数据库(即课程1的三个作业,课程2的两个作业,......,M课程的课程N)。就数据库设计而言,我该如何处理?
CourseID HW1 HW2 HW3
1 100 99 100
2 100 75 NULL
修改 我想我需要重新解释一下我的问题。截至目前,我有两个表,课程和家庭作业。家庭作业指向通过外键课程。我的问题是我怎么知道每节课有多少作品?
答案 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