使用Ruby/Rails基于信息模式生成MySQL视图

使用Ruby/Rails基于信息模式生成MySQL视图,mysql,sql,ruby-on-rails,ruby,Mysql,Sql,Ruby On Rails,Ruby,我正在处理一个遗留数据库。命名约定到处都是,而且不一致。我们正在编写一个RubyonRails应用程序,但是很明显,数据库没有很好地使用Rails内置的特性。以下是我们的策略,希望获得一些意见: 创建一个新数据库并将rails应用程序指向该数据库 将旧数据库表/列映射到新的、rails友好的表名/列名 使用map生成视图,以便rails应用程序“认为”这些表是真实的 发展 当rails应用程序准备好接管旧UI并将实际数据迁移到实际表而不是视图时,请返回 我遇到的问题是如何将这个MySQL视图生成

我正在处理一个遗留数据库。命名约定到处都是,而且不一致。我们正在编写一个RubyonRails应用程序,但是很明显,数据库没有很好地使用Rails内置的特性。以下是我们的策略,希望获得一些意见:

  • 创建一个新数据库并将rails应用程序指向该数据库
  • 将旧数据库表/列映射到新的、rails友好的表名/列名
  • 使用map生成视图,以便rails应用程序“认为”这些表是真实的
  • 发展
  • 当rails应用程序准备好接管旧UI并将实际数据迁移到实际表而不是视图时,请返回
  • 我遇到的问题是如何将这个MySQL视图生成脚本安装到rails应用程序中。这样的内容在文件结构中的位置如何?作为某种插件

    表映射:

    +--------------------+------------------+------+-----+---------+----------------+
    | Field              | Type             | Null | Key | Default | Extra          |
    +--------------------+------------------+------+-----+---------+----------------+
    | id                 | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
    | database           | varchar(64)      | NO   |     |         |                |
    | current_name       | varchar(64)      | NO   |     |         |                |
    | current_pk         | varchar(64)      | YES  |     | NULL    |                |
    | new_system_prefix  | varchar(255)     | YES  |     | NULL    |                |
    | new_format         | varchar(255)     | YES  |     | NULL    |                |
    | new_vendor         | varchar(255)     | YES  |     | NULL    |                |
    | new_name           | varchar(64)      | YES  |     | NULL    |                |
    | new_pk             | varchar(64)      | YES  |     | NULL    |                |
    | notes              | varchar(255)     | YES  |     | NULL    |                |
    +--------------------+------------------+------+-----+---------+----------------+
    
    +-----------------+------------------+------+-----+---------+----------------+
    | Field           | Type             | Null | Key | Default | Extra          |
    +-----------------+------------------+------+-----+---------+----------------+
    | id              | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
    | table_id        | int(11) unsigned | YES  | MUL | NULL    |                |
    | current_name    | varchar(255)     | YES  |     | NULL    |                |
    | current_type    | varchar(255)     | YES  |     | NULL    |                |
    | current_default | varchar(255)     | YES  |     | NULL    |                |
    | new_name        | varchar(255)     | YES  |     | NULL    |                |
    | new_type        | varchar(255)     | YES  |     | NULL    |                |
    | new_default     | varchar(255)     | YES  |     | NULL    |                |
    | extra           | varchar(255)     | YES  |     | NULL    |                |
    | notes           | varchar(255)     | YES  |     | NULL    |                |
    +-----------------+------------------+------+-----+---------+----------------+
    
    列映射:

    +--------------------+------------------+------+-----+---------+----------------+
    | Field              | Type             | Null | Key | Default | Extra          |
    +--------------------+------------------+------+-----+---------+----------------+
    | id                 | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
    | database           | varchar(64)      | NO   |     |         |                |
    | current_name       | varchar(64)      | NO   |     |         |                |
    | current_pk         | varchar(64)      | YES  |     | NULL    |                |
    | new_system_prefix  | varchar(255)     | YES  |     | NULL    |                |
    | new_format         | varchar(255)     | YES  |     | NULL    |                |
    | new_vendor         | varchar(255)     | YES  |     | NULL    |                |
    | new_name           | varchar(64)      | YES  |     | NULL    |                |
    | new_pk             | varchar(64)      | YES  |     | NULL    |                |
    | notes              | varchar(255)     | YES  |     | NULL    |                |
    +--------------------+------------------+------+-----+---------+----------------+
    
    +-----------------+------------------+------+-----+---------+----------------+
    | Field           | Type             | Null | Key | Default | Extra          |
    +-----------------+------------------+------+-----+---------+----------------+
    | id              | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
    | table_id        | int(11) unsigned | YES  | MUL | NULL    |                |
    | current_name    | varchar(255)     | YES  |     | NULL    |                |
    | current_type    | varchar(255)     | YES  |     | NULL    |                |
    | current_default | varchar(255)     | YES  |     | NULL    |                |
    | new_name        | varchar(255)     | YES  |     | NULL    |                |
    | new_type        | varchar(255)     | YES  |     | NULL    |                |
    | new_default     | varchar(255)     | YES  |     | NULL    |                |
    | extra           | varchar(255)     | YES  |     | NULL    |                |
    | notes           | varchar(255)     | YES  |     | NULL    |                |
    +-----------------+------------------+------+-----+---------+----------------+
    

    我建议您阅读一些关于反腐败层的内容,这是DDD模式之一。此模式的主要原则是保护您的模型不受与其交互的遗留系统的影响。其中一个选项是创建一个存储库并封装所有处理遗留数据库的查询。存储库将充当旧数据库和新模型之间的转换器。数据库字段到实体的映射也将由存储库完成。

    这是一个内部应用程序,还是您将在客户端安装它?