• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX  ›  程序员

设计数据库表结构必须遵从 3 范式吗? 我感觉字段冗余更好用呀?冗余的字段也不超过 10 个

  •  
  •   kikione · Mar 12, 2022 · 4824 views
    This topic created in 1542 days ago, the information mentioned may be changed or developed.
    26 replies    2022-03-13 14:54:30 +08:00
    RainCats
        1
    RainCats  
       Mar 12, 2022
    范式就是拿来打破的,冗余看情况
    aristotll
        2
    aristotll  
       Mar 12, 2022
    一般第二范式就好了。冗余看业务场景
    pendulum
        3
    pendulum  
       Mar 12, 2022
    个人项目喜欢 BCNF ,其他的随意
    iseki
        4
    iseki  
       Mar 12, 2022
    你想好万一出现修改该怎么办就好
    chenxytw
        5
    chenxytw  
       Mar 12, 2022
    看实际情况。最最常见的不遵守范式的理由就是更在意性能吞吐。
    iseki
        6
    iseki  
       Mar 12, 2022
    能不打破就别打破,但有时候也没办法
    NCry
        7
    NCry  
       Mar 12, 2022   ❤️ 1
    我的看法是只要你明确知道自己为什么需要冗余字段,并且考虑到了可能带来的问题,那么就可以不遵循。
    dobelee
        8
    dobelee  
       Mar 12, 2022 via iPhone
    是范式,不是规范,更不是规定。实际情况大把冗余和快照以避免连表。
    ktqFDx9m2Bvfq3y4
        9
    ktqFDx9m2Bvfq3y4  
       Mar 12, 2022 via iPhone
    想想微服务,数据更冗余了
    falsemask
        10
    falsemask  
       Mar 12, 2022
    可千万别,接手的一个项目完全按照第三范式规则来的,A-B-C-D-E-F ,从左到右都是一对多的映射,都是用一个 id 对应,到了 F 表,完全看不出来对应的 A 表的字段是啥了,每次查个数据,血压都高了
    elboble
        11
    elboble  
       Mar 12, 2022
    来 v2 时间不长,知道的月经讨论有两个,
    sql 要不要物理外键,
    http 除了 get,post 其他行为能不能用,

    是否遵守范式可以算第三个吧。
    ktqFDx9m2Bvfq3y4
        12
    ktqFDx9m2Bvfq3y4  
       Mar 12, 2022
    @elboble 还有 win/mac android/iOS ,感觉这个都属于周经了。
    LLaMA2
        13
    LLaMA2  
       Mar 12, 2022   ❤️ 1
    请先设计好数据结构,有了好的数据结构,ORM 会自动生成你想要的数据库,当然,性能问题可能不好,
    但是有数据结构,代码写的飞起,根本不在乎数据库里叫什么,怎么存的。
    要是用 typescript 的 typeorm 。连 hibernat 里恶心的 nested object mapper 问题都没了。那开发速度更进一部,这样,你就有时间做自己想做的事情了
    kingjpa
        14
    kingjpa  
       Mar 12, 2022
    对于大厂为了性能,肯定能遵守最好了啊
    对于我们外包仔,null text like 满天飞,
    交付了事,规矩多就是给自己找不自在
    glovebx
        15
    glovebx  
       Mar 12, 2022
    适当冗余,用空间换效率很划算
    westoy
        16
    westoy  
       Mar 12, 2022
    抛开业务类型和规模谈这个没意义啊
    melkor
        17
    melkor  
       Mar 12, 2022 via iPhone
    @falsemask 写个类把这逻辑都封装起来呀
    xuanbg
        18
    xuanbg  
       Mar 12, 2022
    可以冗余的当然就要冗余,不然什么都联表查询效率就太低了。
    huyi23
        19
    huyi23  
       Mar 13, 2022
    能冗余尽量冗余,一切为了不连表
    huyi23
        20
    huyi23  
       Mar 13, 2022
    @huyi23 有一个前提,当前值基本不存在更新操作
    huyi23
        21
    huyi23  
       Mar 13, 2022
    @huyi23 如果读取远远大于写入或者更新,这个前提也不需要遵守
    IvanLi127
        22
    IvanLi127  
       Mar 13, 2022 via Android
    如果性能允许,尽量遵守咯。关联表查询不就是关系型数据库干的活么。要是很多字段都冗余,可以换文档型数据库了
    falsemask
        23
    falsemask  
       Mar 13, 2022
    @melkor 我直接从数据库查个值为啥还要用代码跑
    melkor
        24
    melkor  
       Mar 13, 2022 via iPhone
    @falsemask 有数据库操作权限是危险的行为,所以压根不该直接进数据库查数据。如果为了查业务数据,应该有一层 ORM 把逻辑封装了,直接按对象查询;如果为了离线运营,应该把数据上报离线存储后重新组织成宽表。
    ychost
        25
    ychost  
       Mar 13, 2022
    尽量不要 join 表,一旦多了维护起来真炒蛋
    9dP06m83vIV00l72
        26
    9dP06m83vIV00l72  
       Mar 13, 2022
    范式太严谨,真的很讨厌,各种连接找数据;命名不规范直接降低效率;
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3684 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 169ms · UTC 10:35 · PVG 18:35 · LAX 03:35 · JFK 06:35
    ♥ Do have faith in what you're doing.