Подтвердить что ты не робот

Каковы наилучшие методы для сценариев базы данных под управлением кода

В настоящее время мы просматриваем, как мы храним наши сценарии базы данных (таблицы, procs, функции, представления, исправления данных) в подрывной деятельности, и мне было интересно, существует ли какой-либо консенсус относительно наилучшего подхода?

Некоторые из факторов, которые нам необходимо рассмотреть, включают:

  • Если мы проверим "Create" скрипты или проверим инкрементные изменения с помощью скриптов "Alter"
  • Как мы отслеживаем состояние базы данных для данного выпуска.
  • С легкостью создать базу данных с нуля для любой версии выпуска
  • Если в базе данных есть таблица, в которой перечислены запущенные против нее сценарии или версия базы данных и т.д.

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

4b9b3361

Ответ 1

После нескольких итераций подход, который мы приняли, был примерно таким:

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

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

У нас также есть программа (написанная на Python), которая сканирует каталог, полный скриптов, и собирает их в один большой script. Он анализирует SQL достаточно, чтобы вывести зависимости между таблицами (на основе ссылок на внешние ключи) и упорядочить их соответствующим образом. Результатом является монстр SQL script, который получает базу данных до спецификации за один раз. Программа script -assembling также вычисляет хеш MD5 входных файлов и использует это для обновления номера версии, которая записана в специальную таблицу в последнем script в списке.

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

Ответ 2

Вариант обновления script

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

Плюсы: Полностью автоматизированный, проверяемый путь обновления

Против: Трудно видеть полную историю каждого отдельного элемента Придется создавать новую базу данных с нуля, просматривая все версии

Ответ 3

Я пытаюсь проверить начальное создание script. Затем у меня есть таблица DbVersion в моей базе данных, и мой код использует это для обновления базы данных при первоначальном подключении, если это необходимо. Например, если моя база данных находится в версии 1, а мой код - в версии 3, мой код будет применять инструкции ALTER, чтобы довести ее до версии 2, а затем до версии 3. Для этого я использую простой оператор отключающего перехода.

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

Это не очень хорошая идея для всего программного обеспечения, но варианты могут быть применены.

Ответ 4

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

Ответы на каждый из ваших факторов:

  • Сохраните скрипты CREATE. Если вы хотите проверить версию x.y.z, было бы неплохо просто запустить создание script для немедленной настройки базы данных. Вы также можете добавить сценарии ALTER, чтобы перейти от предыдущей версии к следующей (например, вы передаете версию 3, которая содержит версию 3 CREATE script и версию 2 → 3 alter script).
  • См. решение миграции Rails. В основном они сохраняют номер версии таблицы в базе данных, поэтому вы всегда знаете.
  • Используйте сценарии CREATE.
  • Использование номеров версий, вероятно, будет самым общим решением — script имена и пути могут меняться со временем.

Мои два цента!

Ответ 5

Есть интересная статья по этой ссылке: http://www.codinghorror.com/blog/archives/001050.html

Он выступает за базовый "create" script, за которым следует проверка скриптов "alter" и сохранение таблицы версий в базе данных.

Ответ 6

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

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

Этот один файл затем используется для продвижения изменений в тестовых, QA и производственных средах. Процесс автоматической сборки также создает записи базы данных, документирующие версию (идентификатор ветки и сборки). Мы считаем, что это лучший подход к разработчикам предприятия. Подробнее о том, как мы это делаем, можно найти ЗДЕСЬ

Ответ 7

Создайте параметр script:

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

Используйте стандартные методы управления версиями для хранения, ветвления, версий тегов и истории просмотров ваших объектов.

При обновлении базы данных в реальном времени (где вы не хотите потерять данные) создайте пустую вторую копию базы данных в новой версии и используйте такой инструмент, как red-gate текст ссылки

Плюсы: Изменения в файлах отслеживаются в стандартном исходном коде как

Против: Опора на ручное использование стороннего инструмента для выполнения фактических обновлений (без малой автоматизации)

Ответ 8

Наша компания проверяет их просто потому, что кто-то решил поместить его в какой-то SOX-документ, который мы делаем. Для меня это не имеет никакого смысла, кроме как в качестве справочного документа. Я не вижу времени, когда мы вытаскиваем их и пытаемся использовать их снова, и если бы мы это сделали, нам нужно было знать, кто из них первым, а какой из них запускать, после чего. Резервное копирование базы данных гораздо важнее, чем сохранение сценариев Alter.

Ответ 9

для каждой версии нам нужно предоставить один файл update.sql, содержащий все новые сценарии таблицы, изменения операторов, новые/измененные пакеты, роли и т.д. Этот файл используется для обновления базы данных с 1 версии до 2.

Что бы мы ни включили в файл update.sql выше одного, все эти операторы должны перейти к отдельным соответствующим файлам. Подобный оператор alter должен перейти в таблицу как новый столбец (таблица script должна быть модифицирована, а инструкция Alter добавляется после создания таблицы script в файл) так же, как новые таблицы, роли и т.д.

Поэтому всякий раз, когда пользователь хочет обновить, он будет использовать первый файл update.sql для обновления. Если он хочет построить из scrach, то он будет использовать build.sql, который уже имеет все вышеперечисленные инструкции, он синхронизирует базу данных.

Sriramulu [email protected]