Задать вопрос
khusamov
@khusamov
ReactJS, NodeJS, TypeScript, Sencha ExtJS

Какие есть варианты разработки базы данных?

Я разрабатываю базу следующим образом. Есть две папки:

entity (сущности базы)
c6fa6d869f4342b09e19de39ca6ab22d.PNG

и migrations (история изменений)
8dc5bd9657b04491a4123a49431fd572.PNG

В entity храню SQL-запросы на создание каждой сущности в отдельности (например в одном файле может быть таблица и все функции к ней относящиеся или вид с функциями и т.п.).

В migrations храню в хронологическом порядке изменения структуры базы данных.

В итоге, когда нужно внести изменения делаю следующее:
1) делаю в migrations новый файл
2) этот файл прогоняю на тестовой базе, чтобы проверить отсутствие ошибок
3) в entity вношу все изменения из этого файла

Недостатки:
1) Приходится вносить в двух местах одни и те же изменения.
2) Не очень удобная отладка (приходится постоянно создавать тестовую базу на которой все проверять, в том числе работу новой версии программы, которая обращается к базе).

Есть ли варианты разработки базы более удобные, чем моя?

Надо заметить, что продакшн-баз много и на каждой надо будет обновлять структуру базы до последней версии.
  • Вопрос задан
  • 399 просмотров
Подписаться 2 Оценить 7 комментариев
Решения вопроса 1
darthunix
@darthunix
Знаю PostgreSQL, Ubuntu, DICOM и медицину.
Я рекомендую использовать pyrseas. В нем dbtoyaml парсит схему базы с поддержкой всех самобытных фишек PostgreSQL в yaml файл, который вы помещаете в систему контроля версий. В отличие от SQL дампа с yaml схемой легко работать и осуществлять слияния в ветках. Я использую PyCharm с подсветкой yaml синтаксиса для этого. Так же yamltodb может сравнить yaml файл с базой и сформировать SQL миграцию. Я этой штукой уже год пользуюсь на работе, все остальные решения рядом не стояли.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Не мне судить о самом подходе, так что остановлюсь лишь на предложения об оптимизации ваших процессов.

Что можно сделать - так это автоматизировать процесс формирования миграций между версиями. Например через apgdiff.

Мол идея такая. У вас и так организовано все так как вам удобно. Потому мы можем просто написать простенький скриптик который заливает новую схему, и потом генерит миграцию на основании различий между предыдущей версией. Это позволит вам уменьшить количество рутины.
Ответ написан
Комментировать
Tpona
@Tpona
Ужасный перфекционист
Прикольно придумали, есть похожий механизм миграций в yii2 www.yiiframework.com/doc-2.0/guide-db-migrations.html
Тут автоматизировано на уровне кода, есть up - накатить миграцию, и down откатить.
Таким образом можно перемещаться на сколь угодно вперед и назад по миграциям, но есть одно но: откатить без потерь не всегда получается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы