将mysql表映射到具有不同字段名称的新表的最佳方式


Best way to map a mysql table to new table with different field names

我在工作中遇到了迁移问题。现在我们有一个单独的数据库,供我们的网站和后台工具使用。作为改进网站代码的一部分,我们为数据库中的几个表设计了一个新的模式。

让我们以产品表为例。它相当标准,包含描述、名称、产品代码、价格、创建日期等字段。我们现在有了一个新表,称之为better_products。问题是,我们可以随心所欲地更改网站代码,但我们不能触及严重依赖旧产品表的后台工具的代码。

我们最终会在生产中遇到这样的情况:后台工具正在向旧产品表写入,而网站正在从新的better_products表中读取。问题是,我们如何使两者保持同步?我已经在谷歌上搜索了一段时间,到目前为止,最常见的解决方案是使用触发器,并将传入的数据映射到新表。我已经为产品编写了AFTER INSERT触发器,但当我编写UPDATE触发器时,发现没有办法迭代触发器内更改的字段并映射它们。这意味着用手写出一个la'IF NEW.fieldName<>OLD.fieldName THEN’,这很难看,需要手动列出字段。

有更好的方法吗?一个半好的方式?除了一个一个地写出来,还有什么别的吗?有比使用触发器更好的练习吗?

请不要建议更改后台工具,因为现在这不是一个现实的选择。这是有计划的,但还不够快,我们无法等待。

在mysql数据库中创建一个名为better_products的视图,该视图是旧产品上的select语句,但具有已更改列名的别名。

最终,您可以在后台应用程序中更新代码,以使用此视图。一旦两个系统都使用了新视图,该视图就可以替换为一个名为better_products的实际表,该表复制了旧表中的所有数据。