Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 学生试卷成绩数据库设计_Php_Mysql_Sql_Database - Fatal编程技术网

Php 学生试卷成绩数据库设计

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

早些时候,我问了一个关于一个问题。在同一个系统中,我还有一个单独的表来存储学生的分数。现在,在我提问之前,我想展示一下我迄今为止所做的工作:

每学期有2篇论文。完成本课程共有6个学期。在第一篇论文中,学生的最高分数为75分,第二篇论文的最高分数为25分。现在,我构建了一个简单的表
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
列移到学期表中。