Aracılığıyla paylaş


SQL veritabanı projeleri nedir?

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

SQL veritabanı projesi, tablolar, saklı yordamlar veya işlevler gibi tek bir veritabanının şemasını oluşturan SQL nesnelerinin yerel bir gösterimidir. SQL veritabanı projesinin geliştirme döngüsü, veritabanı geliştirmenin geliştirme için en iyi yöntem olarak bilinen sürekli tümleştirme ve sürekli dağıtım (CI/CD) iş akışlarıyla tümleştirilmesini sağlar.

Genel bakış

SQL projeleri bildirim temelli T-SQL deyimlerini temel alır. SQL veritabanı proje kodunuzda her nesneyi bir kez oluşturursunuz. Bu nesneyle ilgili sütun ekleme veya veri türünü değiştirme gibi bir şeyi değiştirmeniz gerekiyorsa, nesneyi ilk ve tek kez bildiren tekil dosyayı değiştirirsiniz.

SQL veritabanı projesi oluşturulduğunda, çıkış yapıtı bir .dacpac dosyasıdır. Yeni ve mevcut veritabanları, .dacpac öğesinin bir hedef veritabanına yayımlanmasıyla .dacpac içeriğiyle eşleşecek şekilde güncellenebilir.

SQL veritabanı projeleri, derleme işlemiyle bu dosya kümesine iki temel özellik ekleyen veritabanı kodunuz çerçevesindeki çerçeveyi oluşturur:

  • SQL'in belirli bir sürümüne karşı nesneler ve söz dizimi arasında başvuruların doğrulanması
  • Yeni veya mevcut veritabanlarına derleme bileşeninin dağıtımı

Dağıtım öncesi ve dağıtım sonrası betiklerinin yanı sıra veritabanı nesnelerini içeren SQL Veritabanı Projelerinin Özetinin ekran görüntüsü.

SQL veritabanı projelerinin işlevselliği, Microsoft.SqlServer.DacFx .NET kitaplığı tarafından sağlanır ve SQL geliştirme için birkaçaracında kullanıma sunulur. DacFx, dağıtım adımlarının değiştirilmesi ve kod analizi için özel kurallar oluşturma gibi birden çok genişletilebilirlik noktasına sahiptir. SQL projeleri için proje SDK'sı Microsoft.Build.Sql 'dur, yeni geliştirme için önerilir ve Azure Data Studio ile VS Code için SQL Veritabanı Projeleri uzantısı tarafından kullanılan biçimdir. Visual Studio'da SDK stili SQL projeleri için destek önizleme aşamasındadır.

Doğrulama

Bir SQL projesi oluşturulduğunda, nesneler arasındaki ilişkiler doğrulanır. Örneğin, görünüm tanımı SQL projesinde mevcut olmayan bir tablo veya sütun içeremez.

Ayrıca, bir SQL projesi .sqlproj dosyasında "hedef platform" adlı bir özellik içerir. Bu bilgiler, derleme işlemi sırasında işlevlerin ve T-SQL söz diziminin bu SQL sürümünde mevcut olduğunu doğrulamak için kullanılır. Örneğin, SQL Server 2022'de eklenen JSON işlevleri Sql140 (SQL Server 2017) hedef platformuna ayarlanmış bir SQL projesinde kullanılamaz.

SQL projesi oluşturmak için komut satırından dotnet build komutunu çalıştırıyoruz. SQL projelerini (Azure Data Studio, VS Code ve Visual Studio) destekleyen grafik araçlarda, SQL projesini derlemek için bir menü öğesi vardır.

Derleme işleminin konsol çıkışı hatalar (derleme hatası) veya uyarılar içerebilir. Derleme uyarıları, nesne adlarında tutarsız büyük/küçük harf uyumsuzluğu ve diğerözelleştirilebilir en iyi uygulamaları içerebilir, ancak yapıda hata oluşturmaz.

Derleme işleminin yapıt çıkışı, .dacpac klasöründe varsayılan ayarlara sahip bir derleme için bulunabilen bir bin/Debug dosyasıdır.

Dağıtım

.dacpacçıktı dosyası, güçlü, yeniden kullanılabilir ve deklaratif bir yapıttır. Bu dosyayla, veritabanı kodumuzu bir veritabanına uygulamak için SqlPackage'ı veya diğer araçlarını kullanabiliriz. .dacpac'ı dağıtmak için SqlPackage komutu, yayınla komutudur.

SQL proje derlemesinden dacpac'a ve veritabanına dağıtma işlemine genel bakış ekran görüntüsü.

Örneğin, sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}.

Yeni veritabanları

SqlPackage, yeni bir veritabanına dacpac yayımlarken her nesneyi doğru sırada oluşturmak için nesne ilişkilerine gider. Örneğin, SqlPackage, Table_B'nin Table_A'ya yabancı anahtarı olduğunda Table_A'yı Table_B'den önce oluşturur.

Özellikle her T-SQL bölümünü nesne ilişkilerine göre doğru sırada otomatik olarak yürüten SQL projelerini kullanabiliyorsanız, SQL betikleri klasörünün tamamını yürütmek istemezsiniz.

Mevcut veritabanları

Yeni veritabanlarına yayımlarken nesne hiyerarşisinde gezinmeye ek olarak, .dacpac yayımlama işlemi, veritabanını güncelleştirmek için hangi adımları izlemesi gerektiğini belirlemeden önce kaynak .dacpac ve hedef veritabanı arasındaki farkı da hesaplar. Örneğin, Table_C SQL projesinde bulunan veritabanında iki sütun eksikse ve StoredProcedure_A değiştirildiyse, SqlPackage kör bir şekilde bir grup nesne oluşturmaya çalışmak yerine bir ALTER TABLE deyimi ve bir ALTER PROCEDURE deyimi oluşturur.

Dağıtım tarafından hesaplanan Örnek ALTER TABLE ifadesinin ekran görüntüsü.

Mevcut veritabanlarında yayımla komutu tarafından sağlanan esneklik tek bir veritabanıyla sınırlı değildir. Yüzlerce veritabanından oluşan bir filoyu yükseltirken olduğu gibi, bir .dacpac birden çok kez dağıtılabilir.

Ne zaman kullanılır?

SQL veritabanı projeleri, veritabanı geliştirmeyi bir CI/CD iş akışıyla tümleştirmek isteyen ekipler için çok uygundur. SQL projelerinin bildirim temelli yapısı, veritabanı şeması için tek bir doğru kaynağı sağlar ve derleme ve yayımlama işlemi veritabanlarına değişiklik dağıtmak için yinelenebilir ve güvenilir bir yol sağlar.

SQL veritabanı projeleri, EF Core gibi bir nesne ilişkisel eşleyici (ORM) ile geliştirme de dahil olmak üzere veritabanı durumu için gerçek kaynağını izlemek için kullanılır. Veritabanını oluşturmak için kullanılan ORM'ye bakılmaksızın bir veritabanının şemasını sql projesine ayıklamak için grafik araç veya komut satırı kullanılabilir.

AdventureWorks SQL projesinin açık olduğu VE düzenleyicide bir tablo görüntüleyen VS Code'un ekran görüntüsü.

SQL veritabanı projeleri, Azure SQL Veritabanı ve Azure Synapse Analytics dahil olmak üzere SQL Server ve Azure SQL veritabanı ailesini destekler. İster uygulama ister veri ambarı geliştirin, VERITABANınızın şemasını yönetmek için SQL veritabanı projeleri kullanılabilir. SQL projeleri Visual Studio, VS Code ve Azure Data Studio'da araçlardan geliştirilebilir.

Özgün projeler ile SDK stili projeler karşılaştırması

Microsoft.Build.Sql SDK stili proje biçimi, .NET Core'da kullanıma sunulan yeni SDK stili projeleri temel alır ve Azure Data Studio ve VS Code için SQL Veritabanı Projeleri uzantısı tarafından kullanılan biçimdir. Microsoft.Build.Sql projeleri, MSBuild (.NET Framework) temelinde özgün SQL proje biçiminin yerini alıyor. Visual Studio'da SDK stili SQL projeleri için destek şu anda önizleme aşamasındadır ve hem özgün hem de SDK stilindeki proje biçimleri Visual Studio'da kullanılabilir.

SDK stilindeki projeler gelecekte desteklenecek biçim olduğundan, yeni geliştirme çalışmalarının Microsoft.Build.Sql projelerini kullanmayı göz önünde bulundurması gerekir. SDK stili proje biçimi daha esnektir ve özgün SQL projeleriyle kullanılamayan yeni özellikler içerir:

SDK stilindeki projeler özgün SQL projelerinden bir üst işlev kümesine sahiptir ve mevcut SQL projeleri, proje dosyasınındeğiştirilmesiyle SDK stili projelere dönüştürülebilir.

İşlev kapsamı için özel durum, .NET Framework gerektiren SQLCLR nesneleri için destektir. SQLCLR nesneleri içeren bir proje SDK stilinde bir projeye dönüştürülebilir, ancak proje .NET Framework gerektirir ve Windows üzerinde Visual Studio'da derlenmelidir. SQLCLR nesnesine sahip proje oluşturulduktan sonra, .dacpac .NET ve .NET Framework üzerinde SqlPackage ile dağıtılabilir ve bir projede (aynı veritabanı veya aynı sunucu farklı veritabanı) .dacpac başvurusu olarak kullanılabilir.