Есть несколько вопросов о SO о контроле версий для SQL и множестве ресурсов в Интернете, но я не могу найти то, что полностью охватывает то, что я пытаюсь сделать.
Во-первых, я говорю о методологии здесь. Я знаком с различными приложениями для управления версиями, и я знаком с такими инструментами, как Red Gate SQL Compare и т.д., И я знаю, как писать приложение, чтобы автоматически проверять ситуацию в моей исходной системе управления. Если есть инструмент, который был бы особенно полезен при создании целой новой методологии или который имел бы полезную и необычную функциональность, тогда отлично, но для задач, упомянутых выше, я уже установлен.
Требования, которые я пытаюсь выполнить, следующие:
- Данные схемы базы данных и справочной таблицы версий
- Сценарии DML для исправлений данных для больших таблиц версий
- Сервер может быть продвинут от версии N до версии N + X, где X не всегда может быть 1
- Код не дублируется в системе управления версиями - например, если я добавлю столбец в таблицу, я не хочу, чтобы это было сделано как в create script, так и в файле alter script
- Система должна поддерживать несколько клиентов, которые находятся в разных версиях для приложения (пытаясь получить их все в пределах 1 или 2 релизов, но еще нет)
Некоторые организации сохраняют инкрементные скрипты изменений в своем управлении версиями и, чтобы получить от версии N до N + 3, вам нужно будет запускать скрипты для N- > N + 1, затем N + 1- > N + 2, затем N + 2- > N + 3. Некоторые из этих сценариев могут повторяться (например, добавляется столбец, но затем он изменяется для изменения типа данных). Мы стараемся избегать такой повторяемости, поскольку некоторые из клиентских БД могут быть очень большими, поэтому эти изменения могут занять больше времени, чем необходимо.
Некоторые организации просто будут поддерживать полную сборку базы данных script на каждом уровне версии, а затем использовать такой инструмент, как SQL Compare, чтобы довести базу данных до одной из этих версий. Проблема здесь в том, что смешивание сценариев DML может быть проблемой. Представьте сценарий, когда я добавляю столбец, используйте DML script для заполнения указанного столбца, а затем в более поздней версии это имя столбца будет изменено.
Возможно, есть гибридное решение? Может быть, я просто прошу слишком много? Любые идеи или предложения были бы весьма полезны.
Если модераторы считают, что это было бы более уместно в качестве вики сообщества, пожалуйста, дайте мне знать.
Спасибо!