如果你有一个具有大特征(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 学生的平均成绩,问题将立即显而易见
这是我为自己制定的两条我从不违反的稳固规则:
- 多行多于多列。
- 更多列优先于更多表格。
因此,如果您可以想象一个人同时注册了 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 学生的平均成绩,问题将立即显而易见
这是我为自己制定的两条我从不违反的稳固规则:
- 多行多于多列。
- 更多列优先于更多表格。