2014-05-04 53 views
0

我需要模拟此问题:这种情况下ER映射的正确设计是什么?

一个教师可能会监督几个学生或不。一名学生在 至少有一名,最多两名主管。

我正在寻找关于如何做到这一点的实际关系表设计。

+0

到目前为止您已尝试过什么,为什么您认为它不正确? – EWit

+0

现在我的设计看起来像这样:一个监督[supervise_id,faculty_id,student_id]; supervise_id是pk,它不是null。有一个检查条件像这样SELECT COUNT(*)FROM监督GROUP BY student_id HAVING count(*)<2 ...至今我还没有在DB上创建任何内容。在执行它们之前需要确保命令是正确的。但我觉得这种创建监督表的设计不符合给定的要求。我错了@EWit先生吗? –

回答

0

最简单的(有点大胆)的方式来建模,这是

  • 学生表
  • 教员表

现在给学生列FACULTY1和FACULTY2。两者都是FACULTY的外键。用NOT_NULL约束FACULTY1。这强制学生至少有一个FACULTY。 FACULTY2可以为null,但它仍然是一个外键。

FACULTY以某种方式不知道关于学生的任何事情。当没有学生参考教师时,它没有学生,任何数量的学生都可以参考教师。

这种模式有很多缺点(我说的是黑体):

  • 一个学生仅一个教员被监督必须具有此集FACULTY1(不FACULTY2)。同样,当受2个FACULTIES监督的学生删除其中的一个时,您只能删除FACULTY2,或者您必须先交换字段。你可以通过一个更聪明的约束来避开这个问题(FACULTY1不为空或者FFACULTY2不为空)

  • 如果你想改变设计,那么学生可以有3个FACULTIES,你需要添加专栏给STUDENT。然而,这并不像听起来那么糟糕。

在pro方面,除了引用完整性和NOT NULL之外没有其他参与设计。

相关问题