V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kikione
V2EX  ›  程序员

平时开发中,业务膨胀导致表结构臃肿,一般怎么解决,有什么方法论?

  •  
  •   kikione · 14 天前 · 2433 次点击

    比如说我们业务有自己券体系。

    券分为 A B 两种,在同一张表。

    后来 A 又有自己的类型

    B 又有自己的类型

    如此循环,字段加的越来越多,也越来越耦合。

    请问,建表时,一般要考虑哪些因素,业务越来越耦合时,如何加字段,如何拆表?

    26 条回复    2021-11-25 15:31:34 +08:00
    lscho
        1
    lscho  
       14 天前
    没办法,字段多了就分表
    infun
        2
    infun  
       14 天前
    一百九十多个字段的表都没拆,还在加。。。
    SimonOne
        3
    SimonOne  
       14 天前   ❤️ 1
    B 加字段
    XX 国企信息管理部评估:表里不就有这个字段了吗?
    答:那时 A 的业务字段,我不能乱用,码值都不一样,只是看着像是一个字段
    XX 国企信息管理部评估:不管,有字段就不能再加,驳回,就用这个字段

    WRNM
    ericgui
        4
    ericgui  
       14 天前
    业务乱,这又不是技术问题,这个你作为程序员怎么可能解决得了?

    不要幻想代码可以解决一切问题,代码只是现实生活的一个在互联网上的一个映射 /投影,而且你在写代码的时候又要做很多抽象,抽得四不像的情况多的去了

    跑吧
    Samuelcc
        5
    Samuelcc  
       14 天前
    我在小规模服务中用过 Mongodb 存储多态对象,能够比较优雅地解决这种问题。但是没在大规模服务中尝试过。
    dajj
        6
    dajj  
       14 天前
    换项目组或者换公司就好了
    eason1874
        7
    eason1874  
       14 天前
    一步到位是消费主义的谎言.jpg

    后期发展谁说得准呢,不需要过度设计,有一定设计预留就够了

    后期差异太大再分开,重新设计 AB 两张表,迁移或者根据券码、时间决定读新表还是旧表
    clf
        8
    clf  
       14 天前   ❤️ 3
    (快进到 text 存 json 字符串)
    Ariver
        9
    Ariver  
       14 天前 via iPhone
    银行有很多一个表字段六七百。
    ospider
        10
    ospider  
       14 天前
    @clf mysql 5.7 前这也是传统艺能了
    ZhaoWang
        11
    ZhaoWang  
       14 天前 via iPhone
    垂直拆分成两张,业务自定义垂直表,随便他们折腾
    xuanbg
        12
    xuanbg  
       14 天前
    @eason1874 设计要有前瞻性,做到能升级、易升级就行了。但不需要预留现在没用的东西,特别是那种从 c0-c99 的预留未定义字段,简直就是辣鸡中的战斗机。
    yunshansimon
        13
    yunshansimon  
       14 天前
    任何读写都通过一个 dataview 来进行,这个 dataview 用来组织表格,如果有加不了的项,就拆到另一个表中去,用 dataview 来组织这些表,最终呈现一个“统一”的表格给应用,当然,注意要加上一个版本号,以便数据使用方来识别。所有写入都要通过一个写入过程,在过程中来判断要写入那些表中的那些字段,以便分开加锁,这样还能提高性能。
    pengtdyd
        14
    pengtdyd  
       14 天前
    把该死的架构师拉出去祭天就可以了
    Saxton
        15
    Saxton  
       14 天前
    考虑自定义字段? 用行来存字段呗,不一定要把字段具体化
    sadfQED2
        16
    sadfQED2  
       14 天前 via Android
    @clf 基操,勿 6
    zeni123
        17
    zeni123  
       13 天前 via iPhone
    BigTable 架构啊
    liuxu
        18
    liuxu  
       13 天前
    解决掉建表的人
    3dwelcome
        19
    3dwelcome  
       13 天前
    说起来可能楼主不信,但我个人推荐的方式就是对数据套娃。

    也就是对数据库建立一个抽象层的读写 API ,给后端数据库读取的数据,都是加工处理过后的。

    对外看起来是两个表,读写也是两个表。实际存到磁盘上,可能就一个总表了,通过一些代码做逻辑字段的切分。
    akira
        20
    akira  
       13 天前
    忍受不了的时候 就拆表呀。。
    zachlhb
        21
    zachlhb  
       13 天前 via iPhone
    分表,先建一个券主表存放通用字段,然后每种券独立到自己的表中,然后根据主表的券类型去各类型表中查扩展数据
    netnr
        22
    netnr  
       13 天前 via Android
    就举例需求来讲,首先分 1 和 2 ,然后 1 又拆分 11 12 13 ,2 就拆分 21 22 23 ,如果还需要分,那就转成字符串,1-1-1 2-1-1 这种
    也算是一种可扩展的变通,当然涉及到的逻辑也要改,历史数据的维护(很多时候不愿意维护历史数据来支持新的功能,而是通过加字段,反而越来越复杂)
    yogogo
        23
    yogogo  
       13 天前
    我现在是这样做的,券有一个主表,里面是券的基本信息,id ,编号,名称,类型,假设券类型分 A 和 B ,再建两张类型表 A 和 B ,这样就分开 A 和 B 的类型字段就各自维护,主表也能保持简单,后续有新类型就新增类型表就行了
    php01
        24
    php01  
       13 天前
    不要对重构抱有敌意,拥抱重构,才能前进
    goldpumpkin
        25
    goldpumpkin  
       13 天前
    @SimonOne 直接换个英文单词 换一个解释, 绕晕它
    bsg1992
        26
    bsg1992  
       13 天前
    继续加字段
    如果字段是在太多就只能分表
    分表也回带来业务上开发的复杂度
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2709 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:14 · PVG 20:14 · LAX 04:14 · JFK 07:14
    ♥ Do have faith in what you're doing.