Co to są projekty bazy danych SQL?
Dotyczy: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database w Microsoft Fabric
Projekt bazy danych SQL to lokalna reprezentacja obiektów SQL, które składają się na schemat pojedynczej bazy danych, takich jak tabele, procedury składowane lub funkcje. Cykl programowania projektu bazy danych SQL umożliwia zintegrowanie programowania bazy danych z przepływami pracy ciągłej integracji i ciągłego wdrażania (CI/CD) znanymi jako najlepsze rozwiązanie programistyczne.
Przegląd
Projekty SQL są oparte na deklaratywnych instrukcjach języka T-SQL. W kodzie projektu bazy danych SQL każdy obiekt jest tworzony raz. Jeśli musisz zmienić coś o tym obiekcie, na przykład dodać kolumny lub zmienić typ danych, zmodyfikujesz pojedynczy plik, który deklaruje obiekt po raz pierwszy i tylko raz.
Po utworzeniu projektu bazy danych SQL artefakt wyjściowy jest plikiem .dacpac
. Nowe i istniejące bazy danych można zaktualizować tak, aby były zgodne z zawartością .dacpac
, publikując .dacpac
w docelowej bazie danych.
Struktura projektów bazy danych SQL wokół kodu bazy danych, która dodaje do tego zestawu plików dwa podstawowe możliwości procesu kompilacji:
- sprawdzanie poprawności odwołań między obiektami i składnią względem określonej wersji języka SQL
- wdrożenie artefaktu kompilacji do nowych lub istniejących baz danych
Funkcjonalność projektów bazy danych SQL jest udostępniana przez bibliotekę Microsoft.SqlServer.DacFx .NET i jest udostępniana w kilku narzędziach do programowania SQL. DacFx ma wiele punktów rozszerzalności, takich jak modyfikacja kroków wdrażania i możliwość tworzenia niestandardowych reguł na potrzeby analizy kodu. Zestaw SDK projektu dla projektów SQL to Microsoft.Build.Sql, obecnie dostępny w wersji zapoznawczej i zalecany do nowych zastosowań programistycznych.
Walidacja
Po skompilowanym projekcie SQL relacje między obiektami są weryfikowane. Na przykład definicja widoku nie może zawierać tabeli ani kolumn, które nie istnieją w projekcie SQL.
Ponadto projekt SQL zawiera właściwość w pliku .sqlproj
o nazwie "platforma docelowa". Te informacje są używane podczas procesu kompilacji w celu sprawdzenia, czy funkcje i składnia języka T-SQL istnieją w tej wersji języka SQL. Na przykład funkcje JSON dodane w programie SQL Server 2022 nie mogą być używane w projekcie SQL ustawionym na platformę docelową Sql140 (SQL Server 2017).
Aby skompilować projekt SQL, uruchomimy kompilację dotnet z wiersza polecenia. W narzędziach graficznych obsługujących projekty SQL (Azure Data Studio, VS Code i Visual Studio) istnieje element menu umożliwiający skompilowanie projektu SQL.
Dane wyjściowe konsoli procesu kompilacji mogą zawierać błędy (niepowodzenie kompilacji) lub ostrzeżenia. Ostrzeżenia kompilacji mogą zawierać niespójne wielkości liter w nazwach obiektów i inne dostosowywalne najlepsze rozwiązania, ale nie kończą się niepowodzeniem kompilacji.
Wynik procesu kompilacji to artefakt w postaci pliku .dacpac
, który można znaleźć dla kompilacji z domyślnymi ustawieniami w folderze bin/Debug
.
Wdrażania
Plik wyjściowy, .dacpac
, jest zaawansowanym, wielokrotnego użytku i deklaratywnym artefaktem. Za pomocą tego pliku możemy użyć SqlPackage lub innych narzędzi , aby zastosować nasz kod bazy danych do bazy danych. Polecenie SqlPackage służące do wdrażania .dacpac
to polecenie publikowania.
Na przykład sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}
.
Nowe bazy danych
Pakiet SqlPackage umożliwia nawigowanie po relacjach obiektów w celu utworzenia każdego obiektu w odpowiedniej kolejności podczas publikowania pakietu dacpac w nowej bazie danych. Na przykład pakiet SqlPackage tworzy Table_A przed Table_B, gdy Table_B ma klucz obcy do Table_A.
Nie chcesz wykonywać całego folderu skryptów SQL, szczególnie wtedy, gdy można używać projektów SQL, które automatycznie wykonują każdą sekcję języka T-SQL w odpowiedniej kolejności na podstawie relacji obiektów.
Istniejące bazy danych
Oprócz nawigowania w hierarchii obiektów podczas publikowania w nowych bazach danych proces publikowania .dacpac
oblicza również różnicę między .dacpac
źródłowym a docelową bazą danych przed określeniem, jakie kroki należy wykonać w celu zaktualizowania tej bazy danych. Jeśli na przykład w Table_C brakuje dwóch kolumn, które ma w projekcie SQL, i jeśli StoredProcedure_A została zmieniona, pakiet SqlPackage tworzy instrukcję ALTER TABLE
oraz ALTER PROCEDURE
, zamiast bez zastanowienia próbować utworzyć wiele obiektów.
Elastyczność zapewniana przez polecenie publikowania w istniejących bazach danych nie jest ograniczona do pojedynczej bazy danych. Jeden .dacpac
można wdrożyć wiele razy, na przykład podczas uaktualniania floty setek baz danych.
Kiedy należy używać
Projekty baz danych SQL doskonale nadają się do zespołów, które chcą zintegrować rozwój baz danych z procesem CI/CD. Deklaratywny charakter projektów SQL umożliwia pojedyncze źródło prawdy dla schematu bazy danych, a proces kompilacji i publikowania zapewnia powtarzalny i niezawodny sposób wdrażania zmian w bazach danych.
Projekty bazy danych SQL służą do weryfikacji zgodności z prawdą dla stanu bazy danych, w tym rozwoju przy użyciu mapera obiektowo-relacyjnego (ORM), takiego jak EF Core. Narzędzie graficzne lub wiersz polecenia może służyć do wyodrębniania schematu bazy danych do projektu SQL, niezależnie od orm używanego do utworzenia bazy danych.
Projekty bazy danych SQL obsługują program SQL Server i rodzinę baz danych Azure SQL, w tym usługi Azure SQL Database i Azure Synapse Analytics. Niezależnie od tego, czy tworzysz aplikację, czy magazyn danych, projekty bazy danych SQL mogą służyć do zarządzania schematem bazy danych. Projekty SQL można opracowywać na podstawie narzędzi w programach Visual Studio, VS Code i Azure Data Studio.
Oryginalne projekty a projekty w stylu zestawu SDK (wersja zapoznawcza)
Oryginalny format projektu SQL jest oparty na programie MSBuild (.NET Framework) i jest formatem używanym przez narzędzia SQL Server Data Tools w programie Visual Studio. Format projektu w stylu zestawu SDK jest oparty na nowych projektach w stylu zestawu SDK wprowadzonych na platformie .NET Core i jest formatem używanym przez rozszerzenie SQL Database Projects dla programu Azure Data Studio i VS Code. Obsługa projektów SQL w stylu zestawu SDK w programie Visual Studio znajduje się w harmonogramie działania .
Nowe prace programistyczne powinny rozważyć użycie formatu projektu w stylu zestawu SDK, ponieważ jest to format, który będzie obsługiwany w przyszłości. Format projektu w stylu zestawu SDK jest bardziej elastyczny i zawiera nowe funkcje niedostępne w oryginalnych projektach SQL:
- Obsługa platformy .NET 8 (międzyplatformowa)
- Pakiet NuGet zawiera odwołania przeznaczone do odwołań do bazy danych.
- Domyślny wzorzec globbingu dla plików .sql w projekcie
Projekty w stylu SDK mają bardziej rozbudowany zestaw funkcji niż oryginalne projekty SQL, a można przekonwertować istniejące projekty SQL na projekty w stylu SDK za pomocą modyfikacji pliku projektu.
Wyjątkiem od pokrycia funkcjonalności jest obsługa obiektów SQLCLR, które wymagają programu .NET Framework. Projekt zawierający obiekty SQLCLR można przekonwertować na projekt w stylu zestawu SDK, ale projekt wymaga programu .NET Framework i musi być zbudowany w programie Visual Studio w systemie Windows. Po skompilowaniu projektu z obiektem SQLCLR można wdrożyć .dacpac
za pomocą pakietu SqlPackage na platformie .NET i programie .NET Framework i można go użyć jako odwołania .dacpac
w projekcie (zarówno tej samej bazy danych, jak i tego samego serwera innej bazy danych).
Powiązana zawartość
- Project-Oriented tworzenie bazy danych w trybie offline
- rozszerzenie SQL Database Projects
- SqlPackage
- Przykładowe potoki CI/CD dla projektów SQL
- GitHub sql-action
- wdrożenia SQL Azure DevOps
- aplikacje warstwy danych (DAC)
- repozytorium opinii DacFx
- Rozpoczynanie pracy z projektami bazy danych SQL
- Samouczek: tworzenie i wdrażanie projektu SQL