首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个mysql列中存储多个数据并分别检索数据

在一个mysql列中存储多个数据并分别检索数据
EN

Stack Overflow用户
提问于 2011-11-14 20:13:47
回答 4查看 957关注 0票数 0

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

代码语言:javascript
复制
studentID int(11)
studentname varchar(70)
maths_score int(11)
science_score int(11)
english_score int(11)

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-14 20:17:18

是的,这是可能的。但是你的表甚至不会是第一范式。

为了符合此cas中的原子性规则,您需要将您的表分隔开三个不同的表。一个用于存储学生数据,另一个用于存储课程(英语、科学),另一个用于存储每个学生/课程组合的测试分数。

票数 1
EN

Stack Overflow用户

发布于 2011-11-14 20:18:12

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-11-14 20:17:42

切勿将列编码为数据库中的一列,否则将失去轻松搜索的能力。如果您担心占用的空间,可以使用tinyint。

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

https://stackoverflow.com/questions/8121401

复制
相关文章

相似问题

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