2012-03-09 98 views
1

因此,对于我的软件工程课程,作为大型项目的一部分,我们需要使用HSQLDB实现数据库。不幸的是,我还没有进行数据库设计,我们小组中有三分之二的人已经放弃了这门课程,让我做这件事。SQL数据库ER图

截至目前,我已经想出这个ER图表为我们的项目: enter image description here

我们所拥有的是课程列表,以及每门课程包含多个模块。每个帐户都可以在任何课程中注册,让他们可以访问课程的每个模块,该模块已评分,并且标记存储在其帐户中。

我想图我已经拿出表示此相当好;不过,我今天刚刚开始了解这一点,所以我仍然有点不稳定,可以这么说。

有什么事情跳出来为错误的这一点,或零件可以改进的?

P.S - 我只注意到在模块表中,它包含了档次,这实际上应该在module_grade。

+0

由于这是HW,我会问一些可能有助于指出可能改进的问题。如果学生(AKA账户)未通过必修课程会发生什么情况?他们辍学吗?你如何阻止一个学生参加一个没有注册的课程?你需要跟踪学期或季度? 'course_grade'实体的目的是什么?为什么'grade'应该是一种浮点数据类型与另一种类型?通过在“模块”实体上使用复合主键可以获得什么好处(该问题是否可以通过索引来解决)? – gangreen 2012-03-09 05:08:04

+0

我们正计划在下一次迭代中实施失败,我们只有两个人正在研究应该是一个5人项目。学生通过一个单独的界面通过管理员帐户添加到课程中。访问数据库的界面已经完成,我们已经有了一个存根。学期,宿舍没有。我忘了在course_grade中输入小数。它是module_grades的总和。我不知道为什么分数应该或不应该是一个浮动。我被告知切换到十进制。模块上的PK是我没有意识到的 – Tanner 2012-03-09 06:13:21

+0

只是稍等一会儿......有人会为你解决这个问题。 ;) – 2012-03-14 04:40:30

回答

0

Course_grade表在您的模型中绝对无用。您应该将等级信息存储在course_grade和module_grade中,而不是直接存储在模块中。将模块看作主数据(所以你想用于所有学生),这意味着你不应该在其中存储学生的具体信息。

我还会将时间戳添加到您的模型中,至少在具有成绩信息的表内部,以便您至少可以检查学生何时获得信息。如果您也有可用的信息,那么您应该存储这些信息。

如果使用SQL来访问你的模型考虑改变course_grade和module_grade外键列的东西,是独一无二的。这使得查询更易于阅读。也许课程成绩将course_id重命名为cg_course_id。

+0

我认为'module_grade'应该将FKs设置为'module'和'account_course'(而不是account)。和PK三重'(number,course_id,acc_id)'。这是为了确保学生只能注册已注册课程中的模块并获得成绩。 – 2012-03-10 01:10:38