Во-первых, я хотел бы сказать, что эта проблема очень сложная, и вы можете не найти полного ответа.
В последнее время я принимал участие в поддержке устаревшего бизнес-приложения, которое может вскоре перерасти в новую версию. Обслуживание включает в себя устранение ошибок, оптимизацию старого кода и новых функций, которые иногда не могут легко вписаться в текущую архитектуру приложения. Основная проблема с нашим приложением заключается в том, что оно было плохо документировано, никаких изменений не наблюдается, и мы в основном работаем над проектом 5-й ротации (мы довольно плохо знакомы с ним).
Оставляя внешние детали на стороне (код, слои и т. Д.), Я попытаюсь немного объяснить, как мы в настоящее время управляем изменениями базы данных.
На данный момент у нас есть два правила, которым мы пытаемся следовать:
Во-первых, старый код (sql, хранимые процедуры, функции и т. Д.) Работает как есть и должен храниться как есть, не внося слишком много изменений, если только нет случая (ошибка или изменение функции), и Конечно, постарайтесь документировать это как можно больше (особенно такие проблемы, как:
«WTF !, почему он сделал это вместо этого?»).
Во-вторых, каждая новая функция должна использовать лучшие практики, известные на данный момент, и как можно меньше изменять старую структуру базы данных. Это приведет к появлению некоторых опций рефакторинга базы данных, таких как использование редактируемых представлений поверх старой структуры, введение новых таблиц расширений для уже существующих, нормализация структуры и предоставление более старой структуры через представления и т. Д.
Кроме того, мы пытаемся написать как можно больше модульных тестов при условии, что бизнес-аналитики работают бок о бок и документируют бизнес-правила.
Рефакторинг базы данных - очень сложное поле, на которое нужно ответить коротким ответом. Есть много книг, которые отвечают на все ваши проблемы, одна http://databaserefactoring.com/ указана в одном из ответов .
Позднее редактирование: надеюсь, второе правило также ответит на обработку критических изменений.