Как я могу обновить несколько схем баз данных SQL Server - PullRequest
2 голосов
/ 07 февраля 2011

Вот моя дилемма,

Я работаю над некоторыми SaaS, используя ASP.net MVC3 и SQL Server.

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

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

Задача 2

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

Core.sql 
Widget-Map.sql 
Widget-HR.sql  
etc.. 

Правильно ли я верю в это мышление или, может быть, есть более практичный способ напасть на эту ситуацию?

Я изучил сравнение Red-Gate SQL и мне это нравится, но он все равно не помогает в ситуации с несколькими базами данных.

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

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

Большое спасибо за любую помощь,

Несколько источников, которые я уже прочитал, Миграции для Java

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

Вне ORM, который выполняет структурные обновления, методы разбиваются на:

  1. Сравните с некоторой БД, которая считается правильной. Лично я считаю это рискованным, поскольку я бы предпочел, чтобы обновление было связано с развертыванием кода, и чтобы спецификация db была как-то включена в код. Это мое личное предпочтение.

  2. Обновление скриптов. Раньше он был самым популярным, похоже, теряет популярность благодаря ORM. В основном для любого конкретного выпуска у вас есть скрипт "install", который создается с нуля, и второй набор скриптов, которые обрабатывают все инкрементные "From_x.y.z_to_a.b.c" вещи. Pro: Просто для понимания. Con: удвоенный код, чрезвычайно важный PITA, когда 7-й скрипт из 17 не работает.

  3. Обновления на основе словаря или схемы. Вероятно, наименее популярный среди тех, кто вне меня, я не знаю никого, кто бы это делал :( Хорошо, может быть, это преувеличение. В PHP Doctrine есть что-то вроде этого. Идея в том, что какой-то инструмент сравнивает схему с существующей базой данных и выводит схему в текущее состояние. Pro: один файл схемы (или файлы), без дублирования кода, лучший способ гарантировать, что обновление приведет к созданию базы данных, которую вы ожидаете в кратчайшие сроки. Con: (почти) никто этого не делает, недостаток инструментов.

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

0 голосов
/ 13 февраля 2011

Теоретически вы можете создать отдельную ветвь для каждой отдельной версии схемы в системе управления версиями, а когда вам нужно обновить их, сделайте это, используя направление командной строки SQL Compare Pro из системы управления источниками. Для этого потребуется использовать Контроль исходного кода SQL , чтобы сохранить схему в управляемом исходным формате формате, который может распознавать SQL Compare Pro.

Пожалуйста, свяжитесь с support@red-gate.com, если вам нужна помощь, чтобы попробовать или настроить это.

...