0

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

  1. 创建一个新数据库并将 rails 应用程序指向该数据库
  2. 将旧的数据库表/列映射到新的、rails 友好的表名/列名
  3. 使用 map 生成视图,以便 rails 应用程序“认为”这些表是真实的
  4. 发展
  5. 当 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    |                |
+-----------------+------------------+------+-----+---------+----------------+
4

1 回答 1

1

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

于 2012-06-29T15:39:36.020 回答