如何表达这种关系?

时间:2015-05-23 02:29:02

标签: sql database erd

我正试图弄清楚如何在学生,老师和课堂之间建立这种关系。

  

每位教师都有一名或多名学生

现在考虑一下,

  

学生有一个或多个老师,但所有老师都说必须在同一个教室教学。

在摆弄后我已经到了这个阶段(http://i.imgur.com/XfLFPtb.png),但感觉不对。或者也许不是将老师与房间联系起来,也许是学生到房间?我不确定。

我不确定它是否也会涵盖这种情况,例如,你可能有3位教师(可以更多,只是一个例子)。 “teacher_1”“teacher_2”教授“student_1”“teacher_2”“teacher_3 “”student_2“。即使他们在同一个房间教学,“teacher_1”“teacher_3”也不会分享学生。

编辑:

  

每个学生都来自一个教室。即学生只能在一个房间里教学。

我本来可以说,但这就是我认为的暗示。

2 个答案:

答案 0 :(得分:0)

作为建议,您可能需要考虑代表课程或课程的实体。一节课可以有很多学生。老师可以教很多课。一个房间有很多课程。这可能有助于解决您的关系。 (教室一次只能有一节课。) 希望我的逻辑是有道理的。

答案 1 :(得分:0)

你实际上在图表中大部分是正确的。基本上,教师和学生肯定是不同的表,因为你有teacherstudent,它们将通过一个名为teacher_student的链接表与这些表中的双主键链接。换句话说,您拥有被视为many-to-many的关系,并且使用链接表是正确的。

一次更改:您将主键设置为VARCHAR。这有点奇怪。我会使用INT作为teacherstudent表的主键,这些表通常会设置为autoincrement

如果所有教师都在同一个教室教学,那么你需要一个单独的教室桌子并不完全清楚,但是如果你的意思是每个教师从那个教室教授他或她的所有个别课程,那么还有另外一个问题。如果教师和教室之间存在one-to-one关系,您只需要将教室设置为teacher上的额外密钥,而无需另一个表。换句话说,您的classroom表变得不必要了。如果教师分享几个教室,那么您可以有一个单独的表格列出教室,然后在teacher上您将拥有classroom_id的外键,然后将其链接到受控表classroom

修改 最后一个澄清。 TeacherStudent表基本上是正确的。只需将变量更改为INT即可。 teacher_idteacher的主要关键字; student_idstudent上的主键,在teacher_student上同时作为外键和双主键提供。