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

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

Мое нынешнее мышление:

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

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

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

Любой другой совет?

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

7.08.2008 17:18:37
7 ОТВЕТОВ

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

@Justin

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

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

1
12.10.2008 12:37:58

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

Курсор над следующими утверждениями делает свое дело.

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints
1
25.08.2017 23:24:13

@Адам

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

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

1
7.08.2008 17:31:00

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

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

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

0
19.08.2008 06:19:37

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

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

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

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

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

потом

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

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

5
11.09.2008 17:13:21
У меня также есть похожая среда, где я использую MSBuild для управления выполнением скрипта. Это также позволяет мне включать скрипты загрузки данных, где это уместно. Например, я могу загрузить образцы данных в тестовую или демонстрационную копию базы данных.
bobs 21.07.2010 04:59:58
Это не всегда так просто, возможно иметь вычисляемый столбец в таблице, вычисления выполняются в функции. Большинство функций зависят от таблиц, но таблицы с вычисляемыми столбцами зависят от функций. Поэтому, если вы сначала попробуете «прямые таблицы, затем ограничиваете, а затем просматриваете функции», вы обнаружите, что у вас есть проблема.
David Roussel 19.07.2012 07:39:18

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

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

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

1
16.09.2008 19:48:30

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

1
29.08.2010 06:50:55