大家好。我的应用程序有几个要求,我必须完成。这些列出如下:
根据我的要求,这就是我设置模式/数据库表的方式:
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年级"?非常感谢帮助人员。如果我需要解释更多,请告诉我。感谢。
答案 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';