Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
之前我问过一个关于attendance system的问题。在同一系统中,我还有一个单独的表来存储学生成绩。现在,在我提出问题之前,我想展示一下到目前为止我做了什么:
每学期有两篇论文。有6个学期完成课程。在第一篇论文中,一个学生的满分为75分,第二篇论文的分数为25分。现在,我建立了一个简单的表
现在,
要输出获得的标记,我可以这样做:
我没有意识到的是,在第五和第六学期有4篇论文,每篇论文的最高分数为50。现在,如果我在上表中再增加两列,则对我不需要的其他学期来说是多余的有4篇论文。
我正在寻找帮助来重新设计该表,以便使我能够合并新论文。
提前致谢。
注意:我正在使用MySQL数据库和PHP创建此应用程序。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
之前我问过一个关于attendance system的问题。在同一系统中,我还有一个单独的表来存储学生成绩。现在,在我提出问题之前,我想展示一下到目前为止我做了什么:
每学期有两篇论文。有6个学期完成课程。在第一篇论文中,一个学生的满分为75分,第二篇论文的分数为25分。现在,我建立了一个简单的表
students_marks
,如下所示:Name | Type
------------|-------
marks_id | int
s_id | int
sem_id | int
sessionYear | varchar(11)
paper_one | decimal(11,0)
paper_two | decimal(11,0)
现在,
marks_id
是primary key
,而s_id
和sem_id
是其他两个表foreign keys
和student_info
的semester
。要输出获得的标记,我可以这样做:
SELECT * FROM `student_marks`
JOIN `student_info` ON student_marks.s_id = student_info.s_id
WHERE student_info.deleted = ?
AND `sem_id` = ? AND `sessionYear` = ?
ORDER BY `class_roll`
我没有意识到的是,在第五和第六学期有4篇论文,每篇论文的最高分数为50。现在,如果我在上表中再增加两列,则对我不需要的其他学期来说是多余的有4篇论文。
我正在寻找帮助来重新设计该表,以便使我能够合并新论文。
提前致谢。
注意:我正在使用MySQL数据库和PHP创建此应用程序。
最佳答案
我将使用更规范的形式:
create table student (id int, -- pk this one
studentinfo ... )-- all the student info
create table attendance (studentid int, -- fk to student
semesterid int)
create table paper (studentid INT, --fk to student table
selemsterid int, -- fk to attendance table
paperid INT, -- one for each paper
paperdate date, -- allows retakes
papermark decimal(11,0) ) -- Store the marks
select s.*, p.*
from student s
inner join attendance a
on a.studentid = s.id
inner join paper p
on p.studentid = s.id
and p.semesterid = s.semesterid
09-25 21:27