【问题标题】:Relationship student, teacher and school unexplained无法解释的学生、老师和学校的关系
【发布时间】:2013-10-04 14:27:36
【问题描述】:

共有三个实体:

School, teacher and student

有一些规则:

  • 一个学生只能属于一位老师
  • 一个学生只能属于一所学校
  • 一位教师可以属于一所或多所学校

这意味着我的表格中有这些关系:

  • 学生表有一个指向老师的链接和一个指向学校的链接
  • 表老师有一个与学校的链接表(多对多关系)

现在这就是问题所在。假设有以下情况

School A    school B
 | |____       |
 |     |       |
 |    Teacher John
 |     |
 |     |
Student Ale

如您所见,John 老师连接到两所学校,学生 Ale 连接到 John 老师和学校 A。

现在约翰老师离开了学校 A,但学生 Ale 仍然与现在只属于学校 B 的老师 John 保持联系。事实是 Ale 不去学校 B,所以他应该被在这种情况下是约翰老师。

我正在尝试以编程方式完成所有这些操作,但我怀疑架构中有问题。你能发现它有什么问题吗?

【问题讨论】:

  • 您使用的是哪个 DBMS?我还要说您的数据库设计存在一些规范化问题。
  • 为什么不拥有一个属于学校的CLASS 表,而学生属于CLASSCLASS 也有一个Teacher。这样您就可以将教师重新分配到班级,而无需通过学生。
  • 老师没有学校的学生,他可以属于学校吗?
  • 是的,他可以属于学校,但目前没有指定老师。

标签: mysql database


【解决方案1】:

我不是 Db 专家,但如果我是你,我会这样做:

Teacher*--------1 teachesIn 1------------*School
                        *                   *
                        |                   |
                        |                   |
                        1                   |
                      Student 1--------------

所以你的学生不是链接到老师本身,而是链接到老师和学校之间的表, 所以如果老师停止在学校教书,你会自动删除老师和学生之间的关系

【讨论】:

  • 这是一个很好的解决方案。另外,由于学校和老师之间的关系是多对多的,所以无论如何你都需要关系表。
【解决方案2】:

您已声明您将students 直接链接到学校。在 SQL 中,您可以确保只有 teachers 是有效的也有这个学校。

在 SQL 中,这可以通过例如INNER JOIN 来实现。当 John 老师离开 A 学校时,Student Ale 要么必须换一个新老师,要么 Student Ale 的条目不再有效(并且在使用 INNER JOIN 时不会显示)。

【讨论】:

    【解决方案3】:

    从逻辑上讲,您应该设置以下条件: 一个学生只能属于该学生所在学校的一位老师

    在分配之前,您可以检查此条件是否为真..

    当老师更新他的学校时,您应该再次检查师生分配。

    【讨论】:

      最近更新 更多