【问题标题】:MySQL - Database with multiple schemas where table and column names are differentMySQL - 具有多个模式的数据库,其中表名和列名不同
【发布时间】:2019-07-16 20:21:23
【问题描述】:

有没有办法让一个数据库可以用不同的表名和列名表示?

我正在对 API 进行大规模重构,在这种情况下,重命名 MySQL 数据库中相当多的表名和列名才有意义,但旧版本的 API 仍然需要读取和写入现有数据库。数据基本相同,版本可以轻松共存。没有机会让两个数据库并行运行。

新的 API 域层与持久层完全分离,但在持久层中,我想使用新的表名和列名正确创建它,而不必为每个查询转换名称。

有没有办法以多种方式表示数据库结构 - 有效地制作命名变量?你能建议我一个解决方案吗? 有没有例如一种通过替换数据库模式来解决这个问题的方法?

我希望这两个版本的 API 可以读取和写入数据库,其中表可以存在,但命名不同 - 但表和数据是相同的。

+----------------------------+  +-------------------------+
|          old_items         |  |        new_items        |
+----+----------+------------+  +----+----------+---------+
| id | meta_key | meta_value |  | id | item_key | item_id |
+----+----------+------------+  +----+----------+---------+

应用程序是用 PHP 编写的。

谢谢。

【问题讨论】:

    标签: php mysql schema


    【解决方案1】:

    为什么要重命名列,何时可以在获取列名时使用别名。喜欢

    select metavalue as itemvalue from tablename
    

    或者

    或者,您可以为每个实体创建两个单独的表。这是有道理的。

    【讨论】:

    • 我已经为每一列使用了别名,但我目前必须基于旧的表名和列名,因此我必须重写两次。一次又一次,当我弃用旧 API 时——而不是马上写新名称。我目前的解决方案是我创建了很多辅助函数来将旧命名转换为新命名,并将整个模式设置在关联数组中。这对性能来说并不完全好,而且创建时间太长。
    • 如果设置两个不同的表,那么我需要某种服务队列来将条目从一个移动到另一个。这是你的建议,还是我误解了?这种队列不是一个可行的解决方案。
    • 这就是你的代码,你知道如何管理它。只是一个建议,不要做很多辅助功能或更改,将其作为 v1 并创建一个新的 v2 api 版本。
    • 如果有两个不同的表版本,你建议如何在我的代码中管理它??
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2013-05-18
    • 2012-01-06
    • 2016-10-05
    相关资源
    最近更新 更多