Руководство. Хранение схемы базы данных в Git

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

Хранение схемы базы данных в Git обеспечивает несколько преимуществ, включая управление версиями, совместную работу и возможность отслеживать изменения с течением времени. Этот подход особенно полезен для разработки по принципу code-first, когда вы определяете схему базы данных в коде и применяете изменения напрямую в среде разработки с помощью ORM или ИИ-ассистента для программирования, такого как GitHub Copilot.

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

  • Создание проекта SQL из существующей базы данных
  • Фиксация и отправка кода базы данных в удаленный репозиторий Git
  • Применение изменений из базы данных к существующему коду
  • Извлеките изменения из удаленного репозитория Git и примените их к локальной базе данных (необязательно)

Схема, демонстрирующая поток информации в учебном руководстве.

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

Замечание

Чтобы завершить работу с руководством, необходимо получить доступ к базе данных SQL. Вы можете бесплатно вести локальную разработку, используя SQL Server Developer Edition в Windows или в контейнерах.

Необходимые условия

Предупреждение

Это руководство недоступно для проектов в стиле SDK (предварительная версия) в Visual Studio 2022. Вместо этого используйте SQL Server Management Studio (SSMS) или Visual Studio Code.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

Шаг 1. Создание проекта SQL из существующей базы данных

Для представления базы данных в системе контроля версий используйте формат проекта базы данных SQL. Проект включает файлы .sql для каждого объекта базы данных и .sqlproj с параметрами базы данных. Когда вы просматриваете проект в проводнике файлов и системе контроля версий, структура SQL-проекта отражает структуру базы данных в обозревателе объектов.

В Visual Studio SQL Server обозреватель объектов щелкните правой кнопкой мыши базу данных, из которой вы хотите создать project и выберите Create New Project... .

Снимок экрана: диалоговое окно импорта базы данных в Visual Studio.

В диалоговом окне Create New Project введите имя project. Имя проекта не обязательно совпадает с именем базы данных. Проверьте и измените расположение проекта по мере необходимости. Параметры импорта по умолчанию импортируют объекты в папки по схеме, а затем тип объекта. Параметры импорта можно изменить, чтобы изменить структуру папок или включить разрешения в импортируемые объекты. Запустите импорт.

В диалоговом окне "Импорт базы данных " отображается ход импорта в виде сообщений. После завершения импорта можно увидеть импортированные объекты в Обозреватель решений. Процесс сохраняет журналы в файле в каталоге проекта под Import Schema Logs. Нажмите кнопку Готово.

Предупреждение

Это руководство недоступно для проектов в стиле SDK (предварительная версия) в Visual Studio 2022. Вместо этого используйте SQL Server Management Studio (SSMS) или Visual Studio Code.

В представлении обозревателя объектов базы данных в Visual Studio Code выберите базу данных, из которой вы хотите создать проект. Щелкните правой кнопкой мыши базу данных и выберите "Создать проект из базы данных".

Снимок экрана диалогового окна

В Visual Studio Code диалоговое окно Создание проекта из базы данных требует указания имени и расположения проекта. Параметры импорта по умолчанию импортируют объекты в папки по схеме, а затем тип объекта. Вы можете выбрать другую структуру папок или включить разрешения в импортируемые объекты перед нажатием кнопки "Создать".

Откройте представление "Проекты базы данных", чтобы просмотреть новый проект и импортированные определения объектов.

В обозреватель объектов в SQL Server Management Studio щелкните правой кнопкой мыши базу данных, из которой нужно создать project, и выберите "Создать Project из базы данных... в меню "Задачи".

Снимок экрана диалогового окна «Новый проект SQL» из раздела «База данных» в SQL Server Management Studio.

В диалоговом окне "Создание SQL Project из базы данных" проверьте выбранную базу данных и измените имя и расположение project по мере необходимости. Новый проект создается на основе объектов из выбранной базы данных, которые затем распределяются по папкам сначала по схемам, а затем по типу объекта.

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

Используйте интерфейс командной строки SqlPackage для извлечения схемы существующей базы данных в проект SQL. Следующая команда SqlPackage извлекает схему базы данных в полный проект SQL. Файлы .sql организованы по вложенным папкам схем и типов объектов, а для управления проектом создаётся файл .sqlproj со свойствами, значения которых соответствуют параметрам базы данных.

sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject

Шаг 2. Фиксация и отправка кода базы данных в удаленный репозиторий Git

После создания проекта SQL запустите временную шкалу Git для базы данных в локальном репозитории Git.

При открытии проекта SQL в Visual Studio создайте локальный репозиторий Git и отправьте его в удаленный.

  1. Выберите Git>Создать репозиторий Git в строке меню.

  2. В диалоговом окне "Создание репозитория Git" в разделе "Отправка в новый удаленный раздел" выберите GitHub или Azure DevOps. Если вы решили отправить изменения в GitHub, войдите в свою учетную запись GitHub, когда появится соответствующий запрос. Если выбрать Azure DevOps, войдите в учетную запись Azure DevOps и выберите или создайте проект.

  3. Введите имя и описание репозитория. Убедитесь, что шаблон .gitignore имеет значение VisualStudio и выберите "Создать и отправить".

Visual Studio создает локальный репозиторий Git, выполняет первый коммит с файлами SQL-проекта и отправляет его в удаленный репозиторий.

Чтобы убедиться, что код был успешно отправлен, откройте браузер и перейдите в репозиторий на GitHub (https://github.com) или Azure DevOps (https://dev.azure.com). Вы увидите файлы проекта SQL, включая .sqlproj файл и .sql определения объектов.

Дополнительные сведения см. в разделе "О Git" в Visual Studio.

Предупреждение

Это руководство недоступно для проектов в стиле SDK (предварительная версия) в Visual Studio 2022. Вместо этого используйте SQL Server Management Studio (SSMS) или Visual Studio Code.

Открыв папку проекта SQL в Visual Studio Code, инициализируйте локальный репозиторий Git и отправьте его в удаленный.

  1. Откройте представление системы управления версиями, выбрав значок системы управления версиями на панели действий или нажмите клавишу Ctrl+Shift+G.

  2. Выберите "Инициализировать репозиторий" , чтобы создать новый репозиторий Git в текущей папке.

  3. Все файлы проекта отображаются как неотслеживаемые изменения. Выберите значок + рядом с Изменения, чтобы добавить все файлы в индекс.

  4. Введите сообщение фиксации, например Initial commit of SQL project в поле ввода сообщения, и нажмите кнопку "Фиксация " (значок флажка).

  5. Выберите Опубликовать ветвь в представлении "Управление версиями", чтобы отправить изменения из локального репозитория в удаленный репозиторий. Выберите, где опубликовать: в GitHub или Azure DevOps, и следуйте инструкциям для входа. Выберите видимость репозитория (общедоступная или частная) и подтвердите.

Чтобы убедиться, что код был успешно отправлен, откройте браузер и перейдите в репозиторий на GitHub (https://github.com) или Azure DevOps (https://dev.azure.com). Вы увидите файлы проекта SQL, включая .sqlproj файл и .sql определения объектов.

Дополнительные сведения см. в разделе "Управление версиями" в Visual Studio Code.

При открытии проекта SQL в SQL Server Management Studio создайте локальный репозиторий Git и отправьте его в удаленный.

  1. Выберите Git>Create Git Repository в строке меню.

  2. В диалоговом окне "Создание репозитория Git" в разделе "Отправка в новый удаленный раздел" выберите GitHub или Azure DevOps. Если вы решили отправить изменения в GitHub, войдите в свою учетную запись GitHub, когда появится соответствующий запрос. Если выбрать Azure DevOps, войдите в учетную запись Azure DevOps и выберите или создайте проект.

  3. Введите имя и описание репозитория. Убедитесь, что шаблон .gitignore имеет значение VisualStudio и выберите "Создать и отправить".

SSMS создает локальный репозиторий Git, выполняет первый коммит с файлами вашего проекта SQL и отправляет его в удаленный репозиторий.

Чтобы убедиться, что код был успешно отправлен, откройте браузер и перейдите в репозиторий на GitHub (https://github.com) или Azure DevOps (https://dev.azure.com). Вы увидите файлы проекта SQL, включая .sqlproj файл и .sql определения объектов.

Дополнительные сведения см. в разделе "О Git" в Visual Studio.

В каталоге проекта SQL инициализируйте локальный репозиторий Git, зафиксируйте все файлы и отправьте их в удалённый репозиторий.

  1. Инициализируйте новый репозиторий Git, добавьте файл .gitignore и выполните первый коммит:

    cd MyDatabaseProject
    git init
    dotnet new gitignore
    git add .
    git commit -m "Initial commit of SQL project"
    
  2. Создайте удаленный репозиторий в GitHub или Azure DevOps:

    • GitHub. Перейдите к https://github.com/new новому репозиторию и создайте его. Не инициализируйте его с файлом README, .gitignore или лицензией.
    • Azure DevOps. Перейдите к проекту Azure DevOps, выберите Repos и создайте новый репозиторий. Снимите флажок "Добавить README".
  3. Добавьте удаленную и отправьте начальную фиксацию:

    git remote add origin <your-repository-url>
    git push -u origin main
    

    Замените <your-repository-url> на URL-адрес, предоставленный GitHub или Azure DevOps при создании репозитория.

Чтобы убедиться, что код успешно отправлен, откройте браузер и перейдите в репозиторий. Вы увидите файлы проекта SQL, включая .sqlproj файл и .sql определения объектов.

Шаг 3. Применение изменений из базы данных к существующему коду

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

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

  1. В SQL Server обозреватель объектов щелкните правой кнопкой мыши базу данных и выберите "Сравнение схем".

  2. В окне "Сравнение схем " база данных устанавливается в качестве источника. Выберите раскрывающийся список Выбрать цель и выберите Выбрать цель.

  3. В диалоговом окне Select Target Schema выберите Project и укажите ваш проект базы данных SQL. Нажмите ОК.

  4. Нажмите кнопку Сравнить , чтобы выполнить сравнение. Результаты отображают различия между базой данных (источником) и проектом (целевым объектом).

  5. Просмотрите различия. Снимите флажок изменений, которые вы не хотите применить к проекту.

  6. Выберите "Обновить", чтобы применить выбранные изменения к проекту SQL.

Файлы проекта обновляются, чтобы соответствовать схеме базы данных. Просмотрите изменения в окне Git Changes, введите сообщение коммита и выберите Зафиксировать все. Нажмите кнопку Push , чтобы отправить изменения в удаленный репозиторий.

Предупреждение

Это руководство недоступно для проектов в стиле SDK (предварительная версия) в Visual Studio 2022. Вместо этого используйте SQL Server Management Studio (SSMS) или Visual Studio Code.

Используйте команду Update Project from Database, чтобы обновить проект SQL из базы данных.

  1. В обозревателе объектов баз данных щелкните правой кнопкой мыши по базе данных и выберите Проекты баз данных SQL>Обновить проект из базы данных.

  2. Выберите проект базы данных SQL для обновления и подтверждения.

  3. Выполняется сравнение, и изменения из базы данных применяются в проект. Обновленные .sql файлы отображаются в представлении Source Control как измененные файлы.

Просмотрите изменения в представлении Контроль версий, подготовьте измененные файлы, введите сообщение коммита и нажмите Commit. Выберите "Синхронизировать изменения" , чтобы отправить фиксацию в удаленный репозиторий.

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

  1. В обозреватель объектов щелкните правой кнопкой мыши по базе данных и выберите Задачи>Сравнение схем (предварительная версия).

  2. В окне "Сравнение схем " база данных устанавливается в качестве источника. Нажмите кнопку многоточия в поле целевого объекта и выберите свой проект базы данных SQL в качестве целевого объекта.

  3. Нажмите кнопку Сравнить , чтобы выполнить сравнение. Результаты отображают различия между базой данных (источником) и проектом (целевым объектом).

  4. Просмотрите различия. Снимите флажок изменений, которые вы не хотите применить к проекту.

  5. Нажмите кнопку "Применить" , чтобы применить выбранные изменения к проекту SQL.

Файлы проекта обновляются, чтобы соответствовать схеме базы данных. Просмотрите изменения в окне Git Changes, введите сообщение коммита и выберите Commit All. Нажмите кнопку Push , чтобы отправить изменения в удаленный репозиторий.

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

  1. Удалите существующие файлы объектов SQL и повторно создайте проект:

    rm -rf MyDatabaseProject
    sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject
    
  2. Просмотрите изменения с помощью Git и зафиксируйте:

    cd MyDatabaseProject
    dotnet new gitignore
    git add .
    git status
    git commit -m "Update project from database changes"
    git push
    

Шаг 4. Извлечение изменений из удаленного репозитория Git (необязательно) и применение их к локальной базе данных

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

  1. Выберите Git>Pull из строки меню, чтобы извлечь последние изменения из удаленного репозитория.

  2. В Обозреватель решений щелкните правой кнопкой мыши узел проекта базы данных SQL и выберите "Сравнение схем".

  3. В окне "Сравнение схем " проект устанавливается в качестве источника. Выберите раскрывающийся список Выбрать цель и выберите Выбрать цель.

  4. В диалоговом окне выбора целевой схемы выберите базу данных и выберите подключение к локальной базе данных разработки. Нажмите ОК.

  5. Нажмите кнопку Сравнить , чтобы выполнить сравнение. Результаты отображают различия между проектом (источником) и базой данных (целевой).

  6. Просмотрите различия, чтобы проверить ожидаемые изменения.

  7. Выберите "Обновить", чтобы применить изменения к базе данных.

Предупреждение

Это руководство недоступно для проектов в стиле SDK (предварительная версия) в Visual Studio 2022. Вместо этого используйте SQL Server Management Studio (SSMS) или Visual Studio Code.

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

  2. В представлении "Проекты баз данных " щелкните правой кнопкой мыши проект базы данных SQL и выберите "Сравнение схем".

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

  4. Нажмите кнопку Сравнить , чтобы выполнить сравнение. Результаты отображают различия между проектом (источником) и базой данных (целевой).

  5. Просмотрите различия, чтобы проверить ожидаемые изменения.

  6. Нажмите кнопку "Применить" , чтобы применить изменения к базе данных.

  1. Откройте терминал и запустите git pull в каталоге проекта, чтобы извлечь последние изменения из удаленного репозитория.

  2. В Обозреватель решений щелкните правой кнопкой мыши узел проекта базы данных SQL и выберите "Сравнение схем( предварительная версия)".

  3. В окне "Сравнение схем " проект устанавливается в качестве источника. Выберите целевой объект и выберите подключение к локальной базе данных разработки.

  4. Нажмите кнопку Сравнить , чтобы выполнить сравнение. Результаты отображают различия между проектом (источником) и базой данных (целевой).

  5. Просмотрите различия, чтобы проверить ожидаемые изменения.

  6. Нажмите кнопку "Применить" , чтобы применить изменения к базе данных.

  1. Извлеките последние изменения из удаленного репозитория:

    cd MyDatabaseProject
    git pull
    
  2. Выполните сборку проекта, чтобы убедиться, что изменения успешно скомпилируются:

    dotnet build
    
  3. Разверните изменения в локальной базе данных разработки с помощью SqlPackage:

    sqlpackage /a:Publish /sf:bin/Debug/MyDatabaseProject.dacpac /tsn:localhost /tdn:MyDatabase
    

    Замените MyDatabaseProject.dacpac именем вашего .dacpac выходного файла и при необходимости обновите значения целевого сервера (/tsn) и базы данных (/tdn).