как обрабатывать обновления схемы БД при использовании привязки схемы и частого обновления - PullRequest
6 голосов
/ 05 августа 2010

Я использую базу данных MS SQL Server и использую множество представлений (для использования с O / R mapper). Немного раздражает, что я хотел бы

  • использовать привязку схемы
  • обновление с помощью скриптов (для развертывания на серверах и установки в систему контроля версий)

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

Есть ли лучший способ справиться с этим?

Мне все еще нужно иметь возможность использовать простые и контролируемые исходниками обновления sql. Такой генератор кода, который включен в SQL Server Management Studio, был бы полезен, но у меня были проблемы с SQL Server Management Studio, так как он имеет тенденцию создавать код, в котором не указываются имена для некоторых индексов или (по умолчанию) ограничений. Но я хочу иметь идентичные базы данных, когда я запускаю свои сценарии в разных системах, включая имена всех ограничений и т. Д., Чтобы мне не приходилось прыгать через циклы при обновлении этих ограничений позже.

Так что, возможно, разумнее генератор кода SQL будет решением?

Мой рабочий процесс теперь:

  • введите оператор alter table в редакторе запросов
  • проверить, получаю ли я сообщение об ошибке типа "cannot ALTER 'XXX' because it is being referenced by object 'YYY'."
  • использовать SQL Server Managment Studio для создания сценария me create кода для ссылочного объекта
  • вставить оператор drop перед оператором alter и создать оператор после
  • проверьте, создает ли оператор drop ошибку, и повторите

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

1 Ответ

3 голосов
/ 05 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...