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

Php 将mysql表映射到具有不同字段名的新表的最佳方法,php,mysql,migration,mapping,Php,Mysql,Migration,Mapping,我在工作中面临着移民问题。现在我们有一个单一的数据库,由我们的网站和后台工具使用。 作为改进网站代码的一部分,我们为数据库中的几个表设计了一个新的模式 以产品表为例。这是一个相当标准的字段,如描述、名称、产品代码、价格、创建日期等。我们现在有了一个新表,我们称之为better_products。问题是,我们可以随心所欲地更改网站代码,但我们无法触及后台工具的代码,因为它严重依赖于旧产品表 我们将在生产中遇到这样一种情况:后台工具正在写入旧产品表,而网站正在读取新的better_products表

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

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

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

有更好的办法吗?半个更好的方法?除了逐条写出来之外,还有别的事吗? 有比使用触发器更好的实践吗


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

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


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

使用视图怎么样?并且仅使用backoffice应用程序中的视图。。如
create view as foo选择(new.fieldName oldFieldNAme,无论什么)as fieldName youwant….
新系统中的行实际上是只读的,或者新系统存储的数据必须在后台系统的更新之间保存?@busse网站只读取这些表,但后台读取和写入。@Rufinus如我所述,我至少在2.5-3个月内无法使用backoffice工具,这对我来说太长了,因为我们很快就会在prod中使用新的表格。删除我的答案,因为JeffO的答案是正确的,因为您没有在web端写作。只需将新表作为旧表的视图,直到您可以重写backoffice工具。那么基本上网站将从视图中读取数据?这将如何影响网站方面的性能?这是一个单表查询,因此不会对性能造成太大影响。我不能为mysql说话,但大多数rdbms都能处理。在与队友讨论后,我们决定使用脚本生成的触发器,但我选择了你的答案,因为这似乎是一个很好的方法,可能对其他人有用。