明天就要软考了,我发现了数据库三范式之第一范式好像过时了 - V2EX
dushixiang
6.64D

明天就要软考了,我发现了数据库三范式之第一范式好像过时了

  •  
  •   dushixiang 7h 23m ago 3171 views

    第一范式( 1NF )要求数据库表中的每个列都是不可再分的原子值,即每个列都不能包含多个值或值的列表。

    现在使用 pg 的时候经常用 json 格式了,是不是违反了第一范式?

    46 replies    2026-05-22 19:12:33 +08:00
    fingerxie
        1
    fingerxie  
       7h 18m ago
    我也要软考了,我还一天没学
    aes114514gcm
        2
    aes114514gcm  
       7h 13m ago
    注意适用范围
    pg 的定位是(Object-Relational Database Management System, ORDBMS)
    不是纯粹的关系型数据库
    dushixiang
        3
    dushixiang  
    OP
       7h 13m ago
    @fingerxie 明天别去受罪了,在家睡觉吧
    dushixiang
        4
    dushixiang  
    OP
       7h 13m ago
    @aes114514gcm mysql/sqlite 也有 json 格式的
    happyhou
        5
    happyhou  
       7h 12m ago
    是的,违反了 1NF 。
    Bigstupidcat
        6
    Bigstupidcat  
       7h 10m ago   1
    没事,考了也没啥用,除了进了个人才库,屁用没有,有这精力,准备准备考公吧
    Aethyr
        7
    Aethyr  
       6h 47m ago
    json 格式看场景
    互联网中第三范式才是人均不遵守
    momocraft
        8
    momocraft  
       6h 43m ago
    这是没人会 100%遵守的理论规则 比如用这个范式怎么存储地址
    Rickkkkkkk
        9
    Rickkkkkkk  
       6h 39m ago
    这种东西比接口的 RESTful 规范还没用一点

    感觉会把这种东西不断传播作为正确的人都是从来没有长期开发过任何一个复杂的商业系统。

    统一认定为没真正上过班
    adoal
        10
    adoal  
       6h 38m ago
    你都用 JSON 了,还想什么范不范式的
    foxhunt
        11
    foxhunt  
       6h 35m ago
    你最好想想为什么违背范式,能带来哪些好处
    明天要考
    beautyplus
        12
    beautyplus  
       6h 34m ago
    json 就是原子值,如果你存的 json 都是同字段的,那确实违反了,应该拆成原子
    cowcomic
        13
    cowcomic  
       6h 33m ago   2
    是的,现在很多系统数据库的设计都是反范式的
    三范式并不是一定要遵守,只是遵守但是能够帮你避免一些问题,但是可能会降低查询效率之类的
    可以根据自己的需求来打破范式,但每打破一个范式,就要增加对应的处理方案,避免引入新的问题,比如数据结构教研,数据同步更新等等
    huangsijun17
        14
    huangsijun17  
       6h 32m ago
    @aes114514gcm #2 但是,MySQL 存 JSON 的场景也不少了。是个 SQL ,甚至 NoSQL ,只要能存长字符串的,都会有人存 JSON 。
    zhuangzhuang1988
        15
    zhuangzhuang1988  
       6h 28m ago
    pg 还有 array
    airqj
        16
    airqj  
       6h 24m ago
    居然有人说数据库范式没啥用
    PS: 1981 的图灵奖就是颁发给研究数据库的,而数据库范式是其中很重要的一部分
    TataJiang
        17
    TataJiang  
       6h 23m ago
    三范式并不是不能违反的
    catning
        18
    catning  
       6h 19m ago
    范式没有万能的,具体还要根据你自己业务和上下游去决定。
    但是你不能不学,不能不了解这些范式是为了解决什么问题产生的。试想一下,一张表里只有 id 和 data 俩字段,做业务时候一把 data select 出来,然后在程序中用代码逻辑组织数据结构或者进行过滤,光想想就灾难。
    soleils
        19
    soleils  
       6h 5m ago   1
    @airqj 但那是 1981 啊, 祖宗之法不可违?
    shiny
        20
    shiny  
    PRO
       6h 2m ago
    先懂得规则,然后才能知道何时打破规则,代价是什么,收益是什么
    xxyzf
        21
    xxyzf  
       5h 53m ago
    是不是应该有个约束条件:在多大程度上是原子的,这就取决于业务需求了。
    shyrock2026
        22
    shyrock2026  
       5h 52m ago
    范式是思维模型,依据模型你就能知道你的设计如何取舍:应用便利、性能、扩展性等等。
    没人说按照范式执行一定更好,都是权衡和取舍。
    chendy
        23
    chendy  
       5h 38m ago
    三范式属于用了不会错,但是不一定好
    反范式一定是是有什么好处,但是可能会犯错,特别是为了偷懒反范式
    只能说具体情况具体分析
    dandel1on
        24
    dandel1on  
       5h 31m ago
    纸上谈兵不代表兵法书籍是无用的
    killva4624
        25
    killva4624  
       5h 29m ago
    那么,古尔丹,代价是什么呢
    piecezzz
        26
    piecezzz  
       5h 27m ago
    实践和理论不冲突啊
    adoal
        27
    adoal  
       5h 24m ago
    @huangsijun17 当长字符串存跟用原生 JSON 支持是两码事。后者可以直接对 JSON 内容做检索和解析。
    fredweili
        28
    fredweili  
       4h 54m ago
    你在说啥,考试该怎么复习准备?
    dacapoday
        29
    dacapoday  
       4h 43m ago
    现代数据库 json 列提供了按 json path 更新值,甚至按 json path 索引,把 json 列当 join 表,其中的每个 json path 当作真正的列值就行了。
    如果用字符串类型的列,强行存 json 序列化值,而不提供局部更新能力,才是违反范式。
    526326991
        30
    526326991  
       4h 42m ago
    原则 > 范式 = 风格
    leoJiu
        31
    leoJiu  
       4h 39m ago
    钱都交了,明天去裸考了,我是一道题都没刷
    dushixiang
        32
    dushixiang  
    OP
       4h 27m ago
    @dacapoday 有道理,但是 json 作为字段通常都是全部覆盖更新这个字段的吧(数据库层面),需要存储 json 字段的通常是一些配置项
    airqj
        33
    airqj  
       4h 26m ago   1
    @soleils 兄弟你是真 NB 。
    我只是反驳人家说的数据库范式无用论,没有说数据库一定得遵循规范来设计吧?
    dacapoday
        34
    dacapoday  
       4h 5m ago
    @dushixiang 这是一种场景,而且该场景下,该列不参与索引和进入过滤条件,也就是非关系的 blob 附件,那自然也不受范式约束了。
    635925926
        35
    635925926  
       4h 3m ago
    @Bigstupidcat 补贴了解下
    hongye
        36
    hongye  
       4h 1m ago
    @Rickkkkkkk

    这种看法片面了,也低估了范式与 REST 规范在复杂商业系统里的底层价值。
    数据库三范式从来不是死板教条,而是帮开发者规避数据冗余、更新异常、删除错乱的基础设计准则,真正长期做商业系统的人都清楚,前期不守范式,后期多表联查、数据同步、业务迭代、对账统计都会频繁出隐性 BUG ,维护成本会成倍飙升。
    RESTful 也同理,规范统一的接口设,能降低跨团队协作、前后端对接、服务拆分重构的沟通损耗。
    规范本身不是束缚,而是工业级开发的通用共识,只会觉得规范无用,大概率只做过小体量单体项目,没经历过业务膨胀、数据迭代、多人协作、系统拆分的真实场景,自然体会不到底层规范规避风险、降本增效的实际作用。
    luoshuimumu
        37
    luoshuimumu  
       3h 59m ago
    后天考,明儿还能突击一天
    Rickkkkkkk
        38
    Rickkkkkkk  
       3h 57m ago
    @hongye 但实际上,真正设计的时候并不会拿着这些东西来用。

    恰恰是大规模的系统才不会去遵守这些协议,小的项目反而好实现

    (你可以随便去看阿里腾讯这种大厂的任何一个组,设计的时候这些规范都不会出现的
    FlashEcho
        39
    FlashEcho  
       3h 50m ago
    因为业务需求或者性能考虑不遵守某些范式很正常,可以看下 DDIA 相关章节: https://ddia.vonng.com/ch3/#sec_datamodels_normalization
    BeiChuanAlex
        40
    BeiChuanAlex  
       3h 43m ago
    你说他没用,还是有用,你说他有用,它却没啥用,实际就是鸡肋
    shellj
        41
    shellj  
       3h 36m ago
    突然想起来我也报名了,一点没学
    hongye
        42
    hongye  
       3h 27m ago
    @Rickkkkkkk #38 恰巧我在交易中心工作过一段时间,应该是比较核心的系统了。方案评审的审核还是很关注库表设计的,DBA 会耳提面命的。
    wysnxzm
        43
    wysnxzm  
       3h 19m ago
    RESTFul JWT 中台 DDD 数据库三范式 有勇士凑齐了吗
    Rickkkkkkk
        44
    Rickkkkkkk  
       3h 16m ago
    @hongye 当然会注重 db 字段的设计,接口的设计也会考虑。

    我的意思是,但这里并不会去通过范式、restful 这种规范来考虑。你会有印象在讨论设计合理性上,有人提过 db 范式吗?说实话我工作这么多年,几个大厂也呆过,从来没听过。
    ntedshen
        45
    ntedshen  
       2h 5m ago
    说到底远古时期算力和 io 都严重不足,只有遵守范式你这个系统才不会三天两头卡出屎,没有其他路可以走。。。
    现在这年头处理器核心数跟个不要钱一样,存储的 io 和容量起码都翻了几万倍。。。
    时代变了,现在遵守这东西和进机房要穿鞋套有啥两样。。。
    真要考究到这些,那你也不会问这个了
    Plutooo
        46
    Plutooo  
       1h 54m ago
    不是过时了,是还有个相应的概念叫“反范式”,但更多实践上来说大概率是二者都沾一点,从“没有银弹”的角度来说,软件工程还是符合国人的“折中”的习性的
    About     Help     Advertise     Blog     API     FAQ     Solana     2841 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 106ms UTC 13:06 PVG 21:06 LAX 06:06 JFK 09:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86