2010-07-25 31 views
0

我们正在开发一个支持Doctrine的网站,使用YAML来定义我们的模式。我们的模式变化规律(包括FK关系),所以我们需要做很多的:保持数据的原则模式更改?

Doctrine::generateModelsFromYaml(APPPATH . 'models/yaml', APPPATH . 'models', array('generateTableClasses' => true)); 
    Doctrine::dropDatabases(); 
    Doctrine::createDatabases(); 
    Doctrine::createTablesFromModels(); 

我们想保持现有的数据,并将其存回重新创建的数据库。所以我在主数据库被删除之前将数据复制到一个临时数据库中。

如何从“旧方案数据库副本”到“新方案数据库”的数据?(新方案只包含新列,没有列被删除)

注:

这显然是行不通的,因为列数不匹配。

SELECT * FROM copy.Table INTO newscheme.Table 

这显然不工作,但是这会消耗太多的时间来写的每个表:

SELECT old.col, old.col2, old.col3,'somenewdefaultvalue' FROM copy.Table as old INTO newscheme.Table 

回答

1

你看着Migrations?它们允许您以编程方式更改数据库模式。无损数据(当然,除非你拆除柱子)

0

如何编写脚本(使用学说类为例),其解析YAML架构文件(以前的版本和“下一个”版本)并生成sql脚本来运行?这将是一项一次性工作,不需要那么多工作。生成手动迁移脚本的好处是,您可以轻松将它们存储在版本控制系统中,并在稍后重放版本步骤。如果这不是你需要的,你可以直接通过数据库驱动程序收集代码中的更改。

当然,更看中你的架构变更而成,更难维护将获得即列名称的变化,空不空等