Что такое проекты базы данных SQL?
Область применения: SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure
Проект базы данных SQL — это локальное представление объектов SQL, составляющих схему для одной базы данных, например таблиц, хранимых процедур или функций. Цикл разработки проекта базы данных SQL позволяет интегрировать разработку базы данных в рабочие процессы непрерывной интеграции и непрерывного развертывания (CI/CD), знакомые как рекомендации по разработке.
Обзор
Проекты SQL основаны на декларативных инструкциях T-SQL. В коде проекта базы данных SQL каждый объект создается один раз. Если необходимо изменить что-то об этом объекте, например добавление столбцов или изменение типа данных, измените отдельный файл, объявляющий объект в течение первого и единственного времени.
При построении проекта базы данных SQL выходной артефакт является файлом .dacpac
. Новые и существующие базы данных можно обновить, чтобы соответствовать содержимому базы .dacpac
данных, публикуя .dacpac
ее в целевую базу данных.
Платформа проектов базы данных SQL вокруг кода базы данных, которая добавляет две базовые возможности в этот набор файлов с его процессом сборки:
- проверка ссылок между объектами и синтаксисом для конкретной версии SQL
- развертывание артефакта сборки в новых или существующих базах данных
Функциональные возможности проектов базы данных SQL предоставляются библиотекой Microsoft.SqlServer.DacFx .NET и представлены в нескольких средствах разработки SQL. DacFx имеет несколько точек расширяемости, таких как изменение шагов развертывания и возможность создания пользовательских правил для анализа кода. Пакет SDK для проектов SQL — Microsoft.Build.Sql, который в настоящее время доступен в предварительной версии и рекомендуется для новой разработки.
Проверка
При построении проекта SQL проверяются связи между объектами. Например, определение представления не может содержать таблицу или столбцы, которые не существуют в проекте SQL.
Кроме того, проект SQL содержит свойство в файле .sqlproj
под названием "целевая платформа". Эти сведения используются во время процесса сборки для проверки того, существуют ли функции и синтаксис T-SQL в этой версии SQL. Например, функции JSON, добавленные в SQL Server 2022, нельзя использовать в проекте SQL, заданном целевой платформой Sql140 (SQL Server 2017).
Чтобы создать проект SQL, мы запускаем dotnet build из командной строки. В графических инструментах, поддерживающих проекты SQL (Azure Data Studio, VS Code и Visual Studio), есть пункт меню для создания проекта SQL.
Выходные данные консоли процесса сборки могут содержать ошибки (сбой сборки) или предупреждения. Предупреждения сборки могут включать несогласованное регистрирование в именах объектов и другие настраиваемые рекомендации, но не завершайте сборку.
Выходные данные артефакта процесса сборки — это .dacpac
файл, который можно найти для сборки с параметрами по умолчанию в папке bin/Debug
.
Развертывание
Выходной файл, используемый .dacpac
, является мощным, повторно используемым и декларативным артефактом. С помощью этого файла можно использовать SqlPackage или другие средства для применения кода базы данных к базе данных. Команда SqlPackage для развертывания .dacpac
является командой публикации.
Например, sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}
.
Новые базы данных
SqlPackage перемещает связи объектов для создания каждого объекта в правильном порядке при публикации dacpac в новой базе данных. Например, SqlPackage создает Table_A перед Table_B, если Table_B имеет внешний ключ для Table_A.
Вы не хотите выполнять всю папку скриптов SQL, особенно если вы можете использовать проекты SQL, которые автоматически выполняют каждый раздел T-SQL в правильном порядке на основе связей объектов.
Существующие базы данных
Помимо навигации по иерархии объектов при публикации в новых базах данных, .dacpac
процесс публикации также вычисляет разницу между источником .dacpac
и целевой базой данных перед определением действий, которые необходимо предпринять для обновления этой базы данных. Например, если Table_C отсутствует два столбца в базе данных, которая находится в проекте SQL и StoredProcedure_A была изменена, SqlPackage создает ALTER TABLE
инструкцию и ALTER PROCEDURE
инструкцию вместо слепой попытки создать кучу объектов.
Гибкость, предоставляемая командой публикации для существующих баз данных, не ограничивается одной базой данных. Его .dacpac
можно развернуть несколько раз, например при обновлении парка сотен баз данных.
Когда использовать
Проекты базы данных SQL отлично подходят для команд, которые хотят интегрировать разработку баз данных в рабочий процесс CI/CD. Декларативный характер проектов SQL позволяет использовать один источник истины для схемы базы данных, а процесс сборки и публикации обеспечивает повторяющийся и надежный способ развертывания изменений в базах данных.
Проекты базы данных SQL используются для отслеживания источника истины для состояния базы данных, включая разработку с помощью реляционного средства сопоставления объектов (ORM), например EF Core. Графическое средство или командная строка можно использовать для извлечения схемы базы данных в проект SQL независимо от ORM, используемого для создания базы данных.
Проекты базы данных SQL поддерживают семейство баз данных SQL Server и Azure SQL, включая База данных SQL Azure и Azure Synapse Analytics. Независимо от того, разрабатываете ли вы приложение или хранилище данных, проекты базы данных SQL можно использовать для управления схемой базы данных. Проекты SQL можно разрабатывать из средств в Visual Studio, VS Code и Azure Data Studio.
Исходные проекты и проекты в стиле SDK (предварительная версия)
Исходный формат проекта SQL основан на MSBuild (платформа .NET Framework) и является форматом, используемым SQL Server Data Tools в Visual Studio. Формат проекта в стиле ПАКЕТА SDK основан на новых проектах пакета SDK, представленных в .NET Core, и используется расширением База данных SQL Projects для Azure Data Studio и VS Code. Поддержка проектов SQL в стиле ПАКЕТА SDK в Visual Studio находится в стратегии.
Новая работа по разработке должна рассмотреть возможность использования формата проекта в стиле ПАКЕТА SDK, так как это формат, который будет поддерживаться в будущем. Формат проекта в стиле ПАКЕТА SDK является более гибким и содержит новые функции, недоступные в исходных проектах SQL:
- Поддержка .NET 8 (кроссплатформенная)
- Ссылки на пакеты NuGet для ссылок на базы данных
- Шаблон globbing по умолчанию для .sql файлов в проекте
Проекты в стиле SDK имеют супермножество функций из исходных проектов SQL, а существующие проекты SQL можно преобразовать в проекты в стиле SDK путем изменения файла проекта. Исключением для покрытия функциональных возможностей является поддержка объектов SQLCLR, которые требуют платформа .NET Framework и не поддерживаются в проектах в стиле SDK.