Udostępnij za pośrednictwem


Co to są projekty bazy danych SQL?

Dotyczy: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 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

Zrzut ekranu przedstawiający podsumowanie projektów usługi SQL Database zawierających skrypty przed wdrożeniem i po wdrożeniu, a także obiekty bazy 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.

Zrzut ekranu przedstawiający przegląd procesu z kompilacji projektu SQL do pakietu dacpac i wdrażania w bazie danych.

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.

Zrzut ekranu przykładowej instrukcji „ALTER TABLE” obliczanej przez wdrożenie.

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.

Zrzut ekranu programu VS Code z otwartym projektem AdventureWorks SQL zawierającym tabelę w edytorze.

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).