mysql - 在一个mysql列中存储多个数据并单独检索数据

标签 mysql sql

我有一个 mysql 表,用于对单个学生进行评分:

studentID int(11)
studentname varchar(70)
maths_score int(11)
science_score int(11)
english_score int(11)

与维护数据库的原子性规则相比,该表效率低下。是否可以将数学-科学-英语的分数存储在一列中,并且可以单独检索?如果不可能,我如何遵守原子性规则?

最佳答案

您应该始终将此类数据标准化为单独的列。将选择的不同数据放入一个组合列中违反了第一范式,这是关系数据库模型的标准(如果不是要求)。

但是,您可以将数据复制到附加列中,以便更有效地执行某些查询。重复比非规范化危害较小。例如,您可以存储一个 total_score 列,以节省您重新计算某种形式的加权平均值的时间,但将分数折叠到一列中并不是一个好主意。

如果您正在寻找一种存储任意数量分数的方法,请创建一个“科目”表和一个“分数”表,并将它们链接起来,以便每个学生可以有多个分数,每个分数都相互关联到一个主题。

关于mysql - 在一个mysql列中存储多个数据并单独检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121401/

相关文章:

java - SQLite 如果数据库中存在输入则跳过或覆盖现有的

mysql - 我如何只返回那些欠我钱的客户(在 mySQL 中)?

sql - 在表值函数 SQL Server 中使用 Execute() 方法

SQL Server : expand rows and transpose columns

android - 如何知道从可扩展 ListView 中选中了哪个复选框并获取其信息(Android)

php - MySQL 透视将行变成列

java - 找不到类名 : com. mysql.jdbc.Driver 的驱动程序

mysql - Action Controller::Connection 在使用 mysql 在 ruby​​ on rails 中创建应用程序时未建立

mysql - 如何在一定时间范围内从其他表中选择具有 COUNT 行的表?

javascript - 将 PHP 数组发送到 JavaScript 问题