4. Об этом стоит задуматься
Когда проект и команда начинают расти
5. Как можно решить задачу
1. Выбрать язык/фреймворк в котором это
есть из коробки(Ruby/rake, PHP/YII,
PHP/Doctrine, Python/Yoyo,
Python/Sqlalchemy, etc)
2. Использовать stand-alone решение
3. Написать свою утилиту для
версионирования
4. Не делать ничего...
6. Подходы к решению
Метод инкрементных изменений
Недостатки:
1. Сложности при командной разработке
7. Подходы к решению
Метод идемпотентных изменений
Недостатки:
1. Сложность написания скриптов
2. Опасность повторного применения
изменений при повторении имен
8. Подходы к решению
Метод декларативного описания структуры
БД
Недостатки:
1. Сложность миграции данных
2. Сложно выполнять вручную
3. Готовые решение платные
9. Какие есть stand-alone решения
1. DbDeploy
2. Liquibase
3. Flyway
4. AutoPatch
5. DbMaintain
... тысячи их
10. DbDeploy возможности
1. Миграции на чистом SQL
2. Command Line интерфейс
3. Поддержка большинства СУБД
4. Поддержка в Phing/Ant
--//
-- Run SQL to do the changes
--//@UNDO
-- RUN SQL to undo the changes
--//
11. Liquibase возможности
1. XML и Groovy миграции
2. Поддержка большинства СУБД
3. Поддержка в Ant/Maven/Phing
4. Command Line интерфейс
<changeSet id="1" author="bob">
<createTable tableName="department">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="active" type="boolean" defaultValueBoolean="true"/>
</createTable>
</changeSet>
12. Flyway возможности
1. Java и SQL миграции
2. Поддержка большинства СУБД
3. Поддержка в Ant/Maven
4. Command Line интерфейс
5. Плейсхолдеры в миграциях
/* Single line comment */
CREATE TABLE test_user (
name VARCHAR(25) NOT NULL,
PRIMARY KEY(name)
);
13. Литература
1. http://habrahabr.ru/post/121265/
2. http://flywaydb.org/
3. http://www.liquibase.org/
4. http://www.phing.info/