假设我们有一个基于Qt / qml的桌面应用程序,它使用mysql作为本地db。
注意:我们将每2周发布一次新版本。
问题出在这里, 本地数据库中可能会发生变化,例如添加新列,删除某些字段,添加新表,删除。因此,由于此更改始终会导致我们更新整个数据库。我们可以说删除整个数据库并使用新架构进行更新。因此,每次我们丢失旧记录时,都是因为我们不仅仅更新架构级别的更改。
直接直接答案: 我们可以将两个模式与其(old_release.sql-new_release.sql)的更改进行比较,基于更改结果,我们可以创建一个alter查询而不是整个表更改。对于当前构建到下一个构建(n到n +1)或当前版本的即时低版本版本(n到n-1)。但是[n到n + 3]或[n到n-5]不可能
但是这里的问题是, 假设有一个客户端正在使用version_1.0构建,我们想将其升级到version_1.1,则意味着每个直接发布的查询文件都没有问题,我们可以使用它来解决。 但是,如果客户端使用的是version_1.0,而我们想将其升级到version_2.5,则意味着我们在version_1.0-version_2.5之间没有任何更改查询兼容性,而只有版本version_2.4-version_2.5。 这意味着我们可以拥有 n至n + 1 n至n-1
不是,n为n + 2。
注意:在某些情况下,也有可能还原到例如version_2.5到version_1.0
问题是, 有什么办法可以理解两个模式之间的差异?有什么工具吗?有算法吗?