Как мне организовать свой мастер-скрипт ddl

В настоящее время я создаю основной ddl для нашей базы данных. Исторически мы использовали резервное копирование / восстановление до версии нашей базы данных и не поддерживали сценарии ddl. Схема довольно большая.

Мое текущее мышление:

  • Разбить скрипт на части (возможно, на отдельные скрипты):

    1. table creation
    2. добавить индексы
    3. добавить триггеры
    4. добавить ограничения
  • Каждый сценарий будет вызываться основным сценарием.

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

Есть еще совет?

Изменить: Также, если кто-то знает хорошие инструменты для автоматизации части процесса, мы используем MS SQL 2000 (старый, я знаю).


person Justin Standard    schedule 07.08.2008    source источник


Ответы (7)


Я думаю, что основная идея хороша.

Самое приятное в том, чтобы сначала построить все таблицы, а затем построить все ограничения, то, что таблицы можно создавать в любом порядке. Когда я это сделал, у меня был один файл на таблицу, который я поместил в каталог с названием «Таблицы», а затем скрипт, который выполнил все файлы в этом каталоге. Точно так же у меня была папка для сценариев ограничений (которые также делали внешний ключ и индексы), которые выполнялись после того, как таблицы были построены.

Я бы разделил сборку триггеров и хранимых процедур и запустил их в последнюю очередь. Дело в том, что их можно запускать и повторно запускать в базе данных, не влияя на данные. Это означает, что вы можете обращаться с ними как с обычным кодом. Вы должны включать операторы «if exists ... drop» в начало каждого триггера и сценария процедуры, чтобы сделать их повторно запускаемыми.

Так что порядок будет

  1. создание таблицы
  2. добавить индексы
  3. добавить ограничения

потом

  1. добавить триггеры
  2. добавить хранимые процедуры

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

person Mat Roberts    schedule 11.09.2008
comment
У меня также есть аналогичная среда, в которой я использую MSBuild для управления выполнением скрипта. Это также позволяет мне включать скрипты загрузки данных, где это необходимо. Например, я могу загрузить образцы данных в тестовую или демонстрационную копию базы данных. - person bobs; 21.07.2010
comment
Это не всегда так просто, можно иметь вычисляемый столбец в таблице, вычисление выполняется в функции. Большинство функций зависят от таблиц, но таблицы с вычисляемыми столбцами зависят от функций. Итак, если вы сначала попробуете использовать прямые таблицы, затем ограничения, затем функции, а затем представления, вы обнаружите, что у вас есть проблема. - person David Roussel; 19.07.2012

@Адам

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

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

person Justin Standard    schedule 07.08.2008

Если вам нужен инструмент автоматизации, я часто работал с EMS SQLManager, который позволяет автоматически генерировать сценарий ddl из базы данных.

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

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

person Philippe Grondier    schedule 16.09.2008

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

@Justin

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

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

person Adam Lerman    schedule 07.08.2008

есть удобные инструменты, которые будут проходить через весь сервер sql и извлекать все таблицы, представления, сохраненные процедуры и определения UDF в локальную файловую систему в виде сценариев SQL (текстовые файлы). Я использовал это с 2005 и 2008 годами, хотя не уверен, как это будет работать с 2000. Посетите http://www.antipodeansoftware.com/Home/Products

person Darryl    schedule 29.08.2010

Потратьте время на написание универсального сценария «удаления всех ограничений», чтобы вам не приходилось его поддерживать.

Курсор на следующие операторы делает свое дело.

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints
person Stu    schedule 07.08.2008

Ранее я организовал свой DDL-код по одному файлу на каждую сущность и создал инструмент, который объединил его в один DDL-скрипт.

Мой бывший работодатель использовал схему, в которой вся таблица DDL находилась в одном файле (хранится в синтаксисе Oracle), указывает в другом, ограничения в третьем и статические данные в четвертом. Параллельно с этим был сохранен сценарий изменения (опять же в Oracle). Преобразование в SQL было ручным. Это был беспорядок. На самом деле я написал удобный инструмент, который конвертирует Oracle DDL в SQL Server (он работал в 99,9% случаев).

Недавно я перешел на использование Visual Studio Team System для специалистов по базам данных. Пока все работает нормально, но есть некоторые сбои, если вы используете функции CLR в базе данных.

person vzczc    schedule 19.08.2008