Как реализовать справочные данные в непрерывных развертываниях баз данных на основе состояний - PullRequest
0 голосов
/ 14 июля 2020

Как должны быть реализованы справочные данные в решениях для непрерывного развертывания баз данных на основе состояний?

Типичное решение на основе состояний, с которым я столкнулся, заключается в использовании серии сценариев после развертывания SQL, которые усекают таблицы справочных данных и затем переходите к INSERT справочным данным по одной строке за раз.

Проблема с этим типичным решением состоит в том, что окружение иногда может быть изменено людьми, не участвующими в разработке, и эти изменения необходимо сохранять. В результате требуется много ручных сравнений для выявления этих изменений во время циклов развертывания, и все меньше и меньше доверяют автоматизированным развертываниям.

Существуют ли какие-либо альтернативные решения этой типичной реализации, которые подходят для ситуаций, когда среды могут есть важные изменения, которых нет в системе управления версиями?

-- Example of typical solution

-- drop existing data
TRUNCATE myReferenceData

-- insert all data to produce specific state
INSERT INTO myReferenceData (Col1, Col2) Values ("one", 1)
INSERT INTO myReferenceData (Col1, Col2) Values ("two", 2)
-- etc 

1 Ответ

1 голос
/ 14 июля 2020

Я думаю, что сценарии после развертывания - лучший вариант (при условии, что вы используете SSDT, а не RedGate). Для хранения справочных данных я обычно использую следующий шаблон:

  1. Создайте временную таблицу с информацией, которая должна всегда перезаписываться из системы управления версиями.
  2. Используйте оператор слияния для обновления производственных данных.

Таким образом вы можете сохранить некоторые столбцы или строки, добавленные вне системы управления версиями.

Также очень важно убедиться, что все понимают, какие таблицы поддерживаются сценариями развертывания и могут ' не обновляться вручную вне системы контроля версий. Так что, если кто-то не следит за процессом, вините его. Вам необходимо четко определить, какие таблицы не могут быть обновлены вне разработки.

...