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

If you have a data object with large features (100+), is it better to expand this data by adding columns or by storing it in row format?

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

personID Math Science English
1 90 88 98
2 91 98 90

(和 ...97 个其他列)

或者像这样:

personID Grade Subject
1 90 Math
1 88 Science
1 98 English

这会使列显着减少(从 100 减少到 3)。

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

  • 不同的人可能有不同的课程。
  • 大多数数据库对 table 中的列数有限制。
  • 您可能希望存储每个分数的附加信息,例如输入的 date/time。
  • 如有必要,可以轻松添加新课程或更改现有分数。

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

StudentsMark 详细信息

StudentsMarkDetailsID personID SubjectId MarksObtained ExamID
1 1 3 64 1
2 2 4 36 1
3 1 4 36 2

学科硕士

SubjectId SubjectName
1 Maths
2 Science
3 English

肯定是选项二 - 几个固定的列数。

原因很多。这里有一些:

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

这是我为自己制定的两条我从不违反的稳固规则:

  1. 多行多于多列。
  2. 更多列优先于更多表格。