【发布时间】:2015-07-17 13:17:14
【问题描述】:
我正在为大学数据库创建一个项目/门户网站,我必须在其中存储学生的出勤率和他们在各个科目中的成绩。目前,我设计的数据库如下。我需要知道这是否是一种存储数据的好方法。
主表:
Id | roll_number | Department | Year_of_study
为每个学生添加出勤率的表格:
Id | roll_number(foreign key) | Attendance_for_period1 | Attendance_for_period2
添加主题的表格:
Id | Subject_name
1 | computer Programming
2 | Data structures
3 | professional ethics
.
.
.
为每个学生在各个科目中添加成绩的表格:
Id | roll_number(foreign key) | Marks_in_period1 | Marks_in_period2
1 | 412811104092 | A,B,A,B,C,D | B,C,A,A,D,F
在 Marks_in_period1 列中,逗号分隔每个科目的成绩(即)我插入了 6 个科目的分数。数据库是否正确或需要任何优化?
【问题讨论】:
-
永远不要在逗号分隔的列表中存储任何内容。那只是自找麻烦。使用第三范式。
-
您的表格设计非常不规范。您的成绩表将多个值存储在一个交叉点中。它也有重复组(周期1,周期2)这违反了1NF。您的出勤表有重复组(周期 1、周期 2)。这也违反了 1NF。您的主表似乎也有问题,因为您没有部门表。我不确定这个问题与 php 有什么关系,您需要选择一个 DBMS。 sql server mysql.
-
“我需要知道它是否是一种存储数据的好方法。”不,不是
-
@SeanLange 重复组?我不能得到你。你能解释清楚吗?我有部门表,但我没有在这里显示。
-
重复组就是 Period1、Period2。当您像这样构建表时,您必须更改表和所有查询以添加 Period3。这是不好的。相反,您应该将句点拆分到另一个表中,这样有多少句点就无关紧要了。
标签: optimization database-design