如果您有一个具有大特征 (100+) 的数据对象,通过添加列或以行格式存储它来扩展此数据是否更好?

问题描述

因此,如果您可以想象一个人同时注册了 100 门不同的课程,并且刚刚获得了所有课程的最终成绩,那么像这样存储该信息(宽列)是否更好:

personID 数学 科学 英语
1 90 88 98
2 91 98 90

(和 ...97 个其他列)

或者像这样:

personID 等级 主题
1 90 数学
1 88 科学
1 98 英文

这会显着降低列数(从 100 到 3)。

解决方法

在任何表上创建 100 多列总是个坏主意。任何数据库中的列数都没有限制。 阅读 this 以获得更好的主意。你可以想到以下方式。

学生标记详情

学生MarkDetailsID personID 主题 ID 获得的分数 考试编号
1 1 3 64 1
2 2 4 36 1
3 1 4 36 2

学科大师

主题 ID 主题名称
1 数学
2 科学
3 英文
,

绝对是选项二 - 很少有固定数量的列。

原因很多。以下是一些:

  • 维护:如果你现在有 100 列,明天你会有 101。添加一列需要改变架构,这很痛苦
  • access:要获取值,需要对列名进行编码。这是访问它的代码中的一种维护问题,无论是查询还是应用代码
  • 查询:基本查询变得不可能。编写返回学生平均成绩的查询,问题将立即显而易见

以下是我为自己制定的两条我永远不会违反的可靠规则:

  1. 更喜欢多行而不是多列。
  2. 更喜欢更多的列而不是更多的表格。
,

最好将数据存储为每人每门课程一行。为什么?以下是一些原因:

  • 不同的人可能有不同的课程。
  • 大多数数据库对表中的列数都有限制。
  • 您可能希望为每个分数存储其他信息,例如输入的日期/时间。
  • 如有必要,可以轻松添加新课程或更改现有分数。