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

数据库经常新增字段,怎么处理?

  •  
  •   mortonnex · Jul 21, 2017 · 8694 views
    This topic created in 3401 days ago, the information mentioned may be changed or developed.
    springmvc+mybatis

    表的字段被修改,就有很多之前写的文件需要修改?

    你们的经验是什么?
    33 replies  •  2017-07-22 15:59:33 +08:00
    Dx2619
    Dx2619
    Jul 21, 2017 via iPhone
    1
    一定要新增字段吗?新增个表做关联不好嘛?没经验瞎问
    mortonnex
    mortonnex
    OP
    Jul 21, 2017
    2
    @Dx2619 瞎答?
    anyele
    anyele
    Jul 21, 2017 via Android
    3
    同问
    gamexg
    gamexg
    Jul 21, 2017
    4
    可以预先建立备用字段,不过没这样干过。
    Dx2619
    Dx2619
    Jul 21, 2017 via iPhone
    5
    @mortonnex 别误会,我是说我瞎问。
    nandaye
    nandaye
    Jul 21, 2017 via Android
    6
    经常新增应该是模型设计师对业务理解不到位,并且没有合理的预留字段。换个专业的模型或者你的处理逻辑灵活些。
    lzhr
    lzhr
    Jul 21, 2017
    7
    json
    ericls
    ericls
    Jul 21, 2017 via iPhone
    8
    那个表来一个 json column
    fox0001
    fox0001
    Jul 21, 2017 via Android
    9
    你需要 MongoDB
    popbones
    popbones
    Jul 21, 2017 via iPhone
    10
    如果经常新增字段是设计问题考虑更灵活的设计,如果是业务逻辑决定的,考虑 NoSQL
    xuyankang
    xuyankang
    Jul 21, 2017
    11
    mybatis 自动生成 crud,每次改数据库,重新生成一次。
    nutting
    nutting
    Jul 21, 2017 via Android
    12
    说明不需要关系,用 nosql
    mortonnex
    mortonnex
    OP
    Jul 21, 2017
    13
    @xuyankang 那之前手写的 sql 怎么处理?
    nfroot
    nfroot
    Jul 21, 2017 via Android
    14
    这也是我最近考虑的问题 如果是表单类型的页面 想着是不是所有字段都是动态显示的 加的时候设置好 标记好 目标页面直接动态生成
    fortunezhang
    fortunezhang
    Jul 21, 2017
    15
    1.如果有 migration 的话,没有太大问题。 比如 rails laraval 都做的很棒;
    fortunezhang
    fortunezhang
    Jul 21, 2017
    16
    1.如果有 migration 的话(不太了解 java 这一块),没有太大问题。 比如 rails laraval 都做的很棒;
    2.如果没有的话,可以使用一个文件,比如 all_table.sql ,来代替,每次拉下来的时候,看看这个文件有没有变化,变化了,git show 一下执行就好了
    3.设计的时候,如果感觉会新建字段(怎么感觉,这个没法详细解释,比如新闻表,之存了,title,description,content,这时候就能感觉到了),增加一个 data 字段,这个字段存储的内容有特定要求,只负责显示,不参与检索。
    Ouyangan
    Ouyangan
    Jul 21, 2017
    17
    jpa..
    choury
    choury
    Jul 21, 2017 via Android
    18
    修改数据库,实现在线快速加字段功能,哈哈,我们厂是这么做的
    O14
    O14
    Jul 21, 2017 via Android
    19
    用 HBase
    changhe626
    changhe626
    Jul 21, 2017
    20
    谁一定要改数据库表设计,.........
    Miy4mori
    Miy4mori
    Jul 21, 2017 via iPhone
    21
    你可以了解一下 flyway 或者 liquibase
    workwonder
    workwonder
    Jul 21, 2017 via Android
    22
    预留字段真的有意义? 最恶心当初预留的字段瞎起个名字,后来变得“有意义”。
    zhx1991
    zhx1991
    Jul 21, 2017
    23
    新增的字段只有插入的地方要改吧...

    而且只有新的业务要这个字段, 老的逻辑完全不用动啊.
    reus
    reus
    Jul 21, 2017
    24
    手工改掉 SQL 语句,不搞那么多弯弯绕绕
    ebony0319
    ebony0319
    Jul 21, 2017 via Android
    25
    你需要一本书《 sql 反模式》
    rrfeng
    rrfeng
    Jul 21, 2017 via Android
    26
    用 mongo
    leemw
    leemw
    Jul 21, 2017
    27
    mysql 和 mongodb 混用
    wangdu2012
    wangdu2012
    Jul 22, 2017 via iPhone
    28
    修改原表?一看就有点…没经验。
    Livid
    Livid
    MOD
    PRO
    Jul 22, 2017 via Android
    29
    尽量不要 alter table,数据量大的时候锁几个小时都有可能,业务会受很大影响。

    新功能可以用新的表,或者放到一个 key value 数据库里。
    vindurriel
    vindurriel
    Jul 22, 2017
    30
    一个馊主意

    create table object (
    id bigint auto_increment
    )

    create table attr{
    id auto_increment
    object_id bigint
    name varchar(255)
    value varchar(1024)
    key object_attr(object_id,name)
    }

    好处是不需要加字段了,直接 insert attr 即可。
    坏处是不能定义字段取值类型(统一 varchar )

    查询:
    select a.name,a.value from attr a join object o on a.object_id=o.id where o.id=<NUM>
    hahatest
    hahatest
    Jul 22, 2017
    31
    一个成熟方案就是用 migration

    把 migration 的文件存档(i.e.不要加到 .gitignore 里)
    这样要咋加咋加,而且方便 onboarding
    BooksE
    BooksE
    Jul 22, 2017
    32
    这样的话。。。试试 key-value?
    iwillhappy1314
    iwillhappy1314
    Jul 22, 2017
    33
    可以参考一下 WordPress 的 metadata 设计。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2495 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 10:58 · PVG 18:58 · LAX 02:58 · JFK 05:58
    ♥ Do have faith in what you're doing.