Sql 在这种情况下,ER映射的正确设计是什么?

Sql 在这种情况下,ER映射的正确设计是什么?,sql,oracle,Sql,Oracle,我需要对这个问题进行建模: 一个教员可以管理几个学生,也可以不管理。一名学生至少 至少一名,最多两名主管 我正在寻找关于如何实现这一点的实际关系表设计 对此进行建模的最简单(有点粗体)方法是 学生桌 教员桌 现在给学生们列上FACULTY1和FACULTY2。两者都是教员的外键。使用NOT_NULL约束FACULTY1。这强制要求学生至少有一名教员。FACULTY2可以为空,但它仍然是外键 不知怎的,老师对学生一无所知。当没有学生引用某个教员时,就没有学生,任何数量的学生都可以引用教员 这种

我需要对这个问题进行建模:

一个教员可以管理几个学生,也可以不管理。一名学生至少 至少一名,最多两名主管

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

对此进行建模的最简单(有点粗体)方法是

  • 学生桌
  • 教员桌
现在给学生们列上FACULTY1和FACULTY2。两者都是教员的外键。使用NOT_NULL约束FACULTY1。这强制要求学生至少有一名教员。FACULTY2可以为空,但它仍然是外键

不知怎的,老师对学生一无所知。当没有学生引用某个教员时,就没有学生,任何数量的学生都可以引用教员

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

  • 仅由一名教员监督的学生必须在教员1(而非教员2)中设置此设置。同样,当一名受两个学院监督的学生删除其中一个学院时,您只能删除学院2,或者必须先交换字段。您可以通过一个更巧妙的约束(FACULTY1不为null或ffacculty2不为null)来规避此问题

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


在专业方面,这个设计只涉及引用完整性和非空。

到目前为止,你尝试了什么,为什么你不认为它是正确的?现在我的设计是这样的:一个监督[监督id,教员id,学生id];监控id为pk,不为空。有一个检查条件,例如,通过学生id从监督组中选择COUNT(),COUNT()小于2。。。到目前为止,我还没有在DB上创建任何内容。在执行命令之前,需要确保命令是正确的。但是我觉得这种创建监督表的设计不能满足给定的要求。我错了吗@EWit先生?