Поделиться через


Использование ссылок в проектах баз данных

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

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

Ссылочный тип

Причина использования

Проект базы данных (DBPROJ) в текущем решении.

Этот тип ссылки добавляется для включения нескольких сценариев.

  • Добавив ссылку и определив переменную для имени сервера (при необходимости) и переменную для имени базы данных, в которой содержится объект, можно создать ссылку на объект базы данных в одном проекте из какого-либо другого проекта. Эти межбазовые ссылки используются, если база данных ссылается на объекты в других базах данных. Дополнительные сведения см. в разделе Начало командной разработки баз данных, ссылающихся на другие базы данных.

При добавлении ссылки на другой проект без определения переменных создается составной проект. При развертывании проекта данного типа объекты будут автоматически развернуты и в других проектах. Дополнительные сведения см. в параграфе Создание составных проектов с помощью ссылок далее в этом разделе.

Выходные данные проекта базы данных (DBSCHEMA-файл), полученные из текущего или любого другого решения

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

Иногда необходимо добавить ссылку на DBSCHEMA-файл, содержащий определения объектов сервера, без проверки параметров на сервере при развертывании проекта базы данных. В этом случае можно добавить ссылку на файл master.dbschema и определить литерал для переменной базы данных, задав для нее значение "master". Это позволит избежать ошибок, связанных с конфликтами ссылок на объекты, определенные в базе данных "master". Дополнительные сведения о литералах см. в параграфе Создание ссылок на базы данных с помощью литералов далее в этом разделе.

Файл master.dbschema, содержащий определения объектов системы

При необходимости создать ссылки на объекты системы, например хранимые процедуры, системные таблицы, системные представления или системные каталоги, следует добавить ссылку на соответствующий файл master.dbschema для устранения конфликтов этих ссылок. Например, можно добавить ссылку на sys.sysobjects в хранимой процедуре. Файл master.dbschema поставляется вместе с Visual Studio Premium для каждой поддерживаемой версии SQL Server. DBSHEMA-файлы находятся в папке [Program Files]\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Версия\DBSchemas, где Версия – это используемая версия SQL Server (например, 2005 или 2008).

В этом случае можно добавить ссылку на соответствующий файл master.dbschema и определить литерал для переменной базы данных, задав для нее значение "master". Это позволит избежать ошибок, связанных с конфликтами ссылок на объекты, определенные в базе данных "master". Дополнительные сведения о литералах см. в параграфе Создание ссылок на базы данных с помощью литералов далее в этом разделе.

Проект SQL для среды CLR в текущем решении

Ссылка на проект SQLCLR добавляется в текущее решение при разработке одного или нескольких объектов SQLCLR, которые нужно развернуть с помощью проекта базы данных. При развертывании проекта базы данных, развертывается также сборка, создаваемая проектом SQLCLR, на который указывает ссылка. Инструкция CREATE ASSEMBLY строится на основе свойств, заданных для этой ссылки. Дополнительные сведения см. в разделе Начало командной разработки баз данных, ссылающихся на объекты SQLCLR и в параграфе Использование межбазовых ссылок далее в этом разделе.

Сборка SQLCLR из проекта в текущем решении или из другого источника

Ссылка на сборку SQLCLR добавляется, если проект базы данных должен ссылаться на объекты, определенные в этой сборке, но разрабатываемые в разное время или разными группами. При развертывании проекта базы данных развертывается также и сборка, на которую добавляется ссылка.

Определение XML-схемы, заданное в XSD-файле

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

  • Для XML-данных заданы схемы, и сервер должен проверить эти данные на соответствие этим схемам.

  • Необходимо оптимизировать хранение и запросы в соответствии со сведениями о типе.

  • Необходимо повысить эффективность использования сведений о типе при компиляции запросов.

Дополнительные сведения см. в разделе Начало командной разработки баз данных, использующей коллекции схем XML.

Определение межбазовых ссылок

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

Сценарии для межбазовых ссылок

Visual Studio Premium поддерживает следующие сценарии.

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

  • Имеется проект базы данных, содержащий межбазовые ссылки, и эти ссылки используют переменные SETVAR для идентификации серверов и баз данных. Можно изменить имена этих переменных и определить определения объектов, содержащие эти ссылки.

  • Необходимо добавить ссылку на дополнительные схемы базы данных для разрабатываемого проекта базы данных. Требуется совместно использовать с остальными участниками рабочей группы только эти схемы, а не другие проекты базы данных. Можно добавить ссылку на файлы схемы базы данных (с расширением DBMETA) для этих проектов и вернуть в систему управления версиями только эти файлы схемы. Используя такой подход, можно ограничить доступ к проекторам базы данных, содержащим схемы, ссылки на которые нужно добавить. Следует также использовать этот подход, если требуется развернуть проект базы данных, но не те проекты, которые от него зависят.

Можно использовать Рефакторингбазы данных для выполнения дополнительных задач с межбазовыми ссылками. Дополнительные сведения см. в разделе Практическое руководство. Переименование ссылок на сервер или базу данных.

Ссылки на проекты баз данных и файлы схемы

При добавлении ссылки на проект базы данных можно указать другой проект базы данных или файл схемы, создаваемый при построении проекта базы данных.

Если следующее утверждение справедливо, нужно добавить ссылку на другой проект базы данных.

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

Если справедливо одно из следующих утверждений, нужно добавить ссылку на файл схемы.

  • Необходимо сослаться на базу данных, проект которой не входит в состав текущего решения.

  • Необходимо развернуть один проект, не разворачивая проекты, от которых он зависит.

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

Ограничения межбазовых ссылок

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

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

Также действуют следующие ограничения.

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

  • Прежде чем добавлять ссылку на файл схемы проекта базы данных этот проект базы данных необходимо построить.

  • Необходимо построить проекты базы данных, на которые вы ссылаетесь, чтобы межбазовые ссылки на них разрешались без предупреждений.

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

  • Если вы ссылаетесь на объект в проекте базы данных на другом сервере, необходимо определить его на целевом сервере как связанный сервер. Дополнительные сведения см. в разделе Практическое руководство. Добавление ссылок на проекты базы данных.

  • Для ссылки на базу данных master межбазовая ссылка не требуется.

  • Ссылки, включающие переменные SETVAR, должны всегда иметь форму «[$(имяПеременной)]». Если опустить квадратные скобки, развертывание проекта базы данных может завершиться неудачей.

  • Имена переменных SETVAR должны быть уникальными. Если имя сервера совпадает с именем база данных, необходимо определить переменные с разными именами, но разрешаемые как одно и то же значение.

Вопросы безопасности

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

Пример межбазовой ссылки

При наличии двух проектов базы данных, ReportDb и DependentDb, может возникнуть необходимость в создании ссылок на объекты DependentDb из ReportDb. В таком случае следует начать с добавления ссылки в свойства проекта базы данных DependentDb и определения переменных, как указано ниже.

  • RefServer

  • RefDatabase

Значением RefServer является имя сервера, на котором расположен проект DependentDb. Значением RefDatabase является имя целевой базы данных, развернутой проектом DependentDb. В этом примере RefServer имеет значение StageSvr, а RefDatabase – значение DepDb.

Для ReportDb можно добавить представление, в котором будут отображаться все столбцы таблицы Employee в DependentDb. Данную таблицу нужно развернуть в базе данных под именем DepDb на сервере с именем StageSvr. Чтобы создать определение объекта для этого представления, добавьте следующие операторы:

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

Создание составных проектов с помощью ссылок

Проекты базы данных и серверов не охватывают все сценарии, которые могут возникать во время развертывания базы данных. Чтобы охватить более сложные сценарии, можно создать составные проекты из двух и более проектов.

Составной проект создается при добавлении ссылки на проект базы данных в другой проект базы данных или сервера без указания значений переменных сервера и базы данных в проектах, для которых создаются ссылки. При добавлении этого типа ссылки проект, в который она добавляется, содержит все объекты и параметры проекта, на который указывает ссылка.

При создании составного проекта появляется возможность реализации следующих сценариев.

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

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

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

Добавление ссылок на базу данных с использованием литералов

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

При использовании переменных следует придерживаться следующего синтаксиса:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [($MasterDbVar)].[dbo].[spt_values].

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

CREATE VIEW [dbo].[View1] AS SELECT * FROM [master].[dbo].[spt_values]

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

См. также

Задачи

Практическое руководство. Переименование ссылок на сервер или базу данных

Практическое руководство. Добавление ссылок на проекты базы данных

Основные понятия

Создание и изменение объектов базы данных и сервера