为Laravel(多对多)教师分配成绩(课程)和科目

时间:2017-09-29 12:37:49

标签: php mysql laravel

大家好。我的应用程序有几个要求,我必须完成。这些列出如下:

  1. 老师可以教许多科目
  2. 老师可以教许多年级(班级)
  3. 教师不能两次分配到同一班级的单个科目。
  4. 两(2)名教师不能在同一年级(班级)教同一科目
  5. 查询分配给教师的成绩
  6. 查询分配给教师的科目
  7. 根据我的要求,这就是我设置模式/数据库表的方式:

    subject
    -----------
    id,
    name
    
    grades
    -----------
    id,
    name
    
    teachers
    ------------
    id,
    name
    
    grade_subject
    ------------------
    id,
    grade_id,
    subject_id,
    
    subject_teacher
    ---------------
    id,
    subject_id,
    teacher_id
    
    grade_teacher
    ---------------
    id,
    grade_id,
    teacher_id
    

    现在我所拥有的大部分内容都能奏效,但我遇到的问题是检测到两名教师没有在同一年级(班级)教授同一科目

    通过上述系统设置,我相信很难做到这一点。 例如,我如何设置我的系统,以避免两名教师教授"化学"在" 12年级"?非常感谢帮助人员。如果我需要解释更多,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

你快到了!请允许我分享我对数据库应该如何的看法:

表科目

 id
 name

表老师

 id
 name

表类

 id
 name

现在,让我们说每位教师可以教授多个科目

表teacher_subject

 id          PK
 subject_id  FK
 teacher_id  FK

我们也说,一个班级有一套科目 所以某个班级(12年级)只能有化学,数学等。

表subject_class

 id         PK
 class_id   FK
 subject_id FK

现在,我们想说:

表teacher_subject_class

 subject_class_id    PK/FK
 teacher_subject_id  PK/FK

含义如下:

' teacher_subject_id 1 subject_class_id 1'

无法重复(不能将教师分配到同一班级的单个科目两次。)

至于“两(2)名教师不能在同一年级(班级)规则中教授同一科目”,我会在您的应用上实施逻辑规则,因为我可以&# 39;似乎想象(有时我缺乏想象力:()数据库设置可以提供你的概念。

编辑: 理由:我想念并解释学科作为学生。

Edit2:您提出的查询

Select count(teacher_subject_class.teacher_subject_id) from teacher_subject_class 
inner join subject_class on subject_class.id = teacher_subject_class.subject_class_id 
inner join teacher_subject on teacher_subject.id = teacher_subject_class.teacher_subject_id 
inner join subjects on subjects.id = subject_class.subject_id 
inner join teachers on teachers.id = teacher_subject.teacher_id 
inner join class on class.id in (teacher_class.class_id, subject_class.class_id) 
where subject.name = 'Chemistry' and class.name = 'Grade 12';