Если ваши данные изменятся после развертывания приложения, как вы будете поддерживать базу данных в актуальном состоянии?
Я имею в виду, вы можете добавить или удалить таблицу, это простая задача. Изменение существующей таблицы также может быть тривиальным. Но если вы часто меняете структуру, как вы держите это под контролем?
Я использовал для хранения таблицы с текущей версией базы данных в базе данных. Затем каждое обновление представляло собой файл SQL, который выполнял свою работу - создавал новую таблицу, добавлял столбец или перемещал данные. Файлы были названы в честь этих версий - поэтому, если мой скрипт обновления получил версию базы данных 10, он просто перенес все файлы с 11.sql на N.sql и применил каждый из них, увеличивая номер версии базы данных одновременно.
Кажется, это работает нормально, но мне интересно - какова ваша стратегия для таких задач?
Также эта система не кажется идеальной, если я нормализую таблицу в одном «патче», и после этого я снова денормализую ее по тем или иным причинам. Тогда это делается дважды.
Но писать полный скрипт обновления каждый раз, когда я что-то меняю, кажется болезненным и подверженным ошибкам. По крайней мере, больше, чем такие атомные изменения.
Кроме того, я могу ожидать, что разные клиенты имеют разные версии баз данных, запущенные в любое время, поэтому мне действительно нужен способ подняться с любой точки.