【问题标题】:Assigning grades(Classes) and Subjects to teachers in Laravel (Many to Many)为 Laravel 中的教师分配成绩(班级)和科目(多对多)
【发布时间】:2018-03-11 08:52:13
【问题描述】:

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

  1. 一个老师可以教很多科目
  2. 一个老师可以教很多年级(班)
  3. 一个老师不能两次被分配到同一班级的一个科目。
  4. 两 (2) 位教师不能在同一年级(班级)教授同一科目
  5. 查询分配给教师的成绩
  6. 查询分配给教师的科目

根据我的要求,这是我设置模式/数据库表的方式:

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 年级”教授“化学”?将不胜感激帮助家伙。如果我需要解释更多,请告诉我。谢谢。

【问题讨论】:

    标签: php mysql laravel


    【解决方案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)位老师不能在同一年级(班级)规则中教授同一学科”,我会在您的应用程序上使用逻辑来实施该规则,因为我似乎无法想象(有时我缺乏想象力 :( ) 可以提供您的概念的数据库设置。

    编辑: 原因:作为学生,我误读并解释了科目。

    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';
    

    【讨论】:

    • 你如何建议我在应用程序中实现它?
    • 按照你的例子,类似这个查询,它返回数量“教师在 12 年级教授化学”,这应该给你在 12 年级教授化学的教师数量。所以,如果number
    • 对不起,请用查询更新您的答案,以便我能更好地理解
    • @NathanSiafa 更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2021-05-20
    • 1970-01-01
    • 2020-09-02
    • 2020-12-26
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多