V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
fanpei0121
V2EX  ›  问与答

多人开发,数据库结构怎么同步?

  •  1
     
  •   fanpei0121 · Jan 7, 2020 · 6650 views
    This topic created in 2314 days ago, the information mentioned may be changed or developed.

    请问大佬流行的解决方案有哪些啊?

    36 replies    2020-01-08 02:07:42 +08:00
    qmzhixu
        1
    qmzhixu  
       Jan 7, 2020
    navicat 的结构同步工具
    SjwNo1
        2
    SjwNo1  
       Jan 7, 2020
    写个 sql 文件?
    fanpei0121
        3
    fanpei0121  
    OP
       Jan 7, 2020
    比如 A 开发的时候改变了表结构,同事 B 也改变了另一张表的结构。最终数据库怎么把 2 张表的结构统一,有没有解决方法
    hsk9044
        4
    hsk9044  
       Jan 7, 2020
    既然是多人开发, 如果是开发相同功能, 数据库不应该是连同一个吗? 如果是功能不同, 那参考 1#的工具
    fanpei0121
        5
    fanpei0121  
    OP
       Jan 7, 2020
    @hsk9044 但是本地开发,开发人员都是安装的本地数据库,你的意思是都用一个数据库?
    murmur
        6
    murmur  
       Jan 7, 2020
    我们是数据库由专人负责修改
    VictorJing94
        7
    VictorJing94  
       Jan 7, 2020
    所以你们数据库也是独立设计嘛[狗头],不都是大佬先开会,统一架构,还有 ER 图,然后确定数据库后再分模块分功能去开发嘛....
    fanpei0121
        8
    fanpei0121  
    OP
       Jan 7, 2020
    @VictorJing94 额。。。。小公司都是开发人员自己建表。。<(..)>
    sxw11
        9
    sxw11  
       Jan 7, 2020   ❤️ 1
    不应该是共用一个开发或者测试数据库吗,人多了本地库很麻烦,非要那样就每个人提交代码的时候把数据库变动的 sql 脚本也提交了
    SuperMari0
        10
    SuperMari0  
       Jan 7, 2020
    统一连一个开发用的库就好了
    optional
        11
    optional  
       Jan 7, 2020   ❤️ 1
    migration,
    helionzzz
        12
    helionzzz  
       Jan 7, 2020
    就算初始数据有出入,所有人数据表结构不应该是一样的么。如果期间发现有要改变的,不应该通知所有人一起改么。。你们开发中间团队完全不交流的?
    luckyrayyy
        13
    luckyrayyy  
       Jan 7, 2020
    肯定使用公共开发库啊,每人一个本地库也太麻烦了。
    fanpei0121
        14
    fanpei0121  
    OP
       Jan 7, 2020
    @luckyrayyy 是的,决定都连测试服数据库了
    evlos
        15
    evlos  
       Jan 7, 2020 via Android
    Migration
    di94sh
        16
    di94sh  
       Jan 7, 2020 via iPhone
    如果是 django orm 或者 sqlalchemy 这种 migrate 做的比较完善,migrate 文件 有单独的文件夹存放. merge 了代码运行迁移脚步就好了。如果用的数据库工具没有 migrate 功能,可以用 sqlalchemy 的迁移工具 alembic 需要自己手写迁移脚步,其实就是 DDL
    opengps
        17
    opengps  
       Jan 7, 2020
    共享连接同一个数据库
    Orenoid
        18
    Orenoid  
       Jan 7, 2020
    把数据库结构纳入版本管理
    oatw
        19
    oatw  
       Jan 7, 2020 via iPhone   ❤️ 2
    看到这个问题,再次庆幸自己选择 Rails 作为后端开发的主要工具。
    wangkun025
        20
    wangkun025  
       Jan 7, 2020
    rails 用 migration。
    但偶尔也会出问题。
    adrianXu
        21
    adrianXu  
       Jan 7, 2020
    java 有 flyway liquibase 这种工具
    soli
        22
    soli  
       Jan 7, 2020
    建表 SQL 写在 sql 文件中。
    所有 sql 文件作为源码文件提交版本库。
    剩下的就和代码一样的流程了。
    BALDOOR
        23
    BALDOOR  
       Jan 7, 2020 via Android
    我们用文件把新增 /修改的 sql 记录下来
    运行时出错时,通过分析 sql 报错信息
    再去查找文件去修正数据库
    目前运行情况良好,感觉还挺 nice 的
    fx
        24
    fx  
       Jan 7, 2020
    Migration
    af463419014
        26
    af463419014  
       Jan 7, 2020
    建议规范一下开发流程
    开发前先写设计文档,包括技术方案和表结构设计等,然后大家评审,评审完成后再进行代码开发
    一般白天写文档,晚上花 1-2 小时完成评审,也就多出一天的研发周期,能为将来避免很多不必要的麻烦
    lygmqkl
        27
    lygmqkl  
       Jan 7, 2020
    migrate
    phpcxy
        28
    phpcxy  
       Jan 7, 2020
    写数据库迁移文件
    lazypu
        29
    lazypu  
       Jan 7, 2020
    肯定得连接同一个数据库, 其它的无论什么方案都不如同一个数据库来得方便, 而且只是开发阶段
    minigo
        30
    minigo  
       Jan 7, 2020
    用 orm 的没这个问题,用纯 sql 的链同一个库吧。不然开发完你会后悔的
    VictorJing94
        31
    VictorJing94  
       Jan 7, 2020
    @fanpei0121 楼下老哥都说问题了...你们流程不对
    另外我怎么没收到提示...站长帮忙看看 @livd
    agagega
        32
    agagega  
       Jan 7, 2020 via iPhone
    原来这年头还有后端框架不用 Migration 的吗😂
    nanwangnongfu
        33
    nanwangnongfu  
       Jan 7, 2020
    总结一下
    1,链接同一个测试库
    2,使用 migratiion,更新代码,执行 migration 命令
    3,更改写入 sql 文件,更新代码,手动执行
    dcalsky
        34
    dcalsky  
       Jan 7, 2020
    这个问题之前研究过。

    ## Migration
    Code first 的解决方案(有编程语言依赖):依赖你 ORM 提供的 migration 工具,如楼上提到的 Django,sqlalchemy 等。

    Basebase first 解决方案(无编程语言依赖):sqitch 或者 flyway,都是工具,别管用什么语言开发的。

    ## 多人协作

    肯定要用 git 管理这些 migrations,然后建议开一个数据库的线上 beta 版本,等稳定了再 migrate 到 prod 版本上。

    流程一般是:开发者 A 改动了 schema,生成 migrations 并 push 到仓库 -> 开发者 B pull 这些 migrations,然后 migrate 到本地的数据库。至于你们什么时候想 push 到 beta,以及 CI/CD 的其他事情,别的贴再讨论吧。
    Leigg
        35
    Leigg  
       Jan 7, 2020 via Android
    不要瞎搞,这哪有完美方案,到时候一堆问题,公司网装一个公共的 mysql 才是办法
    zhuzhibin
        36
    zhuzhibin  
       Jan 8, 2020 via iPhone
    都说 migration,那我请教下随着项目变大业务变更大,导致迁移文件越来越多,要怎么维护比较好?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2965 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 14:56 · PVG 22:56 · LAX 07:56 · JFK 10:56
    ♥ Do have faith in what you're doing.