SlideShare a Scribd company logo
Версионирование структуры
реляционных баз данных
А что такое версионирование?
Версионирование - процесс сопоставления
состояния ПО уникальному номеру или
имени версии.
Зачем такие сложности?
Все это не нужно, если ваш проект выглядит
так:
Об этом стоит задуматься
Когда проект и команда начинают расти
Как можно решить задачу
1. Выбрать язык/фреймворк в котором это
   есть из коробки(Ruby/rake, PHP/YII,
   PHP/Doctrine, Python/Yoyo,
   Python/Sqlalchemy, etc)
2. Использовать stand-alone решение
3. Написать свою утилиту для
   версионирования
4. Не делать ничего...
Подходы к решению
Метод инкрементных изменений

Недостатки:
1. Сложности при командной разработке
Подходы к решению
Метод идемпотентных изменений

Недостатки:
1. Сложность написания скриптов
2. Опасность повторного применения
   изменений при повторении имен
Подходы к решению
Метод декларативного описания структуры
БД

Недостатки:
1. Сложность миграции данных
2. Сложно выполнять вручную
3. Готовые решение платные
Какие есть stand-alone решения
1. DbDeploy
2. Liquibase
3. Flyway
4. AutoPatch
5. DbMaintain
... тысячи их
DbDeploy возможности
1. Миграции на чистом SQL
2. Command Line интерфейс
3. Поддержка большинства СУБД
4. Поддержка в Phing/Ant
--//
-- Run SQL to do the changes
--//@UNDO
-- RUN SQL to undo the changes
--//
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>
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)
);
Литература
1.   http://habrahabr.ru/post/121265/
2.   http://flywaydb.org/
3.   http://www.liquibase.org/
4.   http://www.phing.info/
Спасибо за внимание
Вопросы?

More Related Content

PDF
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
ODP
Азы мультисайтинга
PPT
Продвинутый мультисайтинг
PPTX
Bootstrap
PPTX
Bootstrap 3. Адаптивная верстка для WordPress
PPT
Основы Symfony и отличия Sf 3.x от Sf 2.x
PDF
Изучение и редактирование кода
PPTX
курс Java 2016. занятие 03. интерфейсы, generic, исключения
«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
Азы мультисайтинга
Продвинутый мультисайтинг
Bootstrap
Bootstrap 3. Адаптивная верстка для WordPress
Основы Symfony и отличия Sf 3.x от Sf 2.x
Изучение и редактирование кода
курс Java 2016. занятие 03. интерфейсы, generic, исключения

What's hot (9)

PPTX
Равиль Губайдуллин - Annotation processing
PDF
Fullstack javascript. Isomorphic apps
ODP
Система документации phpDocumentor
PDF
Илья Кацев: Анализ данных для поиска ошибок
PDF
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
PDF
SharePoint и OpenXML
PPTX
Разработка веб-приложений с помощью TypeScript
PDF
Равиль Губайдуллин - Annotation processing
Fullstack javascript. Isomorphic apps
Система документации phpDocumentor
Илья Кацев: Анализ данных для поиска ошибок
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
SharePoint и OpenXML
Разработка веб-приложений с помощью TypeScript
Ad

Similar to Relational databases versioning (20)

PPT
Catalyst – MVC framework на Perl (RIT 2008)
ODP
азы мультисайтинга
PPT
продвинутый мультисайтинг
ODP
Создаем Drupal дистрибутив: от идеи до сопровождения
PDF
Ігор Карпиленко — PHPStorm for drupal developer
PPT
Console application with ZF 2.0
PDF
Как построить свой фреймворк для автотестов?
PPT
Воюем за ресурсы (ZFConf2011)
PDF
Zend Framework и мультиязычность
PPTX
Расширяемая платформа для создания и управления автоматизированными тестами н...
PPTX
Inroducing SAP ABAP - Presentation with basics SAP ABAP
PPT
Multilanguage Drupal
PDF
PDF
Viacheslav Eremin about DOT NET (rus lang)
PPTX
PPT
Embarcadero All-Access
PPT
Client Side Autotesting Flash
PPTX
разработка бизнес приложений (7)
PDF
Java осень 2014 занятие 1
Catalyst – MVC framework на Perl (RIT 2008)
азы мультисайтинга
продвинутый мультисайтинг
Создаем Drupal дистрибутив: от идеи до сопровождения
Ігор Карпиленко — PHPStorm for drupal developer
Console application with ZF 2.0
Как построить свой фреймворк для автотестов?
Воюем за ресурсы (ZFConf2011)
Zend Framework и мультиязычность
Расширяемая платформа для создания и управления автоматизированными тестами н...
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Multilanguage Drupal
Viacheslav Eremin about DOT NET (rus lang)
Embarcadero All-Access
Client Side Autotesting Flash
разработка бизнес приложений (7)
Java осень 2014 занятие 1
Ad

Relational databases versioning

  • 2. А что такое версионирование? Версионирование - процесс сопоставления состояния ПО уникальному номеру или имени версии.
  • 3. Зачем такие сложности? Все это не нужно, если ваш проект выглядит так:
  • 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/