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

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

Мое современное мышление:

  • Перерыв script на части (возможно, в отдельных сценариях):

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

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

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

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

Ответ 1

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

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

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

Таким образом, порядок будет

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

Тогда

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

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

Ответ 2

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

@Justin

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

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

Ответ 3

Потратьте время, чтобы написать общий "drop all constraints" script, поэтому вам не нужно его поддерживать.

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

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints

Ответ 4

@Adam

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Я ранее организовал мой DDL-код, организованный одним файлом на сущность, и сделал инструмент, который объединил его в один DDL script.

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

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