1

我需要帮助。我从未使用过复杂的数据库,也不知道如何排列表格。我需要一个包含孩子姓名的表格,该表格与他们的父母帐户相关联($_POST['children_name']在提交注册表时使用 等),但现在我需要将他们的学校与他们的成绩相关联(例如我在 8 A 年级),然后他们的班级与个别小学科目,然后将分数(如美国的 A+)和缺勤与个别孩子联系起来。

我不知道该怎么做。我做了一个例子,如下图所示。请你帮助我好吗?

(请注意,那里有 3 张桌子)

图片

后期编辑:Fluffeh 的解决方案,稍加编辑!" 我会为您的表格考虑以下结构。

首先,该网站将获得数据的所有学校的表格。

id    schoolname
 1     European College#1
 2     European Colelge#2

然后,一张包含大学中所有活跃课程的表格。

id    Class
 1    8A
 2    8B
 3    8C

然后是所有学校提供的科目的表格。您将需要一个 ID,然后根据需要提供任何其他信息。

    schoolSubject
id  name
1   mathematics
2   geography
    3       physics
    4       geometry

接下来是一个包含学校、班级和学校科目之间关系的表格。

relations
SchoolID   ClassID     SubjectID
1           1               1
1           1               2
1           1               4

(所以,如果我的逻辑是正确的,“欧洲学院#1”的8A班学生将学习数学、地理和几何)

最后,我们需要知道哪个学生来自哪里。

students
id  name        class_id   schoolname_id
1   John Doe     1           1
2   Jane Doe     2           2

最后一个表几乎使我们能够记录同一学生同一科目的多个成绩 - 以防学生必须多次学习一门科目。

grades
subjectID   studentID   grade
1           1           B,A,B
1           2           A,B,B
2           1           A,C,C
2           2           B,A,A

有了这个结构,我可以使用什么查询?

4

1 回答 1

1

我会为您的表格考虑以下结构。

首先,学校提供的科目表。您将需要一个 ID,然后根据需要提供任何其他信息。

schoolSubject
id  name
1   mathematics
2   geography

接下来是一个包含学生信息的表格。同样,我们有一个唯一的 ID,然后是任何需要的信息

student
id  name
1   John Doe
2   Jane Doe

下表允许所谓的多对多关系。基本上,这意味着您可以为同一科目注册多个条目(每个科目可以注册多个学生)和多个学生条目(因为学生可以注册多个科目)。

studentEnrolment
subjectID   studentID
1           1
1           2
2           1

最后一个表几乎使我们能够记录同一学生同一科目的多个成绩 - 以防学生必须多次学习一门科目。

grades
subjectID   studentID   grade
1           1           B
1           2           A
2           1           A
2           2           B

有了这个结构,您可以执行如下查询:

select
    subj.name,
    stud.name,
    grad.grade
from
    schoolSubject subj
        join studentEnrolment enr
            on subj.id=enr.subjectID
        join student stud
            on enr.studentID=stud.studentID
        join grades grad
            on subj.subjectID=grad.subjectID
            and stud.id=grad.studentID
于 2013-09-16T11:25:42.610 回答