Php 学生试卷成绩数据库设计
早些时候,我问了一个关于一个问题。在同一个系统中,我还有一个单独的表来存储学生的分数。现在,在我提问之前,我想展示一下我迄今为止所做的工作: 每学期有2篇论文。完成本课程共有6个学期。在第一篇论文中,学生的最高分数为75分,第二篇论文的最高分数为25分。现在,我构建了一个简单的表Php 学生试卷成绩数据库设计,php,mysql,sql,database,Php,Mysql,Sql,Database,早些时候,我问了一个关于一个问题。在同一个系统中,我还有一个单独的表来存储学生的分数。现在,在我提问之前,我想展示一下我迄今为止所做的工作: 每学期有2篇论文。完成本课程共有6个学期。在第一篇论文中,学生的最高分数为75分,第二篇论文的最高分数为25分。现在,我构建了一个简单的表students\u marks,如下所示: Name | Type ------------|------- marks_id | int s_id | int sem_id
students\u 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\u id
是一个主键
,而s\u id
和sem\u id
是另两个表的外键
要输出获得的分数,我将执行以下操作:
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
在
students\u marks
表中,您有sem\u id
和sessionYear
列。我假设您可以从sem\u id
中找到年份,因此不需要sessionYear
列。移除它
现在,您可以只拥有一列试卷评分,并在单独的一行中输入每篇试卷
Name | Type
------------|-------
mark_id | int
student_id | int
semester_id | int
paper_grade | int
不要担心每一行的ID都被重复——只要它们之间没有依赖关系,就可以了
我还建议将decimal(11,0)
改为int
我将这个问题标记为主要基于观点。纸张
应该是它自己的表格,包含纸张id、名称、最大标记等;然后,您将有一个标记
表(奇怪地拿着标记),表中有一个主
(或唯一
)复合键,由学期id、学生id和论文组成id@CD001你能再解释一下吗。我在这个论坛上看过很多教程和其他问题,我没有得到一个明确的答案,但是很多教程指向了你的方向,但它们只是让我困惑。我不认为这是基于观点的。你的模式设计有缺陷。@他们:“我的问题是,我应该在第五学期和第六学期有一个单独的表格并进行相应的查询,还是有更好的方法来设计这个表格以提高效率,并且如果将来有任何论文我可以很容易地合并?”-建议(基于观点)。谢谢,谢谢分享,我在第四学期作为一名学生使用了sessionYear。所以,当我尝试选择第二学期学生的所有分数时,现在第四学期学生的所有第二学期分数也会出现。因此,在生成报告的过程中,我将只选择当前会议年度的分数。至于使用十进制,在某一时间点,论文的分数为20.5分,总共25分。然后我的系统会在生成最终报告时将数字汇总。你忘了paper@fdiengdoh我认为你应该把year
列移到学期表中。