【问题标题】:SQL table structure relationship feedbackSQL表结构关系反馈
【发布时间】:2015-09-29 14:31:47
【问题描述】:

我的 sql 中有 3 个表。我想让你们反馈我是如何建立我的表关系的。所以我有 4 个表:application_table、teacher_table、student_table 和 class_table。

这里有几个条件:

  1. 一个老师可以教一门或多门课,但也有老师教0门课。 (1 -> N, teacher -> class_table) 关系。需要注意的一件事是老师可能会离开学校。

  2. 一个学生可以参加多个课程。需要注意的一件事是,学生可能会被开除或毕业。 (1 -> N 个学生-> 班级)

  3. 一个应用程序可以被多个学生使用,一个学生可以使用多个应用程序。 (N -> N 关系)

  4. 一个应用程序可以被多个老师使用,一个老师也可以使用多个应用程序。 (N -> N 关系)

ps。申请可能会被切断、过期或不再被学校使用。

application_table

 applicationId
 applicationName
 expiryDate

老师和班级的关系

 class_table
   classId
   classCode
   teacherId

学生和班级关系

student_table
  studentId 
  firstName
  lastName
  classId

申请和老师的关系

  application_teacher
     applicationId
     teacherId

申请和学生的关系

 appliaction_student
   applicationId
   studentId

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    恕我直言,您应该首先研究标准化。一个很好的来源是维基百科。您的结构反对规范化(即:学生 - 班级不应该有名字,姓氏)。

    “学校”数据库比这更复杂,但您的结构可能适用于沙盒学习应用程序,前提是您纠正了规范化问题。

    【讨论】:

    • 您好 Cetin,感谢您的回复。我认为我的学生 - 班级还可以,因为一个班级可以参加我的许多学生,所以它应该是 1-> N,我添加 classId 作为外键来证明这是一个 1-> N 关系
    • 不,不行。问题是,你有 studentId 和 classId 来支持多对多关系(它是“桥”表)。学生的名字、姓氏或班级的 classCode 不属于那里(只是外键)。
    • 你能提供一个我应该如何修复它的例子吗?谢谢。因为我是 sql 新手
    • 正如我所说,从该表中删除 firstName,lastName。只保留外键(以及不属于学生或班级表的其他字段,如果有的话 - 即:enrollmentDate)。请花点时间阅读和理解维基百科上的规范化。
    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多