如何解决如果您有一个具有大特征 (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:要获取值,需要对列名进行编码。这是访问它的代码中的一种维护问题,无论是查询还是应用代码
- 查询:基本查询变得不可能。编写返回学生平均成绩的查询,问题将立即显而易见
以下是我为自己制定的两条我永远不会违反的可靠规则:
- 更喜欢多行而不是多列。
- 更喜欢更多的列而不是更多的表格。
最好将数据存储为每人每门课程一行。为什么?以下是一些原因:
- 不同的人可能有不同的课程。
- 大多数数据库对表中的列数都有限制。
- 您可能希望为每个分数存储其他信息,例如输入的日期/时间。
- 如有必要,可以轻松添加新课程或更改现有分数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。