数据库设计一定要满足第一范式吗?满足第一范式的好处是什么?

2016-06-28 10:02:38 +08:00
 kindjeff

不满足第一范式的例子:

比如我的课程设计“学生成绩管理系统”里,学生的成绩没有单独作为一张表,而是作为一个字段储存在学生表里,这个字段是一个 json 字符串(保存所有的 科目( key ):成绩( value ),是多个值,不满足第一范式)。

我认为这样查询很方便,学生只需要一次性取到自己的所有成绩,管理员也只需要一次性查到一个班级所有人的所有成绩作为一张列表;修改和录入成绩相对于查询来说是很少量的操作,做一些 json 的 decode 和 encode 也不是很费功夫。

那么这个时候满足第一范式的好处是什么呢?

8297 次点击
所在节点    MySQL
34 条回复
jarlyyn
2016-06-28 10:04:50 +08:00
管理员要查询所有不及格学生怎么办。
robertlyc
2016-06-28 10:05:22 +08:00
you just need NoSQL
kindjeff
2016-06-28 10:06:33 +08:00
@jarlyyn 查完了在前端筛选……我想的是学生查询自己的成绩是最大量的操作,那么这个结构会比较方便
qiayue
2016-06-28 10:07:35 +08:00
同一楼,很多查询你做不到,比如查询所有只挂了一科的人
stcasshern
2016-06-28 10:08:04 +08:00
用 nosql 吧
qiayue
2016-06-28 10:08:46 +08:00
几十个学生你这样做没问题,几千个几万个学生呢?也是一次性把所有数据都查出来?
jarlyyn
2016-06-28 10:09:42 +08:00
@kindjeff

方便在哪?

如果有 5w 条数据,也是差完了再在前端筛选?

再比如要联合查询呢?

如果不考虑数据量很大,直接做个一个 json,前台修改不久得了。

的确有很多需求会把数据存为 json 压在数据库里,但我觉得不是你这样用的。
tomczhen
2016-06-28 10:10:18 +08:00
OLTP 数据库下遵循范式有很多好处的,毕竟都是经过时间沉淀和总结的, OLAP 数据库就不一定了。
写入上来说,遵循范式的写入量是最少的,并且查询粒度很小的情况下,响应速度也是完全可以保障的。
但是在用于分析的数据库下,做 join 查询是需要消耗很多计算性能的,违反范式可以用空间换取时间。

另外,数据库如果支持直接存储 jsnon 对象, 1 楼说的需求也是能做的。
domty
2016-06-28 10:12:12 +08:00
json 数据在关系数据库里更适合读写,不适合查询。
好处就是同一个字段存储的 json 对于序列化的数据结构没一致要求。

最简单的就是只保留主键编号和序列化后的数据内容,这就是比较典型的 nosql 存储方法了。
kindjeff
2016-06-28 10:12:15 +08:00
@qiayue 了解了。但是通常情况是小范围的,比如取出**一个班**所有语文不及格的学生。
iyaozhen
2016-06-28 10:17:48 +08:00
小数据量怎么搞都可以。数据量打了还是按照标准来的好
starcraft
2016-06-28 10:18:53 +08:00
你这是看书不看关系数据理论的节奏?
kindjeff
2016-06-28 10:20:53 +08:00
@starcraft 做之前确实没看过,今天看书发现了这些东西就来问了。
techme
2016-06-28 10:29:58 +08:00
要是完成作业的话,那就没问题
mcone
2016-06-28 10:31:45 +08:00
说句实在话,如果你是科班的,只能说读书太少想得太多,书上的例子应该已经够了 (我们当时用的是那本英文砖头书,很多学校都用的那个)

如果你只是自己刚好用到这个了,那就不用在意这个了,小数据,或者玩具程序,怎么弄都行,前端处理也完全来得及;大数据的话,那就按照公司规范来吧,能用到这么多数据的公司,这种规范早就成型了
lzhd24
2016-06-28 10:32:11 +08:00
关系数据库必须满足第一范式。
1NF 第一范式可以理解为一张二维表,因为字段不可再分
kindjeff
2016-06-28 10:32:34 +08:00
@techme 看了大家的回复我决定还是改一下……虽然明天就要交
lzhd24
2016-06-28 10:33:09 +08:00
数据库的范式可以理解为表结构的优化程度吧
kindjeff
2016-06-28 10:34:28 +08:00
@mcone 被说中了,是读书太少,今天第一次看,没买课本,照着目录查的维基
mcone
2016-06-28 10:35:43 +08:00
@kindjeff 别看维基,课本真的是最全的,即使教材很差,也很可能比维基强

Ps ,如果非得参考维基百科的话,请看英文版,这种词条的英文版往往比中文详细得多得多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX