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