【问题标题】:Need help in creating a student database在创建学生数据库方面需要帮助
【发布时间】: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


【解决方案1】:

您应该(几乎)永远不要在一个字段中存储多条数据。不仅很难在里面进行搜索,而且每次写入时都必须每次读取/序列化时解析数据。

Take a look at this answer.

【讨论】:

  • 我已阅读该答案。但就我而言,我有学生和他们在不同科目上的成绩。因此,通过您的解决方案,我可以说我可以创建一个包含学生卷号、年级和科目(3 列)的表格。是对的吗?但是,如果我这样做,对于不同年级的不同科目,我将有相同的卷号。可以吗?
  • 这听起来很对。您可以在 sqlfiddle.com 上使用您的架构。一旦你有东西,把它贴在这里,我会看看。
  • 非常感谢。感谢您的帮助:)
  • 您能解释一下“period_1”和“period_2”字段吗?此外,您希望每个班级的出勤率输入为单个值还是是/否?
  • period 代表一个学期的特定检查点。实际上,一个学期会有两个学期,每个学期都有一个考试。出勤率代表一个时期内获得的出勤率学生的百分比。
猜你喜欢
  • 2010-11-08
  • 2020-02-16
  • 2010-10-06
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2011-07-23
相关资源
最近更新 更多