我遇到这种情况,需要多个登台环境(无限制,无限制分支)。 基本思路是与 GIT 的相似之处。
假设我有一个master
数据库(例如生产服务器),我想创建一个数据库的副本,到一个新的数据库,在那里我将有一个用于我的开发的暂存环境&测试
在这个暂存环境中,我应该能够测试新代码,错误修复以及开发人员想要做的所有事情,包括数据库结构和数据更改。
我想通过转储数据库结构以及它们之间的diff
来计算如何为数据结构(模式)执行此操作。它有效,我可以找到稍后在master
分支上应用的delta。但是数据呢?
假设我有这个数据库:
主
Table1
ID name timestamp
1 row1 2015-08-25 00:00:00
2 row2 2015-08-26 00:00:00
3 row3 2015-08-27 00:00:00
4 row4 2015-08-28 00:00:00
Table1_Table2
table1_id table2_id
1 1
1 2
2 2
3 3
4 4
Table2
ID name timestamp
1 row1 2015-08-25 12:00:00
2 row2 2015-08-27 12:00:00
3 row3 2015-08-26 12:00:00
4 row4 2015-08-28 12:00:00
将数据库克隆到新环境后,假设我做了一些更改,克隆看起来像这样:
克隆1
Table1
ID name timestamp
3 row3 2015-08-27 00:00:00
4 row4 2015-08-28 00:00:00
5 row5 2015-08-28 01:00:00
Table1_Table2
table1_id table2_id
3 3
4 2
5 1
Table2
ID name timestamp
1 row1 2015-08-25 12:00:00
2 row2 2015-08-27 12:00:00
3 row3 2015-08-26 12:00:00
数据库之间的差异
Table1
ID name timestamp
-1 row1 2015-08-25 00:00:00
-2 row2 2015-08-26 00:00:00
+5 row5 2015-08-28 01:00:00
Table1_Table2
table1_id table2_id
-1 1
-1 2
-2 2
-4 4 (This and the one below it, it's actually an update)
+4 2
+5 1
Table2
ID name timestamp
-4 row4 2015-08-28 12:00:00
这很好,但是在GIT中,master
分支可以保持前进,并且可能会出现新数据,并且可能会有更改。
所以这是master
复制之后的一段时间我希望合并clone1
和master
主
Table1
ID name timestamp
1 row1 2015-08-25 00:00:00
2 row2 2015-08-26 00:00:00
3 row3 2015-08-27 00:00:00
4 row4 2015-08-28 00:00:00
5 row5new 2015-08-28 00:00:00
Table1_Table2
table1_id table2_id
1 1
1 2
2 2
3 3
4 4
5 2
Table2
ID name timestamp
1 row1 2015-08-25 12:00:00
2 row2 2015-08-27 12:00:00
3 row3 2015-08-26 12:00:00
4 row4 2015-08-28 12:00:00
复制之前的master
与之后的之间的差异:
Table1
ID name timestamp
+5 row5new 2015-08-28 00:00:00
Table1_Table2
table1_id table2_id
+5 2
现在这很简单,我几乎没有做任何改变,但是你可以看到我已经发生了冲突。 Table1
和clone1
上存在master
第5行,但在复制发生时不存在。这意味着用户应该决定他想要保留哪一个。
与GIT不同,他可能都想要它们。所以我应该改变指数?这可能是一个坏主意。因为我们说有另一个表,其中提到了复制后的主行索引,所以我应该搜索它,并更新到新索引?这可能有效,但只有我们之间有关系/我们知道业务逻辑,这两种情况都可能根本不存在。
另一个问题是我们可能想要在clone2
之后创建另一个克隆clone1
,并且在结构和数据方面可能有不同的起点。
如果我想在clone2
和master
之间进行合并,然后在clone1
和master
之间进行合并,这可能会在很难预测的各种情况下解决
如何实现这一目标?我可能错过了几个问题,但以上是我面临的主要问题。
感谢。