Ожидаемая модель базы данных несовместима в режиме реального времени - PullRequest
0 голосов
/ 29 сентября 2011

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

  • Началось с развернутой в данный момент версии приложения
  • Добавлены новые функции, использующие существующую базу данных
  • Добавлены новые таблицы базы данных и взаимосвязи
  • Добавлены новые функциональные возможности, зависящие от новой структуры базы данных
  • Тестирование завершено, готово к развертыванию

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

  • Используйте функциональность VS2010 «Создать базу данных из модели» для создания .sql (модель была изначально создана с использованием функции «Создать модель из базы данных»)
  • Удалить все части.sql, которые действуют на существующие таблицы, за исключением тех, которые добавляют FK между новыми и старыми таблицами
  • Используйте полученный скрипт для создания новой базы данных

Звучит довольночисто и сделано, верно?Неправильно.Сопоставление модели с базой данных было неправильным для новых таблиц.Короче говоря, база данных, сгенерировавшая модель, имела таблицы, названные во множественном числе (и отображение было правильным, и приложение работало), а база данных, сгенерированная моделью, создала таблицы во множественном числе (имена, идентичные именам таблиц, где находится БДгенерируется модель, но модель не отображается на них).В итоге было решено сменить сценарий на имя таблицы в единственном числе, и тогда все работало безупречно.

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

  • Создание сценария
  • Удалить "новые" таблицы и ограничения (те, которые еще не существуют в развернутой версии)
  • Запустить сценарий для повторного добавления таблиц

решено сопоставлениебыть с именованными таблицами (пользователь вместо пользователей, адрес вместо адресов и т. д.).

Может кто-нибудь объяснить мне, как / почему это произошло бы таким образом?

1 Ответ

1 голос
/ 30 сентября 2011

Возможно, вы захотите взглянуть на некоторые инструменты, которые предоставляют Redgate - хорошие инструменты для сравнения двух структур БД и создания сценария для обновления.

http://www.red -gate.com /? Utm_source = Google & utm_medium = КОП & utm_content = brand_aware & utm_campaign = RedGate & GCLID = CIamkumgw6sCFcYPfAodnGVjsQ

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