Как масштабировать Play2 Evolutions
Я недавно начал использовать Play2 в проекте и прочитал раздел об эволюции. И хотя приведенный ими пример выглядит неплохо, если бы в моем проекте была 1 таблица, кажется, что было бы очень грязно, если бы у меня было 10-20 таблиц в 1.sql
а затем изменения в них распались 2.sql
, 3.sql
и так далее.
В Ruby on Rails, Symfony и других вы определяете миграцию вверх / вниз для каждой сущности.
Мой вопрос: как лучше всего настроить эволюцию в Play2? Должны ли я иметь все свои таблицы в 1.sql
а затем внести в них небольшие изменения 2.sql
и так далее? Или есть способ иметь отдельный .sql
файл для каждой таблицы?
Кроме того, есть ли примеры крупных проектов Play2 с открытым исходным кодом, где я мог видеть, как это будет выглядеть?
1 ответ
На самом деле Play не имеет возможности делить эволюции по сущностям.
ИМХО, это скорее вопрос вкуса, вы можете добавить каждую сущность в одну следующую эволюцию, в любом случае единственная разница будет в том, что счетчик эволюции будет больше, я не думаю, что это поможет вам сохранить эволюцию чище.
Типичный рабочий процесс начинается с... хорошего планирования. Просто создайте графическое представление вашей схемы и попробуйте добавить туда столько вещей, сколько вам нужно. Это очень помогает при запуске проекта, а также на следующих этапах разработки.
Если вы собираетесь использовать Ebean, создайте все модели на вашем графике и позвольте плагину для создания автоматического первого файла эволюции, возможно, вы сэкономите много времени на написании эволюций для отношений, ограничений и т. Д. Потратьте некоторое время на исправление и проверку исходная схема перед дальнейшей разработкой.
После этого вам нужно отключить автоматические обновления, так как они отбрасывают всю БД и воссоздают таблицы с нуля (в Ebean обновление схемы diff отсутствует).
Это тоже дело вкуса, но я предпочитаю объединять несколько изменений в одну эволюцию (так что опять планируем...) вместо того, чтобы создавать следующие и следующие файлы для каждого отдельного изменения ad hoc.