我有一个每个课程都有不同等级的数据库(即课程1有三个作业,课程2有两个作业,N门课程有M个作业)。就数据库设计而言,我应该如何处理这个问题?
CourseID HW1 HW2 HW3
1 100 99 100
2 100 75 NULL
编辑我想我需要重新表达我的问题。到目前为止,我有两张桌子,课程和作业。作业指的是当然要通过外键。我的问题是,我如何知道有多少家庭作业将提供给每堂课?
发布于 2010-09-27 22:19:42
将表分解成三个不同的表。一个举办课程,第二个举办家庭作业,第三个把课程连接起来并存储结果。
课程:
CourseID CourseName
1 Foo
作业:
HomeworkID HomeworkName HomeworkDescription
HW1 Bar ...
结果:
CourseID HomeworkID Result
1 HW1 100
发布于 2010-09-27 22:19:35
不,这不是个好设计。这是一个反模式,我被称为元数据Tribbles。你必须继续为每个家庭作业添加新的列,这样它们就失去了控制。
这是重复组的一个例子,违反了关系数据库设计的第一范式。
相反,您应该为Courses
创建一个表,为Homeworks
创建另一个表。Homeworks中的每一行在课程中引用一个父行。
我的问题是,我如何知道有多少家庭作业将提供给每堂课?
您将为每个家庭作业添加行,然后按以下方式计算它们:
SELECT CourseId, COUNT(*) AS Num_HW_Per_Course
FROM Homeworks
GROUP BY CourseId
当然,这只会在您用行填充表之后才算家庭作业。所以你(或者课程设计者)需要这样做。
https://stackoverflow.com/questions/3808317
复制相似问题