Yazımızın amacına uygun olabilmesi için kavramlar üzerine şu
şekilde bir özet yapabiliriz; Database
Engine günlük işlemlerin tutulduğu normalize
yapıdaki operasyonel veri tabanlarını veya kompleks analitik işlemler için gerekli
verilerin tutulduğu dimensional yapıdaki
analitik veri ambarlarını yönetir. Analysis
Services ise OLAP amacı ile tutulan, veri ambarlarından beslenen ve cube (Tabular
ve PowerPivot da aynı şekilde) olarak ifade edilen yapıları yönetmektedir.
Herhangi bir veritabanı türünü tasarlamak için bir
notepad’den faydalanılabileceği gibi (pek iyi bir yöntem sayılmaz) tamamen bu
iş için donanımlı hale getirilmiş Visual
Studio (SSDT - BIDS - SSMS) veya duruma göre Office ürünleri de kullanılabilir. Her iki modelin kendine has rahat
ettiren geliştirme ortamları artık developerların alışkanları arasında yerini
almıştır. Örneğin bir BI Developer Multi-Dimensional Cube tasarlamak için
SSTD(önceden BIDS)’da proje başlatması gerektiğini bilir. Benzer şekilde veri
ambarı tasarımı yapacak bir developer SSMS’yu açarak kısa sürede kodlarla veya arayüzlerle
çalışmaya başlayabilir.
SSAS tarafının esas geliştirme ortamı olan Visual
Studio(SSDT-BIDS) ve/veya Excel PowerPivot araçları gerekli rahatlığı sağlayabilmektedir.
Database Engine için düşünürsek, acaba SSMS proje sürecindeki tüm ihtiyaçların
karşılanması konusunda yeterli midir? Veya mevcut özellikler etkin bir şekilde kullanılmakta
mıdır?
Bu yazımızda, Database Engine tarafından yönetilen veritabanlarını
inşa etmek için kullanılabilecek yöntemlerin elit olanlarına odaklanacağız.
Geleneksel Yöntemler
Geleneksel olarak(DBA bakış açısıyla) bir veritabanı şu yöntemlerle
oluşturulmaktadır:
1- Kodlar ve arayüzler yardımıyla gelişigüzel:
SQL Server Management Studio içerisinde sıfırdan
kodlama imkânı olduğu gibi birçok konuda hazır script ve büyük kolaylık sağlayan
kullanıcı dostu arayüzler de mevcuttur. Geliştirme bunlar yardımıyla
yapılabilir.
Bu ilk yöntem küçük veri tabanları için
mantıklı olabilir. Ancak yapılacaklar çoğaldıkça iş çığırından çıkmaya
başlayacaktır. Bu durum çok iyi bilmediğiniz bir yoldan işaret bırakmadan geçip
gitmek gibi olacaktır. Yeterince uzaklaştıktan sonra geri dönmek istediğinizde
ise her izden bir anlam çıkarmaya zorlanmış olursunuz. Yani veritabanında neler
olup bittiğini anlamak için bir nevi tersine
mühendislik yapmanız gerekir. Hâlbuki bu şekildeki çalışma bir kademe daha
geliştirilerek derli toplu hale getirilebilir.
2- Solution yaklaşımı ile daha düzenli
Veritabanı scriptlerini solution mantığında
SSMS üzerinde bir araya getirmek
düzenli ve katmanlı çalışma olanağı sağlar. Geliştirme esnasında bir nevi proje dokümantasyonu yapılmış olur.
Ayrıca diğer türdeki dosyaları da (notlar,
resimler vs.) solution içerisindeki projelerle birlikte taşıma imkânı doğar.
Bu yöntemle çalışmak için SSMS üzerinde File > New > Project yoluyla açılan
aşağıdaki pencereden SQL Server Scripts
templatei tercih edilir.
Bu pencerede scriptlerin kaydedileceği
lokasyon, solutionın ve ilk açılacak projenin adı girilir. Açılan Solution Explorer penceresindeki Solution
çatısı altına yeni projeler (Solution >
Add > New Project) açılarak scriptler daha üst hiyerarşilerde gruplanabilir.
3- Database Diagramlar kullanarak daha görsel
Kodlar ile çalışmak artık sizi yorduysa tablo
oluşturma ile ilgili işlemleri görsel olarak da yapabilirsiniz.
İlgili tabloları aynı diagramda tutup
aralarındaki ilişkileri sürükle bıraklarla kolayca tanımlamak mümkün. Yeni diagramlar
Object Explorer’dan ilgili veritabanı
altındaki Database Diagrams
klasörünü sağ tıklayıp New Database
Diagram seçeneği ile oluşturulabilir. Diagramlar üzerinde yapılan tüm
değişiklikler veritabanını doğrudan etkileyebilecek şekilde işleneceği
unutulmamalıdır.
Geleneksel yöntemler ortalama bir veritabanı projesini başarıyla
ilerletmenize olanak tanıyabilir. Ancak proje birkaç developerın birlikte
çalışması gerekecek kadar büyüyorsa, değişiklikler ve zaman baskısı artıyorsa,
yapılan değişikliklerin versiyonlanması ve versiyonlar arası değişimin takibi
gibi talepler doğuyorsa artık geleneksel yöntemlerin biraz dışına çıkma vakti gelmiş
demektir. İşte bu noktada Visual Studio üzerinde başlatılabilen SQL Server Database Project devreye girecektir.
SQL Server Database Projesi
Genelde veritabanı oluşturma işi bir yazılım projesi gibi
değerlendirilmez. Yazılım projelerinde bir birbirinden beslenen katmanların
oluşturulması, defalarca kez yapılan işlemlerin kod kütüphaneleri(dll) haline
getirilmesi ve kaynak kullanımının optimize edilebilmesi için tasarım
desenlerinin uygulanması gerekir.
Veritabanı geliştirmek istendiğinde ise daha çok konu ve
konular arası ilişkiler düşünülerek yapılar bir bir ortaya çıkartılır. Bu süreç
her ne kadar geleneksel yöntemlerle sürdürülebilir olarak görünse de yazılımsal
mantıkta bir proje yaklaşımı çıkabilecek aksaklıkları ve düzeltmeleri en aza
indireceğinden geliştirme aracı tercihini Visual Stuido tarafında kullanmakta
fayda vardır.
Bunun için öncelikle Visual
Studio’yu açarak File > New > Project
seçeneği üzerinden aşağıdaki SQL Server proje türünü tercih ederiz.
Bu örneğimizde YMagaza
isimli Solution ve içerisinde YMagaza_1 isimli bir Project oluşacaktır.
Proje özelliklerinin ayarlanması
Proje özelliklerinin ayarlanması
Proje kapsamındaki ayarları örneğin ortaya çıkacak olan veritabanın
konfigürasyonunu yapmak için YMagaza_1
> Properties yoluyla açılan ekrandan faydalanabilirsiniz. Açılan bu
ekranın bölümleri arasında gezinerek Debug, Build ve CLR ile ilişkili gerekli
ayarları en başta yapmak daha mantıklı olacaktır. Kullanılan ifadelerin
uyumluluğu sürekli olarak buradaki ayarlara göre kontrol edilmektir.
Project Settings
bölümündeki Target Platform kısmında
veritabanının publish edileceği server versiyonunu, Output types kısmında Build edilen projenin Bin\Debug klasöründeki son çıktısının format ve dosya versiyonunu belirtebilirsiniz.
Nesneleri oluşturmak (Table, Schema vs.)
Nesneleri oluşturmak (Table, Schema vs.)
İhtiyacımız olan proje ayarlarını yaptıktan sonra artık
gönül rahatlığı ile veritabanını inşa etmeye başlayabiliriz. Düzenli
çalışabilmek için proje altında klasörler oluşturarak scriptleri gruplamanızı
tavsiye ederim. Örneğin biz YMagaza_1
> Add > New Folder ile Satis isimli bir klasör oluşturup veri
tabanlarındaki Schema/Object
hiyerarşisini kurmayı tercih edeceğiz. Projemizde Satis klasörü altında tablo, view vs. gibi nesneleri ayrı ayrı
klasörlerde tuttuk. Gereken veritabanı nesnelerini YMagaza_1 > Add > New Item… Seçeneği ile istediğimiz klasöre
bir bir ekliyoruz. Bu yöntemle tüm veritabanı nesnelerinin şablonlarını projenize
dâhil edebilirsiniz.
Eklediğimiz nesneye özgü arayüz, şablon ve varsa yaptığımız
hatalarla ilgili açıklamalar çalışmamızı oldukça kolaylaştırıyor.
Birden fazla proje yardımıyla veritabanı geliştirmek
Proje büyüdükçe geliştirme sürecine dâhil olan developerların
sayısı veya birbirinden ayrı yönetilmesi gereken işlerin miktarı-çeşidi
artacaktır. Bu noktada bir veritabanını birden fazla proje açarak
geliştirebilir ve işleri daha üst hiyerarşide ayırabiliriz. Örneğin her bir
Schema için ayrı bir proje başlatmak isteyebilirsiniz.
Bu şekilde çalışabilmek için YMagaza > Add > New Project seçeneği ile yeni bir proje başlatıyoruz
ve YMagaza_2 adını veriyoruz. Şuanda
YMagaza_1 ve YMagaza_2 projeleri bir birinden bağımsız projelerdir. YMagaza_2 projesine References > Add Database Reference…
Yoluyla veritabanı referansı ekleyelim.
Add Database
References penceresindeki Database
Reference bölümünde, bu proje içerisinden işaret edilebilecek nesnelerin
bulunduğu projeyi, system veri tabanlarından birini veya dacpac uzantılı olup içerisinde veritabanı
iskeletini saklayan herhangi bir dosyayı seçebilirsiniz. Database Location bölümünde ise referansımız ile aynı veritabanı için mi yoksa aynı serverda farklı veritabanı veya farklı serverda farklı veritabanı için
mi geliştirme yaptığınızı belirtebiliyorsunuz.
Örneğimizde aynı solution altındaki YMagaza_1 projesini referans ediyoruz ve her iki projenin de aynı veritabanı için sürdürüldüğünü
ifade ediyoruz.
Bu sayede artık YMagaza_2
projesindeki bir tablo üzerinde çalışırken YMagaza_1
projesindeki Kategori tablosunda
bulunan kolona erişip PK-FK ilişkisini hatasız kurabiliyoruz.
Nesnelerin bağlılıklarını görüntülemek
Bir veritabanı
nesnesini nelerin kullandığını görüntülemek isteyebilirsiniz. Bunun için
nesnenin üzerine gelip Find All
References seçeneğini tıklamanız yeterli. Sonuç penceresinde tüm
bağlılıkları listeleyebilirsiniz.
Bu örneğimizde YMagaza_1 isimli projedeki Kategori
tablosunun bağlıklarını istedik. Sonuç listesinde YMagaza_2 projesindeki Uretim
tablosuyla aralarında bir PK-FK ilişkisi olduğunu görüntüledik. Listeden ilgilendiğiniz
yolu tıklayarak kodların bulunduğu sayfayı açabilirsiniz.
Benzer şekilde bir nesnenin tanımlandığı(oluşturulduğu) yere
ulaşmak istediğinizde ise nesnenin ismini sağ tıklayıp Go To Definition seçeneğini kullanabilirsiniz.
Snapshot almak
Snapshot almak
Proje geliştirme süresince zaman zaman belli bir ana kadar olan
değişiklikleri saklamak isteyebiliyoruz. Bunun için örneğin YMagaza_2 > Snapshot Project seçeneği
ile projenin anlık görünümlerini dacpac
paketleri halinde saklamak mümkün.
Publish ayarları
Publish ayarları
Visual Studio üzerinde yapısını inşa ettiğimiz veritabanını
SQL Server’a gönderme işlemine Publish
denir. Projeyi publish etmek için YMagaza_2
> Publish seçeneği ile açılan pencerede veritabanı bağlantı bilgilerini,
publish scriptini ve davranışlarını ayarlayabilirsiniz. Aşağıdaki pencerede bağlantı
cümlesini belirtip Publish butonunu
tıklayarak veritabanının serverda inşa edilmesini sağladık.
Artık veritabanımız servera gönderildi ve SSMS üzerinden erişilebilir
duruma geldi.
Import Database Özelliği
Projenin sıfırdan nasıl inşa edilebildiğini inceledik. Peki,
var olan bir veritabanını da benzer şekilde geliştirmeye devam ettirebilir
miyiz?
Bunun için açtığınız bir proje üzerinden (bu örnekte AdwCalisma isimli projede) AdwCalisma > Import yoluyla gelen
seçeneklerden uygun olanını tercih ederek hazır yapıyı Visual Studio projesi
kapsamına alabilirsiniz.
Buradaki örnekte Database
seçeneği ile ilerlersek açılan pencerede gerekli bağlantı ayarlarını ve import
opsiyonlarını belirttikten sonra Start
butonunu tıklayarak yapının proje içerisine aktarımını başlatabiliriz.
Kısa süre içerisinde import işlemi tamamlanacak ve aşağıdakine
benzer bir çalışma ortamı karşımıza çıkacaktır.
Schema Compare Özelliği
Proje geliştirirken takip edilmesi gereken bir başka şey ise
iki yapı arasındaki değişikliklerin neler olduğudur. Bu ihtiyaca cevap olarak Schema Compare özelliği kullanılabilir.
Bir başka yazımızda Data Compare
özelliği ile birlikte incelemeyi planladığım bu özelliğe kısaca bir göz atalım.
Örneğimizde AdwCalisma
> Schema Compare seçeneğiyle açılan sayfada karşılaştırmak istediğimiz
kaynak ve hedefi belirtiyoruz. Ben bu örnekte proje içerisinde ProductCategory
tablosunda birkaç değişiklik yaptım. Şimdi serverdaki veritabanı ile
projemizdeki yapıyı mukayese edelim.
Kaynak kısmında projeyi, hedef kısmında serverdaki veritabanını
gösterdikten sonra Compare butonu ile
mukayese işlemini başlatıyoruz.
Kısa süre içerisinde analiz yapılıyor ve aşağıdakine benzer
bir arayüz ile farklılıklar ifade ediliyor.
İsterseniz üst menüde bulunan Update butonunu kullanarak değişikliklerin hedefte uygulanmasını sağlayabilirsiniz.
Veritabanı inşası için kullanılan bu son yöntem, proje
süresince doğabilecek neredeyse tüm ihtiyaçları karşılayabilmektedir. Ancak
belki siz de benim gibi karma yöntemleri tercih etmek isteyebilirsiniz. Her ne
kadar birçok kolaylık sağlasa da geliştirmeyi bir noktaya kadar SSMS üzerinde diagramlarla
ilerletmek daha pratik geliyor bana.
Arayüzler beni kesmez kodlar benim işim diyorsanız Visual
Studio içerisindeki SQL Database
projesi sizin için biçilmiş kaftan demektir.
Örneklerimizde Visual Studio 2013 Ultimate kullandık. İhtiyacınız
olan Visual Studio biraz da kendi ortamınıza bağlı olduğu için versiyon ve
gereklilikler meselesini size bırakıyorum.
Faydalı olması dileğiyle…
Bu SQL Database projesini bir winform uygulamaya dahil edip daha sonra tablolar üzerinde değişiklik yapıp, yeni sql table yapısını winform tarafında kod ile nasıl çalıştırabilr veya tetikleyebilirim ki; winform kurulumuyla birlikte yeni update edilmiş DB de gelmiş olsun.
YanıtlaSil