多对多关系

时间:2016-05-15 12:21:57

标签: sql database rdbms table-relationships object-oriented-database

请帮助我进一步了解many to many关系。假设我有教师和学生表,据我所知,它是one-to- many

教师

TeacherId Primary Key 
TeacherName 

学生

StudentId Primary Key
TeacherId Foreign Key
StudentName

TeacherId可以在学生表中多次出现。 我很困惑,因为学生可以有很多老师。

  1. 我什么时候可以说one-to-many,什么时候many to many
  2. 我可以说一个学生可以有很多老师。

    另一方面,我也可以说一个教师可以有很多学生。

    1. 如果一个教师和一个学生都可以有很多学生(老师),那么很多教师(为学生< / em>的)。我应该如何构建表格?
    2. 是否可以将学生与教师的关系视为many-to-many
    3. 据我所知,一旦我正确识别了关系,我就可以更容易地决定要创建多少个表,或者是否需要创建连接表。从我在线阅读的教程和信息中可以看出,如果关系为join-table,我应该创建一个many-to-many。所以我认为应该看起来像这样。

      教师

      TeacherId Primary Key 
      TeacherName 
      

      学生

      StudentId Primary Key
      StudentName
      

      Teacher_Student(加入表格)

      Id Primary Key
      TeacherId PRIMARY KEY
      StudentId --took PKs of both Student and Teacher table.
      

      是否有条件可以轻松识别关系,可能是因为它依赖于一张桌子?

      我很感激任何解释。我刚开始学习这个。

      感谢。

3 个答案:

答案 0 :(得分:1)

  1. 我认为识别一对多关系的最简单方法是从逻辑上考虑它,例如一本书可以有很多页但一页不能有很多书。以你的学生和老师为例,你可以认为这是一个多对多的关系。

  2. 表格结构应如上所示,一个表格供学生和教师使用 - 包含所有元数据,例如:然后你可以使用链接/连接表将你的多对多关系变成两个 - 一对多的关系。

  3. 在上面的示例中没有将TeacherId列为Teacher_Student(连接表)中的主键,这是错误的 - 这应该是具有主Id字段的两个外键连接或者在teacherid和者之间的复合主键。 studentid - 这消除了在连接表上对Id字段的需要。

    1. 是的,在大多数情况下,这种关系可以被视为多对多,因为从逻辑上考虑一个学生可以拥有不同科目的教师,一个教师可以在一个班级中拥有多个学生。 可能会出现一些特殊情况:教师只有一名学生或学生只有一个班级 - 这些仍然可以用你的联名表建模,所以最好处理所有案例然后设计一个有限的表格无法扩展的结构。
    2. 希望有所帮助^^

答案 1 :(得分:0)

通常在ER图上标识多对多的关系

以良好的方式说明关系,这样您就不需要为多对多关系创建表

您可以创建示例课程表

具有这些属性(CRN编号通常为整数,学生ID,教师ID,科目,日期和时间

注意:日期和时间是可选的我只是澄清它将如何

我希望我可以帮助你:)。

答案 2 :(得分:0)

一个表有两个外键字段,如Teacher_Student表,其中

 StudentId Foreign Key
 TeacherId Foreign Key