V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fanpei0121
V2EX  ›  问与答

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

  •  1
     
  •   fanpei0121 · 2020-01-07 10:17:55 +08:00 · 5708 次点击
    这是一个创建于 1780 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    ## 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  
       2020-01-07 20:08:44 +08:00 via Android
    不要瞎搞,这哪有完美方案,到时候一堆问题,公司网装一个公共的 mysql 才是办法
    zhuzhibin
        36
    zhuzhibin  
       2020-01-08 02:07:42 +08:00 via iPhone
    都说 migration,那我请教下随着项目变大业务变更大,导致迁移文件越来越多,要怎么维护比较好?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.