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

时间:2011-11-14 12:13:47

标签: mysql sql

我有一个用于评分个别学生分数的mysql表:

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

与维护数据库的原子性规则相比,此表无效。是否可以在一列中存储数学 - 科学 - 英语的标记,并且可以单独检索?如果不可能,我如何符合原子性规则?

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

要符合此cas中的原子性规则,您需要在三个不同的表中分隔您的表。一个用于存储学生数据,另一个用于存储课程(英语,科学)和其他用于存储每个学生/课程组合的考试成绩。

答案 2 :(得分:0)

永远不要将列编码为数据库中的列,您将无法轻松搜索。如果您担心使用的空间,可以使用tinyint。

答案 3 :(得分:0)

您无法在一列中存储多个属性,然后单独检索它们。 您必须将每个属性存储在单独的列中,以符合1 NF。