Каков хороший подход к предварительной загрузке данных? - PullRequest
2 голосов
/ 11 июня 2010

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

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

IF NOT EXISTS (SELECT * FROM Master.Site WHERE Name = @SiteName)
INSERT INTO [Master].[Site] ([EnterpriseID], [Name], [LastModifiedTime], [LastModifiedUser])
VALUES (@EnterpriseId, @SiteName, GETDATE(), @LastModifiedUser)

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

Существуют осложняющие факторы, в том числе отношения между таблицами.Так что это не так просто, как загрузка таблиц самостоятельно.Например, если мы создаем строки Security.Member, то мы хотим добавить эти элементы в Security.Role, нам нужен способ поддерживать эту связь.

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

Любые идеи приветствуются.

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Я бы порекомендовал комбинацию из 2 подходов, указанных ответом Кейда.

Шаг 1. Загрузите все необходимые данные во временные таблицы (например, в Sybase загрузите данные для таблицы "db1..table1" в "temp..db1_table1"). Чтобы иметь возможность обрабатывать большие наборы данных, используйте механизм массового копирования (который поддерживает ваш сервер БД) без записи в журнал транзакций.

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

2 голосов
/ 11 июня 2010

Если данных немного, инициализируйте данные конфигурации - мы обычно пишем их при любом создании / изменении базы данных.

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

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

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