关于数据库开发,哪种变体更好?

时间:2014-02-13 23:15:21

标签: sql

我正在创建一个学校成绩簿数据库。我有2张桌子:班级和老师。我有一个问题。老师需要成为班级的形式大师。我应该如何建立这种关系?

变式1: 将具有 teacherId 属性。

变体2: 教师将拥有 classId 属性。

什么样的变体是对的?

3 个答案:

答案 0 :(得分:7)

一般来说,有三种类型的关系:

<强>一到多

  • 如果一个班级可以有很多老师,但老师只能教一个班级,那么就把ClassID放在老师的桌子上。

<强>许多对多

  • 如果一个班级可以有很多老师,老师可以教许多班级,那么请制作第3个表格TeacherClassLink并将ClassIDTeacherID放入其中,以及像TeacherClassID这样的标识列 - 根据评论,这被称为cross reference table,尽管我总是非正式地将它们称为链接表。

<强>一对一的

  • 如果每位教师只能教一门课,并且每节课只能有一位教师,那么您可以在两个表中使TeacherIDClassID成为相同的值。

在您的示例中,

Variant1 是一对多的关系,每个班级只能有一名教师,但每位教师都可以参加很多课程。

Variant2 是一对多的关系,每个班级可以有多个教师,但每个教师只能有一个班级。

根据应用程序的业务需求,您应该决定选择哪个选项。

答案 1 :(得分:0)

假设一个教师教授一个特定的课程,而教师通常可以教授多个课程,你需要将一个TeacherId添加到课堂实体。

答案 2 :(得分:0)

变体1允许更大的灵活性。使用此变体,您可以拥有多个具有相同教师ID的类。

class Class {
   int TeacherId {get; set;} // this is absolutely necessary
   // other properties
}

简单地说,教师被分配到一个或多个班级。 如果教师包含类ID,那么当同一位教师教授3个不同的课程时,会复制多少数据?