Answers:
如果您已经在谈论拆分和计算,请不要将其存储为数组。
无论关系理论,传统规范化规则和教条如何,它都只是一种设计,可为您提供最小的灵活性。
使每个检查结果连续。
我并没有试图预料到所有事情,但是有很多事情需要更细化(并且是的,归一化),而且只有稍微多一点的空间昂贵的设计才能为您提供现在或可能不需要的信息。将来可能不需要:
抛出最高和最低结果?您将必须切分数组并对其进行排序。
平均吗?您将需要将其切碎并总计
对所有学生的考试结果进行分析?您将需要切片和旋转
排序以进行计数(例如英国的GCSE,可能是7 As和2B)?您必须进行切片和排序
请注意,所有这些切片和排序都非常便宜,属于经过索引的标准化设计。
对于分数,从性能角度来看,明确的赢家正在将其数字存储起来,例如:
create table test_scores
(
student_id int,
test_id int,
score int
);
它易于查询,易于更新和添加,并且超级容易且快速地执行聚合。考虑到“将这些信息存储为我必须拆分的字符串”或“存储在列中”的选择,对于RDBMS中的大多数用例,获胜者几乎总是会“存储在列中”。
只要您使用char(15)或15 tinyint使用tiny int(0到255)是相同的(大小明智)即可。因此,从性能角度来看,选择15个tinyints,因为您节省了提取和字符串处理的时间。
更新
如果标记是两位数,则需要CHAR(30),其大小是tinyint的15倍。