首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学生每篇论文成绩数据库设计

学生每篇论文成绩数据库设计
EN

Stack Overflow用户
提问于 2017-08-14 23:26:03
回答 2查看 882关注 0票数 1

早些时候我问了一个关于attendance system的问题。在相同的系统中,我也有一个单独的表来存储学生的分数。现在,在我的问题之前,我想展示一下我到目前为止所做的事情:

每学期有2篇论文。完成这门课程需要6个学期。在第一篇论文中,学生的最高分数为75分,第二篇论文的最高分数为25分。现在,我已经构建了一个简单的表students_marks,如下所示:

代码语言:javascript
复制
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_idsem_id是另外两个表student_infosemesterforeign keys

要输出获得的分数,我将执行以下操作:

代码语言:javascript
复制
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来创建这个应用程序。

EN

回答 2

Stack Overflow用户

发布于 2017-08-14 23:38:00

我会使用一种更规范化的形式:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-08-14 23:52:08

students_marks表中,有列sem_idsessionYear。我假设您可以从sem_id中找到年份,所以sessionYear列是不必要的。去掉它。

现在,您可以只使用paper_grade one column,并在单独的行上输入每篇论文。

代码语言:javascript
复制
Name        | Type 
------------|-------
mark_id     | int
student_id  | int
semester_id | int
paper_grade | int

不要担心每一行的in都是重复的--只要它们之间没有依赖关系,就没问题。

我还建议将decimal(11,0)更改为int

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45677932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档