Как я должен приблизиться к мигрирующим данным от “плохого” проектирования баз данных до применимого дизайна?

У вас работает профильный подход? Ищите With the @Profile annotation раздел

 @Profile("ConfigOne")
 @Configuration

Документация по конфигурации пружины

8
задан llamaoo7 21 March 2009 в 20:49
поделиться

7 ответов

Лучший подход к миграции на применимый дизайн? ТЩАТЕЛЬНО

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

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

Некоторые практические мысли...

Внесите одно изменение за один раз... и только одно изменение. Удостоверьтесь, что каждое изменение корректно, прежде чем Вы будете идти дальше. Старая пословица "семь раз отмерь, один раз отрежь" релевантна.

Автоматизируйте Автоматизируют, Автоматизируют... Никогда не делайте изменения в производственную систему "живым" использованием Studio управления SQL Server. Запишите сценарии SQL, которые выполняют все изменение сразу; разработайте и протестируйте их против копии базы данных, чтобы удостовериться, что Вы разбираетесь в них. Не используйте производство в качестве своего тестового сервера - Вы могли бы случайно запустить скрипт против производства; используйте выделенный тестовый сервер (если размер базы данных находится под 4G, используйте SQL Server Express, работающую на Вашем собственном поле).

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

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

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

Удачи!

10
ответ дан 5 December 2019 в 17:41
поделиться

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

Число заказа на работу ре; принятие Вас хочет, чтобы это продолжило быть столбцом IDENTITY; можно ли, возможно, заполнить данные, найти самое большое, затем использовать ALTER TABLE для создания этого ИДЕНТИФИКАЦИОННЫМИ ДАННЫМИ? У меня нет инструментов TSQL для вручения, таким образом, я не могу протестировать, к сожалению. С другой стороны, просто считайте это естественным ключом.

0
ответ дан 5 December 2019 в 17:41
поделиться

Я рекомендую использовать хранимые процедуры для помощи процессу перевода.

Конкретно:

  1. Один за другим замените запросы, используемые в коде с хранимыми процедурами. Как часть замены, запишите единицу (или интеграция) тесты против хранимых процедур непосредственно. Рассмотрите уровень кода StoredProcs класс помощника для консолидации доступа к базе данных там.
  2. После того, как все запросы являются sprocs, можно осуществить рефакторинг базу данных, с помощью тех модульных тестов, чтобы удостовериться, что Вы не изменяете ожидаемое поведение.
  3. Добавленное преимущество: у Вас будут те модульные тесты для принятия мер против будущих поломок.
0
ответ дан 5 December 2019 в 17:41
поделиться
  1. Создайте новую базу данных путем, Вы думаете, что она должна быть структурирована.
  2. Составьте importError таблицу в новой базе данных со столбцами как "oldId" и "errorDesc"
  3. Запишите простой, процедурный, четкий сценарий, который пытается выбрать строку из старой структуры и вставить ее в новую структуру. Если вставка перестала работать, журнал максимально определенная ошибка к importError таблице (а именно, почему вставка перестала работать).
  4. Запустите скрипт.
  5. Проверьте новые данные. Проверьте, существуют ли ошибки, зарегистрированные к importError таблице. Если данные недопустимы или существуют ошибки, осуществляют рефакторинг Ваш сценарий и выполняют его снова, возможно изменяя Вашу новую структуру базы данных в случае необходимости.
  6. Повторите шаги 1-5, пока у Вас не будет основательного сценария преобразования.

Результат этого процесса будет состоять в том, что Вы имеете: a) новую структуру дб, которая проверена против старой структуры и протестирована против "прагматизма"; b) журнал потенциальных проблем, против которых Вы, возможно, должны кодировать (такие как ошибки, которые Вы не можете зафиксировать через свое преобразование, потому что они требуют концессии в Вашей схеме, которую Вы не хотите),

(Я мог бы отметить, что полезно записать сценарий в Ваших предпочтительных сценариях/языке программирования, а не в, скажем, SQL.)

0
ответ дан 5 December 2019 в 17:41
поделиться

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

Так или иначе я был бы

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

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

0
ответ дан 5 December 2019 в 17:41
поделиться

Можно использовать SQL Server Integration Services (SSIS), которая является частью SQL Server 2005 для помощи Вам с миграцией. Это используется для передачи данных от одной формы до другого:

http://en.wikipedia.org/wiki/SQL_Server_Integration_Services http://www.microsoft.com/sqlserver/2005/en/us/integration-services.aspx

0
ответ дан 5 December 2019 в 17:41
поделиться

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

0
ответ дан 5 December 2019 в 17:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: