如何最好地为这种情况设计数据库结构?

时间:2013-03-24 15:54:23

标签: database database-design data-structures relational-database entity-relationship

我正在为我的大学应用程序设计一个数据库。 报告实体包含以下内容:

enter image description here

每个report都有一个studentscourses和学生rating的列表。

问题是,随着时间的推移,课程和学生人数可能会发生变化。数据库结构应该灵活,易于适应这些变化。在这种情况下,如何最好地在关系数据库中定义这些实体和设计表之间的关系?

我对此事有一些想法。也许这个模型最能描述关系并解决问题:enter image description here

或者REPORT to STUDENT的关系是多余和多余的?报告中是否有足够的关系?例如,只有REPORT to COURSE没有 REPORT to STUDENTenter image description here 哪个选择更好,为什么?这种结构有任何其他缺点吗?

提前感谢您的建议!

2 个答案:

答案 0 :(得分:0)

不要在学生或课程表中包含指向“报告”表的链接。我建议你使用以下结构:

STUDENT
id
forename
surname
dob  
... other fields

LECTURER
id
forename
surname
honorific (Mr/Dr/Professor, etc)
department id
... other fields

COURSE
id
name
duration
credits

SEMESTER
id
course id
lecturer id

RATINGS
semester id
student id
mark

通过这种方式,您可以在不同的日期为几位讲师讲授课程(例如经济学概论)。学生注册一个特定的学期,并在该学期有一个标记。如果您希望学生在给定的课程/学期中有多个分数,则在分级表中添加日期字段。

您的报告通常会查询评级表。

答案 1 :(得分:0)

  

“报告是一组收视率?”是

好的,这样可以清除一些东西。我仍然不知道你究竟想要建模什么,但我会给它一个刺:

enter image description here

评级PK 1 确保没有学生可以多次评价同一课程。报告只是一组评分。

此结构不会 确保报告中的所有评级都与同一课程相关,也不会以任何方式强制执行课程 2


1 具体而言,REPORT_ID PK的事实,因此一个评级不能成为多个报告的一部分。如果您想要相反,那么您不能只在PK中包含该字段,因为这将允许不同的VALUE - 您将需要一个正确的联结表。

2 您可能希望禁止未参加课程的学生对课程进行评分。让我知道您打算如何代表课程出席情况,我可能会有一些想法如何将其与评级和报告联系起来......