我在工作中面临迁移问题。现在我们有一个数据库,由我们的网站和后台工具使用。 作为尝试改进网站代码的一部分,我们为数据库中的几个表设计了一个新的模式。
作为示例,让我们来看产品表。它的描述,名称,产品代码,价格,创建日期等字段相当标准。我们现在有一个新表,让我们称之为better_products。问题是,我们可以随意更改网站代码,但我们无法触及后台工具的代码,这些代码严重依赖旧产品表。
我们将最终处于生产环境中,后台工具正在写入旧产品表,并且网站正在从新的better_products表中读取。问题是,我们如何让它们保持同步?我现在一直在谷歌搜索一段时间,到目前为止,最常见的解决方案是使用触发器,并将传入的数据映射到新表。我已经为产品编写了AFTER INSERT触发器,但是当我去编写UPDATE触发器时,它发现没有办法迭代触发器内部改变的字段并将它们映射过来。这意味着手工写出字段,如果新的,字段名称<> OLD.fieldName那么'这是丑陋的,需要手工列出字段。
有更好的方法吗?一个半更好的方式?什么,除了按字段写出这个字段? 有没有比使用触发器更好的做法?
请不要建议更改后台工具,因为现在这不是一个现实的选择。它的计划,但不是很快我们能够等待它。
答案 0 :(得分:2)
在mysql数据库中创建一个名为better_products的视图,该视图是旧产品上的select语句,但是包含已更改的列名的别名。
最终,您可以更新后台应用程序中的代码,以使用此视图。一旦两个系统都在使用新视图,该视图就可以被名为better_products的实际表替换,该表将旧表中的所有数据都复制过来。