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

时间:2012-06-29 14:42:21

标签: mysql sql ruby-on-rails ruby

我正在使用旧数据库。命名约定遍布整个地方并且不一致。我们正在编写一个Ruby on Rails应用程序,但显然数据库与Rails内置功能的搭配并不好。这是我们的策略,希望得到一些意见:

  1. 创建新数据库并将rails应用程序指向此数据库
  2. 将旧数据库表/列映射到新的,有轨友好的表名/列名
  3. 使用map生成视图,以便rails app“认为”这些表是真实的
  4. 开发
  5. 当rails应用程序准备好接管旧UI并将实际数据迁移到真实表而不是视图时,回退一下
  6. 我遇到的问题是如何将这个MySQL View生成脚本放入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    |                |
    +-----------------+------------------+------+-----+---------+----------------+
    

1 个答案:

答案 0 :(得分:1)

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