数据库设计决策将需求转换为关系模型

时间:2012-12-19 16:45:44

标签: database models relational

所以我自愿为我当地教会的教育部创建一个注册系统。它应该能够注册新学生并跟踪他们的进度。以下是我设法收集的要求:

  
      
  1. 教育机构提供多门课程。

  2.   
  3. 课程有名称和描述。

  4.   
  5. 课程按级别组织。每个级别有几门课程。

  6.   
  7. 课程也有要求(即首先需要采取的其他课程)。

  8.   
  9. 当一名学生通过该级别的所有课程时,他们将从该级别毕业。

  10.   
  11. 如果学生不能通过课程,他可以根据自己的意愿/需要重复课程。

  12.   
  13. 学生每学期只能修一门课程。

  14.   
  15. 不活跃的学生是指未在本学期注册的学生。

  16.   
  17. 教师每学期只会教一门课程。教师可以每学期教授不同的课程。

  18.   
  19. 教师可能没有教学的学期。

  20.   

现在,这是我的关系模型。

![https://dl.dropbox.com/u/10900918/rmodels.jpg] [1]

我的问题是:

  1. 是否缺少任何表格?

  2. 查看学期+ semester_code_description:这是最好的方法吗?假设一年有两个学期并且每个学期有相同的开始和结束月份(即第一学期:8月 - 12月,第二学期:1月 - 5月),semester_code_description表真的有必要吗?

  3. 我如何改进设计?

  4. 抱歉,我没有包含任何箭头。我正在使用的程序很乱。

    非常感谢您提前花了宝贵的时间。

1 个答案:

答案 0 :(得分:0)

1)你的设计很好。我没有看到任何丢失的表 - 看起来你满足了所有要求。

2)semester_description表对我有意义,无论你是否需要它取决于你是否打算对这些数据做任何事情。

3)“学生每学期只能修一门课程”的要求意味着Has_Taken关系的主键应该是(student_id,semester_id)。现在,我可以为同一个学生和学期插入两门不同的课程。类似地,对于Has_Teached关系。

其他一些想法:

某些表中的“last_whatever”列将强制对您的实际应用程序进行一些额外处理。您将需要一些机制来监视/更新这些。另一种选择是从表中派生出来。我可以通过查找具有最大年份/代码的学期来获得学生的last_semester。

最后一个考虑因素,这些课程/描述/水平有多稳定?我在一所大学工作了几年,我们的课程将在一个学期的基础上改变,迫使我们为每次改变保存一份完整的课程记录副本,因为我们希望学生的记录能够反映他们当时的实际情况。

以下是您应用中的一个小例子。让我们说我从1级毕业。然后一年后,教会增加了一门新课程(课程A)到1级。我将实际上没有毕业b / c现在有1级课程我没有(课程A) )。

如果您的课程非常稳定,这对您来说无关紧要。祝你好运!