在版本之间保持代码、数据库结构和数据库数据同步

Posted

技术标签:

【中文标题】在版本之间保持代码、数据库结构和数据库数据同步【英文标题】:Keep code, database structure and database data in sync between revisions 【发布时间】:2019-01-09 21:57:44 【问题描述】:

这个问题困扰了我一段时间,对 Google 来说似乎是一个棘手的问题。

我正在寻找最好的(或至少是体面的)方法来保持我的代码、我的数据库结构和数据库数据彼此同步。我目前正在使用 Laravel 5,它为我提供了迁移和种子。第一个非常适合数据库结构更改。后者似乎还可以,但不考虑时间。

所以我有几个月前设置的这个 laravel 安装。它有 20 张桌子和一些种子文件。 现在我重命名了现有表结构中的一列。

当我从头开始我的 Laravel 站点时,我显然首先运行迁移,否则根本不会有表。之后,我运行我的种子并在更改列的插入查询中失败。

问题出现了:播种机不应该依赖于迁移吗?还是应该在更改数据库结构时更改所有种子?必须有更好的方法,我错过了什么吗?这应该怎么做?

【问题讨论】:

在更改表/迁移中的列名时必须完成一些手动工作,我在这里没有看到问题。对您的迁移和所有相关的其他部分进行更改(不仅是播种机,还有您的模型/工厂......需要反映更改),确保一切正常,将其推送到您的 VCS 并完成。 典型的“相关”问题比我自己的搜索结果好很多。 ***.com/questions/21580088/… anwser 我的问题是:不要使用种子,而是用于测试数据。 【参考方案1】:

种子的问题是它们需要更新以反映当前模式,而不是与它们产生时相关的任何历史模式。

这就是为什么通常最好将种子保持在最低限度。如果拥有一个干净的种子数据库是不可避免的,您可以将其提供给需要从事该项目的任何人。种子数据库的风险在于它可能包含迁移中没有的修改,例如当您删除迁移或应用您从未提交给代码的迁移时。

理想情况下,您的项目应该通过运行迁移和从种子构建从头开始工作,您应该间歇性地测试这个过程以确保您没有破坏任何东西。

【讨论】:

谢谢。这不是我对种子的想法。从现在开始,我将使用迁移进行播种。 有时将“种子”数据放入迁移中是可行的,但请注意将迁移文件保持在低级别,并且永远不要依赖任何现有的特定模型。随着您的发展,您的应用模型将被创建和销毁,因此任何依赖于现有模型的迁移都会出现问题。

以上是关于在版本之间保持代码、数据库结构和数据库数据同步的主要内容,如果未能解决你的问题,请参考以下文章

在多个 iOS 和 Android 设备之间保持数据库同步的最简单方法是啥?

mysql之间数据库结构对比

Elasticsearch和数据库保持同步的方式及原理

如何在android上保持服务器和客户端之间的数据同步?

Navicat 数据传输和数据同步的区别

SqlServer2000 数据同步问题