Как управлять базой данных первым проектом
Мы работаем над проектом, который использует базу данных первой модели.
В начале проекта мы решили использовать центральную базу данных, все разработчики использовали эту базу данных.
Но в середине проекта разработчики решили использовать собственные БД, они клонируют БД на свой локальный сервер. Таким образом, они используют и изменяют свои локальные данные, но перенести изменения БД в централизованную БД так сложно, что мы делаем это вручную.
Есть ли хороший способ управлять изменениями БД в централизованной БД?
1 ответ
но перенести изменения БД в централизованную БД очень сложно, мы делаем это вручную.
И вам никогда не приходило в голову, что это не масштабируется? У нас работает команда из 4 человек с 9 средами - это невозможно сделать вручную. Сверху вы БУДЕТЕ делать ошибки, и если они случаются во время развертывания, это плохо, плохо, плохо.
Тем не менее, эта проблема решена, как и 50 лет назад. Учитесь у истории. Вот наш подход:
- Смена скриптов БД.
- В папках, пронумерованных спринтом
В каждом треке базы данных есть таблица SchemaSync, который выполнялся и контрольная сумма
Отсутствующие / измененные сценарии выполняются во время развертывания или вручную (из zip-файла) с помощью командлета powershell.
Это серьезно стандартное решение, предшествующее SSDT и миграциям для возрастов и, вероятно, старше, чем вы. Существуют даже реализации с открытым исходным кодом https://github.com/DbUp/DbUp и коммерческие библиотеки (одна из них на самом деле в VISUAL STUDIO, так что вы можете попробовать это) https://www.red-gate.com/products/sql -разработка / SQL-изменение-автоматизация /
Как единственный путь.
ССДТ: Любит сбрасывать поля. Как вы справляетесь с миграцией БД с этим? Возможно с несколькими шагами? Невозможно. Идея SSDT относительно сценариев изменения не учитывает перемещения данных. Если вы когда-нибудь сделаете рефакторинг большего размера (что мне случается много), то вы знаете, что иногда это не "создание нового поля", а ряд шагов, которые частично запускают сложный код. SSDT полностью не может справиться с этим.