İlk başta gönderildiğinden beri bu sorunun cevabını nasıl yapılandıracağım. VS2010 için durum, aletin özelliklerini ve faydalarını tanımlamakla ilgili olmadığı için zor. Bu, okuyucuyu veri tabanı geliştirme yaklaşımlarında temel bir değişiklik yapmaya ikna etmekle ilgilidir. Kolay değil.
Bu sorunun cevabını DBA, geliştirici / dba ve hem OLTP hem de veri depolamayı kapsayan bir arka plan karması ile tecrübeli veritabanı uzmanlarından yanıtlar bulabilirsiniz. Tek bir oturumda veri tabanı geliştirme sürecinin her yönü için buna yaklaşmam uygun değil, bu yüzden belirli bir senaryo için dava açacağım.
Projeniz bu kriterlere uyuyorsa, VS2010 için zorlayıcı bir durum olduğunu düşünüyorum:
- Ekibiniz uygulama geliştirme için VS2010 kullanıyor.
- Ekibiniz kaynak kontrolü ve derleme yönetimi için TFS kullanıyor.
- Veritabanınız SQL Server.
- Ekibiniz, VS otomatikleştirilmiş testine zaten sahip veya ilgileniyor.
Eğer veritabanı geliştirme için VS2010 değerlendiren yapıyorsanız, İncil olacak Visual Studio Veritabanı Kılavuzu gelen Visual Studio ALM Rangers . Referansları olmayan takip eden alıntılar bu belgeden olacaktır.
Git o zaman ...
Veritabanı geliştirme süreci uygulama geliştirmeden neden farklı?
Veri. Bu sinir bozucu veriler için olmasaydı, veritabanı geliştirme bir çifte olurdu. Her sürümde her şeyi DROP yapabilir ve bu sıkıntılı değişim yönetimini unutabiliriz.
Verilerin varlığı, veri tabanı tablolarını veya diğer veri şemalarının şeklini etkileyen uygulama geliştirme çabaları tarafından değişiklikler yapıldığında veri taşındığı, dönüştürüldüğü veya yeniden yüklendiği için veri tabanı değişim sürecini zorlaştırmaktadır. Bu değişim süreci boyunca, üretim kalitesi verileri ve operasyonel durum, kurumun bütünlüğünü, değerini ve kullanışlılığını tehlikeye atabilecek değişikliklere karşı korunmalıdır.
SSMS'nin nesi var?
Buna bir sebep olarak SQL Server Management Studio deniyor. Bağımsız bir araç olarak, geliştirme çabalarını yönetmek için pratik değildir eğer Kabul en iyi uygulamaları takip edeceğiz.
Yalnızca komut dosyaları ile, geliştirilmeniz için oluşturulan kaynak kontrol uygulamalarını anlamlı bir şekilde uygulamak için, her iki nesne tanımını da (örneğin bir CREATE TABLE komut dosyası) korumalı ve komut dosyalarını değiştirmelisiniz (örneğin ALTER TABLE) VE senkronize kaldıklarından emin olmak için çok çalışmalısınız.
Bir tablodaki değişikliklerin sürümleri zinciri oldukça hızlı bir şekilde karıştırılabilir. Çok basit bir örnek:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
Sürüm 3'e göre, veritabanı değişiklik komut dosyası şunları içerir:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
Bu veritabanının canlı sürümü sürüm 1 ise ve bir sonraki sürümümüz sürüm 3 ise, aşağıdaki komut tüm gerekli olacaktı ancak bunun yerine her iki ALTER ifadesi çalıştırılacak.
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
5 yıllık 4 haftalık sprintler bazı eğlenceli versiyon senaryoları ekler ve dağıtım süresi üzerindeki etkiyi en aza indirmek için ek insan kullanımı gerektirir.
Peki SSMS ile ilgili bir sorun mu var? Hayır, SQL Server'ı yönetmek, yönetmek ve yönetmek için iyi bir şeydir. Yaptığı gibi davranmadığı şey, bir veritabanı geliştiricisine (zaman zaman) değişimi yönetme görevini yerine getirmekte yardımcı olmaktır.
Veritabanının her sürümünü kaynaktan kuramaz ve gelecekteki sürümlere yükseltemezseniz, kaynak kontrolünüz bozulur. Eğer öyle düşünmüyorsan, Eric Sink’e sor .
Peki ya SSMS + <- şema karşılaştırma aracını ekle ->?
Bu kesinlikle doğru yönde bir adımdır ve senaryoları korumak için gereken manuel çabanın çoğunu elinden alır. Ancak (ve bu büyük bir şeydir), genellikle ilgili manuel adımlar vardır.
Popüler şema karşılaştırma araçları tamamen otomatik olabilir ve yapım sürecine entegre edilebilir. Ancak, benim deneyimlerime göre, en yaygın uygulama elle yapılan bir karşılaştırma için, ortaya çıkan betikler göz küresine alınmış, kaynak kontrolünde kontrol edilmiş, sonra dağıtmak için manuel olarak çalıştırılmıştır. İyi değil.
Ne zaman yanılabilir insanları inşa etme ya da yerleştirme sürecine dahil etmek zorunda kalırsak, riski ortaya çıkarır ve süreci tekrarlanamaz hale getiririz.
Siz ve ekibiniz tamamen otomatik şema karşılaştırması ve dağıtımı olan birkaç kişi arasındaysanız, size şapka atmak! Sizler VS2010'un sunduğu avantajlara açık olma ihtimaliniz çok yüksektir:
- Manuel adımların tehlikeli olduğunu zaten kabul ettin.
- Otomasyonun değerini görüyorsunuz.
- Çalışması için gereken zamana yatırım yapmaya hazırsınız.
Tek bir adımda bir derleme oluşturamazsanız veya tek bir adımda konuşlandırmazsanız, geliştirme ve dağıtım işleminiz bozulur. Eğer öyle düşünmüyorsan, Joel Spolsky'ye sor .
Neden VS2010?
Sorulan @NickChammas sorusu, VS2010'un neden veritabanı geliştirme için bir oyun değiştirici olduğunu gösteren katil özellikler arıyor. Bu temele dayanabileceğimi sanmıyorum.
Belki de komik olarak, başkalarının bu araçta kusur gördüğü yerlerde benimsemenin güçlü nedenlerini görüyorum:
- Yaklaşımınızı değiştirmek zorunda kalacaksınız.
- Siz ve ekibiniz farklı bir şekilde çalışmak zorunda kalacaksınız.
- Her değişikliğin etkisini, ayrıntılı olarak değerlendirmek zorunda kalacaksınız.
- Her değişikliğin önemsiz hale getirilmesine yönlendirileceksiniz .
Bir projedeki tek DBA'sınız, veritabanındaki tüm değişiklikleri yönetiyorsanız, bu mantık saçma üzerinde saçma bir kenarlık gibi görünmelidir. Bununla birlikte, @BrentOzar'ın bir noktaya sahip olduğunu düşünüyorsanız ve yeni kurallardan biri, Herkesin DBA'sı olduğunu düşünüyorsa , veritabanı değişimini ekipteki her geliştiricinin çalışabileceği şekilde kontrol etmeniz gerekecektir.
Veritabanı Projelerinin Kabulü, bazı geliştiriciler için zihinsel bir değişim ( eski alışkanlıkların kırılması zordur ) veya en azından süreç veya iş akışlarında değişiklik gerektirebilir. Üretim veritabanının veritabanının geçerli sürümünü temsil ettiği veritabanı uygulamaları geliştiren geliştiricilerin
, kaynak kodun veritabanlarında değişiklik yapılan araç olduğu kaynak koduna dayalı bir yaklaşım benimsemesi gerekecektir . Visual Studio Veritabanı Projelerinde, proje ve kaynak kodu, veritabanı şeması için "Gerçeğin Bir Sürümü" dür ve geliştirici veya kuruluş tarafından uygulama yığınlarının diğer bölümleri için zaten kullanılmış olan SCM iş akışları kullanılarak yönetilir. Veriler için, üretim veritabanı olması gerektiği gibi “Gerçeğin Bir Versiyonu” olarak kalır.
VS2010'un veritabanı geliştirme yaklaşımını başarılı bir şekilde benimsemek için gerekli olan temel değişime ulaştık ...
Veritabanınızı kod olarak kabul edin
Artık canlı veritabanını değiştirmek yok. Her veritabanı değişikliği, bir uygulama değişikliği ile aynı kalıbı izleyecektir. Kaynağı değiştirin, derleyin, dağıtın. Bu Microsoft'tan geçici bir yön değişikliği değil, bu SQL Server'ın geleceğidir . Kod olarak veritabanı kalmak için burada.
Veritabanı geliştiricisi, uygulamanın sürümü için nesnenin şeklini tanımlar, veritabanı motorundaki mevcut nesnenin istenen şekle nasıl dönüştürüleceğini değil. Kendinize soruyor olabilirsiniz: Bu zaten müşteri tablosunu içeren bir veritabanına nasıl dağıtılır? Dağıtım motorunun çalmaya başladığı yer burası. Daha önce belirtildiği gibi, dağıtım motoru, şemanızın derlenmiş sürümünü alır ve bir veritabanı dağıtım hedefi ile karşılaştırır. Farklılaştırıcı motor, projeden dağıtmakta olduğunuz sürümle eşleşmesi için hedef şemayı güncellemek için gerekli komut dosyalarını üretecektir.
Evet, benzer bir modeli izleyen başka araçlar da var ve cevabımdaki sınırlamalar dışında kalan projeler için, aynı derecede dikkate değer. Ancak, Visual Studio ve Team Foundation Server ALM ile çalışıyorsanız, rekabet edebileceklerini sanmıyorum.
VS2010 veritabanı projelerinde yanlış olan nedir?
- Mükemmel değiller . Ancak sınırlamaların ve sorunlu alanların farkındaysanız, bunları geçici olarak çözebilirsiniz.
- Karmaşık veri hareketleri hala dikkat ve dikkat gerektiriyor ancak dağıtım öncesi / sonrası komut dosyaları için hazırlanmıştır.
Düzenleme: Peki o zaman amacın ne?
@AndrewBickerton, orijinal soruyu cevaplamadığım bir yorumdan bahsetti, bu yüzden şunu özetleyeceğim: "Neden veritabanı geliştirme için SSMS üzerinden Visual Studio 2010 kullanmalıyım?" İşte.
- SSMS bir veritabanı geliştirme aracı değildir. Evet, SSMS ile TSQL geliştirebilirsiniz, ancak VS2010'un zengin IDE özelliklerini sağlamaz.
- VS2010 veritabanınızı kod olarak ele almak için bir çerçeve sağlar.
- VS2010, statik kod analizini veritabanı kodunuza getirir .
- VS2010, yap-konuş-test döngüsünü tamamen otomatikleştirmek için araçlar sunar.
- SQL2012 ve Visual Studio vNext, veritabanı projelerinin yeteneklerini genişletiyor. Şimdi VS2010 ile tanışın; yeni nesil veritabanı geliştirme araçlarına başlayabilirsiniz.