Bagikan melalui


Apa itu proyek database SQL?

Berlaku untuk: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance

Proyek database SQL adalah representasi lokal objek SQL yang terdiri dari skema untuk database tunggal, seperti tabel, prosedur tersimpan, atau fungsi. Siklus pengembangan proyek database SQL memungkinkan pengembangan database diintegrasikan ke dalam alur kerja integrasi berkelanjutan dan penyebaran berkelanjutan (CI/CD) yang akrab sebagai praktik terbaik pengembangan.

Gambaran Umum

Proyek SQL didasarkan pada pernyataan T-SQL deklaratif. Dalam kode proyek database SQL, Anda membuat setiap objek sekali. Jika Anda perlu mengubah sesuatu tentang objek tersebut, seperti menambahkan kolom atau mengubah jenis data, Anda mengubah file tunggal yang mendeklarasikan objek untuk waktu pertama dan satu-satunya.

Saat proyek database SQL dibangun, artefak output adalah .dacpac file. Database baru dan yang sudah ada dapat diperbarui agar sesuai dengan konten .dacpac dengan menerbitkan .dacpac ke database target.

Kerangka kerja proyek database SQL di sekitar kode database Anda yang menambahkan dua kemampuan dasar ke kumpulan file tersebut dengan proses build-nya:

  • validasi referensi antara objek dan sintaks terhadap versi SQL tertentu
  • penyebaran artefak build ke database baru atau yang sudah ada

Cuplikan layar Ringkasan Proyek Database SQL yang berisi skrip pra-penyebaran dan pasca-penyebaran serta objek database.

Fungsionalitas untuk proyek database SQL disediakan oleh pustaka .NET Microsoft.SqlServer.DacFx dan muncul dalam beberapa alat untuk pengembangan SQL. DacFx memiliki beberapa titik ekstensibilitas, seperti modifikasi langkah penyebaran dan kemampuan untuk membuat aturan kustom untuk analisis kode. Proyek SDK untuk proyek SQL adalah Microsoft.Build.Sql, saat ini tersedia dalam pratinjau dan disarankan untuk pengembangan baru.

Validasi

Saat proyek SQL dibangun, hubungan antara objek divalidasi. Misalnya, definisi tampilan tidak boleh berisi tabel atau kolom yang tidak ada di proyek SQL.

Selain itu, proyek SQL berisi properti dalam filenya .sqlproj yang disebut "platform target". Informasi ini digunakan selama proses build untuk memvalidasi bahwa fungsi dan sintaks T-SQL ada dalam versi SQL tersebut. Misalnya, fungsi JSON yang ditambahkan di SQL Server 2022 tidak dapat digunakan dalam proyek SQL yang diatur ke platform target Sql140 (SQL Server 2017).

Untuk membangun proyek SQL, kami menjalankan build dotnet dari baris perintah. Dalam alat grafis yang mendukung proyek SQL (Azure Data Studio, VS Code, dan Visual Studio), ada item menu untuk membangun proyek SQL.

Output konsol dari proses build mungkin berisi kesalahan (kegagalan build) atau peringatan. Peringatan build dapat mencakup casing yang tidak konsisten dalam nama objek dan praktik terbaik lain yang dapat disesuaikan, tetapi jangan gagal membangun.

Output artefak dari proses build adalah .dacpac file, yang dapat ditemukan untuk build dengan pengaturan default di bin/Debug folder.

Penyebaran

File output, .dacpac, adalah artefak yang kuat, dapat digunakan kembali, dan deklaratif. Dengan file ini, kita dapat menggunakan SqlPackage atau alat lain untuk menerapkan kode database kita ke database. Perintah SqlPackage untuk menyebarkan adalah .dacpac perintah terbitkan.

Cuplikan layar Gambaran Umum proses dari build proyek SQL ke dacpac dan sebarkan ke database.

Contohnya,sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}.

Database baru

SqlPackage menavigasi hubungan objek untuk membuat setiap objek dalam urutan yang tepat saat menerbitkan dacpac ke database baru. Misalnya, SqlPackage membuat Table_A sebelum Table_B ketika Table_B memiliki kunci asing untuk Table_A.

Anda tidak ingin menjalankan seluruh folder skrip SQL, terutama ketika Anda dapat menggunakan proyek SQL yang secara otomatis menjalankan setiap bagian T-SQL dalam urutan yang tepat berdasarkan hubungan objek.

Database yang sudah ada

Selain menavigasi hierarki objek saat menerbitkan ke database baru, .dacpac proses penerbitan juga menghitung perbedaan antara database sumber .dacpac dan target sebelum menentukan langkah apa yang perlu dilakukan untuk memperbarui database tersebut. Misalnya, jika Table_C kehilangan dua kolom dalam database yang dimilikinya dalam proyek SQL dan StoredProcedure_A diubah, SqlPackage membuat ALTER TABLE pernyataan dan ALTER PROCEDURE pernyataan alih-alih mencoba membuat sekelompok objek secara membabi buta.

Cuplikan layar Contoh mengubah pernyataan tabel yang dihitung oleh penyebaran.

Fleksibilitas yang disediakan oleh perintah terbitkan ke database yang ada tidak terbatas pada satu database. Seseorang .dacpac dapat disebarkan beberapa kali, seperti saat meningkatkan armada seratus database.

Waktu menggunakan

Proyek database SQL sangat cocok untuk tim yang ingin mengintegrasikan pengembangan database ke dalam alur kerja CI/CD. Sifat deklaratif proyek SQL memungkinkan satu sumber kebenaran untuk skema database, dan proses build dan penerbitan menyediakan cara yang dapat diulang dan dapat diandalkan untuk menyebarkan perubahan pada database.

Proyek database SQL digunakan untuk melacak sumber kebenaran untuk status database, termasuk pengembangan dengan pemeta hubungan objek (ORM) seperti EF Core. Baik alat grafis atau baris perintah dapat digunakan untuk mengekstrak skema database ke proyek SQL, terlepas dari ORM yang digunakan untuk membuat database.

Cuplikan layar VISUAL Code dengan proyek AdventureWorks SQL terbuka, menampilkan tabel di editor.

Proyek database SQL mendukung keluarga database SQL Server dan Azure SQL, termasuk Azure SQL Database dan Azure Synapse Analytics. Baik Anda mengembangkan aplikasi atau gudang data, proyek database SQL dapat digunakan untuk mengelola skema database Anda. Proyek SQL dapat dikembangkan dari alat di Visual Studio, VS Code, dan Azure Data Studio.

Proyek asli vs proyek bergaya SDK (pratinjau)

Format proyek SQL asli didasarkan pada MSBuild (.NET Framework) dan merupakan format yang digunakan oleh SQL Server Data Tools di Visual Studio. Format proyek bergaya SDK didasarkan pada proyek gaya SDK baru yang diperkenalkan dalam .NET Core dan merupakan format yang digunakan oleh ekstensi Proyek SQL Database untuk Azure Data Studio dan VS Code. Dukungan untuk proyek SQL bergaya SDK di Visual Studio ada di peta strategi.

Pekerjaan pengembangan baru harus mempertimbangkan untuk menggunakan format proyek gaya SDK, karena ini adalah format yang akan didukung di masa mendatang. Format proyek bergaya SDK lebih fleksibel dan berisi fitur baru yang tidak tersedia dengan proyek SQL asli:

  • Dukungan .NET 8 (lintas platform)
  • Referensi paket NuGet untuk referensi database
  • Pola globbing default untuk file .sql dalam proyek

Proyek bergaya SDK memiliki superset fungsionalitas dari proyek SQL asli dan proyek SQL yang ada dapat dikonversi ke proyek bergaya SDK melalui modifikasi file proyek. Pengecualian untuk cakupan fungsionalitas adalah dukungan untuk objek SQLCLR, yang memerlukan .NET Framework dan tidak didukung dalam proyek bergaya SDK.